mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-11 04:20:06 +00:00
mmc: core: Use GFP_NOIO in ACMD22
While reviewing the SDUC series, Adrian made a comment concerning the
memory allocation code in mmc_sd_num_wr_blocks() - see [1].
Prevent memory allocations from triggering I/O operations while ACMD22
is in progress.
[1] https://lore.kernel.org/linux-mmc/3016fd71-885b-4ef9-97ed-46b4b0cb0e35@intel.com/
Suggested-by: Adrian Hunter <adrian.hunter@intel.com>
Reviewed-by: Adrian Hunter <adrian.hunter@intel.com>
Fixes: 051913dada ("mmc_block: do not DMA to stack")
Signed-off-by: Avri Altman <avri.altman@wdc.com>
Cc: stable@vger.kernel.org
Message-ID: <20241021153227.493970-1-avri.altman@wdc.com>
Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
@@ -995,6 +995,8 @@ static int mmc_sd_num_wr_blocks(struct mmc_card *card, u32 *written_blocks)
|
|||||||
u32 result;
|
u32 result;
|
||||||
__be32 *blocks;
|
__be32 *blocks;
|
||||||
u8 resp_sz = mmc_card_ult_capacity(card) ? 8 : 4;
|
u8 resp_sz = mmc_card_ult_capacity(card) ? 8 : 4;
|
||||||
|
unsigned int noio_flag;
|
||||||
|
|
||||||
struct mmc_request mrq = {};
|
struct mmc_request mrq = {};
|
||||||
struct mmc_command cmd = {};
|
struct mmc_command cmd = {};
|
||||||
struct mmc_data data = {};
|
struct mmc_data data = {};
|
||||||
@@ -1018,7 +1020,9 @@ static int mmc_sd_num_wr_blocks(struct mmc_card *card, u32 *written_blocks)
|
|||||||
mrq.cmd = &cmd;
|
mrq.cmd = &cmd;
|
||||||
mrq.data = &data;
|
mrq.data = &data;
|
||||||
|
|
||||||
|
noio_flag = memalloc_noio_save();
|
||||||
blocks = kmalloc(resp_sz, GFP_KERNEL);
|
blocks = kmalloc(resp_sz, GFP_KERNEL);
|
||||||
|
memalloc_noio_restore(noio_flag);
|
||||||
if (!blocks)
|
if (!blocks)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user