12345678910111213141516171819202122232425262728293031323334 |
- From 46b28bf91d411852abb18119c27d73da6064826d Mon Sep 17 00:00:00 2001
- From: Jonathan Bell <[email protected]>
- Date: Mon, 16 May 2022 10:28:27 +0100
- Subject: [PATCH] mmc: block: Don't do single-sector reads during
- recovery
- See https://github.com/raspberrypi/linux/issues/5019
- If an SD card has degraded performance such that IO operations time out
- then the MMC block layer will leak SG DMA mappings in the swiotlb during
- recovery. It retries the same SG and this causes the leak, as it is
- mapped twice - once in sdhci_pre_req() and again during single-block
- reads in sdhci_prepare_data().
- Resetting the card (including power-cycling if a regulator for vmmc is
- present) ought to be enough to recover a stuck state, so for now don't
- try single-block reads in the recovery path.
- Signed-off-by: Jonathan Bell <[email protected]>
- ---
- drivers/mmc/core/block.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
- --- a/drivers/mmc/core/block.c
- +++ b/drivers/mmc/core/block.c
- @@ -1930,7 +1930,7 @@ static void mmc_blk_mq_rw_recovery(struc
- return;
- }
-
- - if (rq_data_dir(req) == READ && brq->data.blocks >
- + if (0 && rq_data_dir(req) == READ && brq->data.blocks >
- queue_physical_block_size(mq->queue) >> 9) {
- /* Read one (native) sector at a time */
- mmc_blk_read_single(mq, req);
|