On Sat, 27 Jan 2024, Linus Walleij wrote: > Use the scatterlist memory iterator instead of just > dereferencing virtual memory using sg_virt(). > This make highmem references work properly. > > This driver also has a bug in the PIO sglist handling that > is fixed as part of the patch: it does not travers the > list of scatterbuffers: it will just process the first > item in the list. This is fixed by augmenting the logic > such that we do not process more than one sgitem > per IRQ instead of counting down potentially the whole > length of the request. > > We can suspect that the PIO path is quite untested. It was tested for sure ... at least by myself ... some 17 years ago ! > Suggested-by: Christoph Hellwig <hch@xxxxxx> > Link: https://lore.kernel.org/linux-mmc/20240122073423.GA25859@xxxxxx/ > Signed-off-by: Linus Walleij <linus.walleij@xxxxxxxxxx> [...] > if (!nodma) > - dev_dbg(host->dev, "fallback to PIO for data at 0x%p size %d\n", > - host->pio_ptr, host->pio_size); > + dev_dbg(host->dev, "fallback to PIO for data\n"); Given this message is about telling you why PIO is used despite not having asked for it, I think it would be nicer to preserve the equivalent info responsible for this infliction i.e. data->sg->offset and data->blksz. The rest looks sane to me ( ... I think). Nicolas