Re: [PATCH 0/9] Support for block device NVMEM providers
Loic Poulain <[email protected]> Wed, 29 Apr 2026 22:20:17 +0200
| Newsgroups | org.infradead.lists.ath10k,org.kernel.vger.linux-arm-msm,org.kernel.vger.linux-block,org.kernel.vger.linux-bluetooth,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mmc,org.kernel.vger.linux-wireless,org.kernel.vger.netdev |
|---|---|
| Message-ID | <CAFEp6-1GdaJd6Ua15TsyQC07QDbArXO2JZa9nKVFoCG=4xBpWQ@mail.gmail.com> |
Hi Andrew, On Wed, Apr 29, 2026 at 3:06 AM Andrew Lunn <[email protected]> wrote: > > > Note that this is currently limited to eMMC-backed block devices, as > > only the eMMC core associates a firmware node with the block device > > (add_disk_fwnode). This can be easily extended in the future to > > support additional block drivers. > > Would this be > > https://elixir.bootlin.com/linux/v7.0.1/source/drivers/mmc/core/block.c#L2641 > > Looking at that function, mmc_blk_alloc_req() i don't see it doing > anything different between an eMMC and MMC. Yes, that’s correct, in the previous sentence I should have referred to MMC-backed storage rather than specifically eMMC, since the MMC scope also includes removable MMC/SD cards. That said, eMMC is more likely to be used as an NVMEM area. > > An eMMC you don't expect to go away, since it is soldered > down. However an MMC can be ejected. Is the code prepared for that? I was about to say this wouldn’t be an issue, since the NVMEM device would be unregistered along with the MMC card removal. However, looking at nvmem_unregister(), it simply performs a kref_put(). This means that if a consumer still holds a reference, e.g. through an nvmem_cell, it might still be able to access the NVMEM reg_read callback after the NVMEM device has been unregistered and the NVMEM provider data (bnv) has been freed... I guess I need to try and dig into this but at first glance it seems to be a general NVMEM issue, since even though most NVMEM providers are not hard-removable, there is nothing that fundamentally prevents them from being logically removed/unbound at runtime. Regards, Loic