Re: sdhci broke in 4.14 [was: MMC fixes for v.4.14-rc4]

From: Ulf Hansson
Date: Fri Nov 24 2017 - 10:20:29 EST


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