|
|
@@ -1,11 +1,17 @@
|
|
|
--- a/drivers/net/wireless/ath/main.c
|
|
|
+++ b/drivers/net/wireless/ath/main.c
|
|
|
-@@ -43,7 +43,7 @@ struct sk_buff *ath_rxbuf_alloc(struct a
|
|
|
- * Unfortunately this means we may get 8 KB here from the
|
|
|
- * kernel... and that is actually what is observed on some
|
|
|
- * systems :( */
|
|
|
-- skb = __dev_alloc_skb(len + common->cachelsz - 1, gfp_mask);
|
|
|
-+ skb = __dev_alloc_skb(len + common->cachelsz - 1, gfp_mask | GFP_DMA);
|
|
|
- if (skb != NULL) {
|
|
|
- off = ((unsigned long) skb->data) % common->cachelsz;
|
|
|
- if (off != 0)
|
|
|
+@@ -31,6 +31,14 @@ struct sk_buff *ath_rxbuf_alloc(struct a
|
|
|
+ u32 off;
|
|
|
+
|
|
|
+ /*
|
|
|
++ * Enable GFP_DMA in order to avoid using DMA bounce buffers
|
|
|
++ * on IXP4xx devices with more than 64M RAM
|
|
|
++ */
|
|
|
++#ifdef CONFIG_ARCH_IXP4XX
|
|
|
++ gfp_mask |= GFP_DMA;
|
|
|
++#endif
|
|
|
++
|
|
|
++ /*
|
|
|
+ * Cache-line-align. This is important (for the
|
|
|
+ * 5210 at least) as not doing so causes bogus data
|
|
|
+ * in rx'd frames.
|