[mips] rtl8187: fix regression on MIPS without coherent DMA (Closes: #739978)
svn path=/dists/sid/linux/; revision=21111
This commit is contained in:
parent
f9344cb5f5
commit
7ce097a11b
|
@ -4,6 +4,8 @@ linux (3.13.4-2) UNRELEASED; urgency=medium
|
|||
* [armhf] net/wireless: Really enable WL_TI and dependent modules
|
||||
* aufs: Update to aufs3.13-20140127 (no functional changes)
|
||||
* [powerpc] Change I2C_POWERMAC from module to built-in (Closes: #713943)
|
||||
* [mips] rtl8187: fix regression on MIPS without coherent DMA
|
||||
(Closes: #739978)
|
||||
|
||||
-- Ben Hutchings <ben@decadent.org.uk> Sat, 22 Feb 2014 19:15:01 +0000
|
||||
|
||||
|
|
82
debian/patches/bugfix/all/rtl8187-fix-regression-on-MIPS-without-coherent-DMA.patch
vendored
Normal file
82
debian/patches/bugfix/all/rtl8187-fix-regression-on-MIPS-without-coherent-DMA.patch
vendored
Normal file
|
@ -0,0 +1,82 @@
|
|||
From: Stanislaw Gruszka <stf_xl@wp.pl>
|
||||
Date: Mon, 10 Feb 2014 22:38:28 +0100
|
||||
Subject: rtl8187: fix regression on MIPS without coherent DMA
|
||||
Origin: https://git.kernel.org/linus/b6213e413a4e0c66548153516b074df14f9d08e0
|
||||
Bug: https://bugzilla.kernel.org/show_bug.cgi?id=54391
|
||||
Bug-Debian: http://bugs.debian.org/739978
|
||||
|
||||
This patch fixes regression caused by commit a16dad77634 "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=54391
|
||||
|
||||
Reported-by: Petr Pisar <petr.pisar@atlas.cz>
|
||||
Bisected-by: Tom Li <biergaizi2009@gmail.com>
|
||||
Reported-and-tested-by: Tom Li <biergaizi2009@gmail.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Stanislaw Gruszka <stf_xl@wp.pl>
|
||||
Acked-by: Larry Finger <Larry.Finger@lwfinger.next>
|
||||
Acked-by: Hin-Tak Leung <htl10@users.sourceforge.net>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/rtl818x/rtl8187/rtl8187.h | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h b/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
|
||||
index 56aee06..a6ad79f 100644
|
||||
--- a/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
|
||||
+++ b/drivers/net/wireless/rtl818x/rtl8187/rtl8187.h
|
||||
@@ -15,6 +15,8 @@
|
||||
#ifndef RTL8187_H
|
||||
#define RTL8187_H
|
||||
|
||||
+#include <linux/cache.h>
|
||||
+
|
||||
#include "rtl818x.h"
|
||||
#include "leds.h"
|
||||
|
||||
@@ -139,7 +141,10 @@ struct rtl8187_priv {
|
||||
u8 aifsn[4];
|
||||
u8 rfkill_mask;
|
||||
struct {
|
||||
- __le64 buf;
|
||||
+ union {
|
||||
+ __le64 buf;
|
||||
+ u8 dummy1[L1_CACHE_BYTES];
|
||||
+ } ____cacheline_aligned;
|
||||
struct sk_buff_head queue;
|
||||
} b_tx_status; /* This queue is used by both -b and non-b devices */
|
||||
struct mutex io_mutex;
|
||||
@@ -147,7 +152,8 @@ struct rtl8187_priv {
|
||||
u8 bits8;
|
||||
__le16 bits16;
|
||||
__le32 bits32;
|
||||
- } *io_dmabuf;
|
||||
+ u8 dummy2[L1_CACHE_BYTES];
|
||||
+ } *io_dmabuf ____cacheline_aligned;
|
||||
bool rfkill_off;
|
||||
u16 seqno;
|
||||
};
|
|
@ -80,3 +80,4 @@ bugfix/all/i2c-designware-remove-HAVE_CLK-build-dependecy.patch
|
|||
debian/snd-pcsp-disable-autoload.patch
|
||||
bugfix/all/bluetooth-allocate-static-minor-for-vhci.patch
|
||||
bugfix/all/xhci-revert-generalised-sg-support.patch
|
||||
bugfix/all/rtl8187-fix-regression-on-MIPS-without-coherent-DMA.patch
|
||||
|
|
Loading…
Reference in New Issue