Re: mmc vs highmem, was: Re: [PATCH 2/2] blk-mq: ensure a q_usage_counter reference is held when splitting bios
From: "Arnd Bergmann" <arnd@arndb.de>
Date: 2024-01-22 09:26:54
Also in:
linux-mmc
On Mon, Jan 22, 2024, at 08:34, Christoph Hellwig wrote:
On Mon, Jan 15, 2024 at 12:20:50PM +0100, Ulf Hansson wrote:quoted
Not sure exactly what problem you are trying to solve here, but I am certainly happy to help, if I can. Can you perhaps point me to a couple of drivers that need to be converted?Sure. mmc_alloc_disk sets BLK_BOUNCE_HIGH for any mmc host that doesn't have a DMA mask set, which is a bit odd as all proper devices should have a valid DMA mask. I suspect platform devices might sometimes not have one, which historically was the wild west.
I found five drivers that have a legacy platform device definition without a DMA mask: arch/m68k/coldfire/device.c: "sdhci-esdhc-mcf" arch/arm/mach-omap1/devices.c: "mmci-omap" (slave DMA) arch/sh/boards/board-sh7757lcr.c: "sh_mmcif" (slave DMA) arch/sh/boards/mach-ecovec24/setup.c: sh_mmcif" (slave DMA) arch/sh/boards/mach-*/setup.c: "sh_mobile_sdhi" (slave DMA) drivers/misc/cb710/core.c: "cb710-mmc" (pio-only) None of these embedded platforms actually have highmem, though the omap1 machine may run a kernel that has highmem support enabled. Most of the others only support DT based probing after we removed a lot of old board files a year ago, so they will always have a 32-bit mask set at probe time. The slave DMA case is interesting,
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, mcx (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.
Arnd