summaryrefslogtreecommitdiffstats
path: root/rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch
diff options
context:
space:
mode:
authorJosh Boyer <jwboyer@redhat.com>2012-07-04 11:30:05 -0400
committerJosh Boyer <jwboyer@redhat.com>2012-07-04 11:34:36 -0400
commit83ef0f3582bd023d86bbfb401ebe61b55f6e4366 (patch)
tree48cb109a1bd23f4783213da8f2e7bdf799fa6c5b /rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch
parentf594e5be67180f7fb80a36b42affa1523b760bf0 (diff)
downloadkernel-83ef0f3582bd023d86bbfb401ebe61b55f6e4366.tar.gz
kernel-83ef0f3582bd023d86bbfb401ebe61b55f6e4366.tar.xz
kernel-83ef0f3582bd023d86bbfb401ebe61b55f6e4366.zip
Patch from Stanislaw Gruszka to fix rt2x00 USB access point (rhbz 828824)
Diffstat (limited to 'rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch')
-rw-r--r--rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch b/rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch
new file mode 100644
index 00000000..76b83cca
--- /dev/null
+++ b/rt2x00usb-fix-indexes-ordering-on-RX-queue-kick.patch
@@ -0,0 +1,43 @@
+From e899a84a6e9bec0ce653713a48ca121cd754430c Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Mon, 2 Jul 2012 09:42:14 +0200
+Subject: [PATCH] rt2x00usb: fix indexes ordering on RX queue kick
+
+On rt2x00_dmastart() we increase index specified by Q_INDEX and on
+rt2x00_dmadone() we increase index specified by Q_INDEX_DONE. So entries
+between Q_INDEX_DONE and Q_INDEX are those we currently process in the
+hardware. Entries between Q_INDEX and Q_INDEX_DONE are those we can
+submit to the hardware.
+
+According to that fix rt2x00usb_kick_queue(), as we need to submit rx
+entries that are not processed by the hardware. It worked before only
+for empty queue, otherwise was broken.
+
+Note that for TX queues indexes ordering are ok. We need to kick entries
+that have filled skb, but was not submitted to the hardware, i.e.
+strted from Q_INDEX_DONE and have ENTRY_DATA_PENDING bit set.
+
+From practical standpoint this patch fixes AP mode connection hangs.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+---
+ drivers/net/wireless/rt2x00/rt2x00usb.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c
+index d357d1e..74ecc33 100644
+--- a/drivers/net/wireless/rt2x00/rt2x00usb.c
++++ b/drivers/net/wireless/rt2x00/rt2x00usb.c
+@@ -436,8 +436,8 @@ void rt2x00usb_kick_queue(struct data_queue *queue)
+ case QID_RX:
+ if (!rt2x00queue_full(queue))
+ rt2x00queue_for_each_entry(queue,
+- Q_INDEX_DONE,
+ Q_INDEX,
++ Q_INDEX_DONE,
+ NULL,
+ rt2x00usb_kick_rx_entry);
+ break;
+--
+1.7.1
+