• S
    rtl8187: fix regression on MIPS without coherent DMA · b6213e41
    Stanislaw Gruszka 提交于
    This patch fixes regression caused by commit a16dad77 "MIPS: Fix
    potencial corruption". That commit fixes one corruption scenario in
    cost of adding another one, which actually start to cause crashes
    on Yeeloong laptop when rtl8187 driver is used.
    
    For correct DMA read operation on machines without DMA coherence, kernel
    have to invalidate cache, such it will refill later with new data that
    device wrote to memory, when that data is needed to process. We can only
    invalidate full cache line. Hence when cache line includes both dma
    buffer and some other data (written in cache, but not yet in main
    memory), the other data can not hit memory due to invalidation. That
    happen on rtl8187 where struct rtl8187_priv fields are located just
    before and after small buffers that are passed to USB layer and DMA
    is performed on them.
    
    To fix the problem we align buffers and reserve space after them to make
    them match cache line.
    
    This patch does not resolve all possible MIPS problems entirely, for
    that we have to assure that we always map cache aligned buffers for DMA,
    what can be complex or even not possible. But patch fixes visible and
    reproducible regression and seems other possible corruptions do not
    happen in practice, since Yeeloong laptop works stable without rtl8187
    driver.
    
    Bug report:
    https://bugzilla.kernel.org/show_bug.cgi?id=54391Reported-by: NPetr Pisar <petr.pisar@atlas.cz>
    Bisected-by: NTom Li <biergaizi2009@gmail.com>
    Reported-and-tested-by: NTom Li <biergaizi2009@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: NStanislaw Gruszka <stf_xl@wp.pl>
    Acked-by: NLarry Finger <Larry.Finger@lwfinger.next>
    Acked-by: NHin-Tak Leung <htl10@users.sourceforge.net>
    Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
    b6213e41
rtl8187.h 6.5 KB