On 24 November 2017 at 16:15, Jiri Slaby <jslaby@xxxxxxx> wrote: > On 11/21/2017, 04:08 PM, Ulf Hansson wrote: >> Subject: [PATCH] mmc: sdhci: Fix bounce buffer overflow > ... >> --- a/drivers/mmc/host/sdhci.c >> +++ b/drivers/mmc/host/sdhci.c > ... >> @@ -3651,22 +3652,29 @@ int sdhci_setup_host(struct sdhci_host *host) >> spin_lock_init(&host->lock); >> >> /* >> + * Maximum number of sectors in one transfer. Limited by SDMA boundary >> + * size (512KiB). Note some tuning modes impose a 4MiB limit, but this >> + * is less anyway. >> + */ >> + mmc->max_req_size = 524288; >> + >> + /* >> * Maximum number of segments. Depends on if the hardware >> * can do scatter/gather or not. >> */ >> - if (host->flags & SDHCI_USE_ADMA) >> + if (host->flags & SDHCI_USE_ADMA) { >> mmc->max_segs = SDHCI_MAX_SEGS; >> - else if (host->flags & SDHCI_USE_SDMA) >> + } else if (host->flags & SDHCI_USE_SDMA) { >> mmc->max_segs = 1; >> - else /* PIO */ >> + if (swiotlb_max_segment()) { >> + unsigned int max_req_size = (1 << IO_TLB_SHIFT) * >> + IO_TLB_SEGSIZE; >> + mmc->max_req_size = min(mmc->max_req_size, >> + max_req_size); >> + } >> + } else { /* PIO */ >> mmc->max_segs = SDHCI_MAX_SEGS; > > It seems to work fine. FWIW the debug output is: > [ 0.708312] mmc0: max_segs=1 max_req_size=262144 h->flags=00004001 Thanks for testing! I post a proper formatted patch very soon. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html