Re: mmc vs highmem, was: Re: [PATCH 2/2] blk-mq: ensure a q_usage_counter reference is held when splitting bios

Arnd Bergmann
2024-01-22T14:57:38Z

On Mon, Jan 22, 2024, at 14:39, Christoph Hellwig wrote:
> On Mon, Jan 22, 2024 at 10:26:30AM +0100, Arnd Bergmann wrote:
>> > A better indicator might be the use of page_address in the I/O path,
>> > which usually comes in the form of using the sg_virt() helper.
>> > For drivers/mmc/ that seems to be: davinci_mmc, moxart-mmc, mvsdio,
>> > mxcmmc, omap, sdhci-esdhc-mcf and sh_mmcif.
>>
>> Out of these, I think only the mvsdio one is actually use
>> on boards with highmem: davinci, moxart, mxc (imx3) and omap2
>> are old enough to never have had more than 256MB or so of RAM,
>> and mcf (m68k) and sh can't even be built with CONFIG_HIGHMEM.
>
> It would be good to fix the one or two that could use highmem and add a
> depends on !HIGHMEM for the others

I would prefer a runtime check here, as one might still have a
multiplatform kernel where one machine can use highmem and
another machine can use one of these drivers, e.g. in
imx_v6_v7_defconfig.

> and then kill the bounce setup in
> mmc. It turn out in addition to the one legacy ISA SCSI driver and the
> two parport SCSI driver usb-storage actually also sets this flag,
> which might be a road blocker, but at this point I'm getting ready
> to just pull the plug if it doesn't break using embedded platforms
> using mmc entirely.

Agreed. I've added the maintainers for the Marvell Armada
platform to Cc, maybe one of them can look into this, see
the thread at [1] for this. The problem in the mvsdio.c
is the sg_virt(data->sg) in mvsd_setup_data(), which will
stop working when the MMC layer stops using bounce buffers
for highmem pages.

Arnd

[1] https://lore.kernel.org/all/20240122073423.GA25859@lst.de/