lkml.org 
[lkml]   [2017]   [Nov]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
Date
SubjectRe: sdhci broke in 4.14 [was: MMC fixes for v.4.14-rc4]
On 24 November 2017 at 16:15, Jiri Slaby <jslaby@suse.cz> 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

\
 
 \ /
  Last update: 2017-11-24 16:21    [W:0.044 / U:1.684 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site