Re: [PATCH] mmc: core: Use GFP_NOIO in ACMD22

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 16 Oct 2024 at 17:21, Avri Altman <Avri.Altman@xxxxxxx> wrote:
>
> > On Tue, 15 Oct 2024 at 11:44, Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > wrote:
> > >
> > > On 14/10/24 14:44, Avri Altman wrote:
> > > > 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://www.spinics.net/lists/linux-mmc/msg82199.html
> > > >
> > > > Suggested-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>
> > > > Signed-off-by: Avri Altman <avri.altman@xxxxxxx>
> > > > Cc: stable@xxxxxxxxxxxxxxx
> > > > ---
> > > >  drivers/mmc/core/block.c | 10 +++++++++-
> > > >  1 file changed, 9 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
> > > > index 04f3165cf9ae..042b0147d47e 100644
> > > > --- a/drivers/mmc/core/block.c
> > > > +++ b/drivers/mmc/core/block.c
> > > > @@ -995,6 +995,8 @@ static int mmc_sd_num_wr_blocks(struct
> > mmc_card *card, u32 *written_blocks)
> > > >       u32 result;
> > > >       __be32 *blocks;
> > > >       u8 resp_sz = mmc_card_ult_capacity(card) ? 8 : 4;
> > > > +     unsigned int noio_flag;
> > > > +
> > > >       struct mmc_request mrq = {};
> > > >       struct mmc_command cmd = {};
> > > >       struct mmc_data data = {};
> > > > @@ -1018,9 +1020,13 @@ static int mmc_sd_num_wr_blocks(struct
> > mmc_card *card, u32 *written_blocks)
> > > >       mrq.cmd = &cmd;
> > > >       mrq.data = &data;
> > > >
> > > > +     noio_flag = memalloc_noio_save();
> > > > +
> > > >       blocks = kmalloc(resp_sz, GFP_KERNEL);
> > >
> > > Could have memalloc_noio_restore() here:
> > >
> > >         memalloc_noio_restore(noio_flag);
> > >
> > > but I feel maybe adding something like:
> > >
> > >         u64 __aligned(8)        tiny_io_buf;
> > >
> > > to either struct mmc_card or struct mmc_host is better?
> > > Ulf, any thoughts?
> > >
> >
> > I have no strong opinion.
> Then I would vote to stay with Adrian's original NOIO suggestion, because:
> 1) My testing shows that mmc_sd_num_wr_blocks() is hardly being hit, and
> 2) that allocation is within the write timeout anyway
>
> So unless you want it otherwise, will remove the redundant macro call and re-spin.

Sounds good to me!

[...]

Kind regards
Uffe




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux