diff options
author | Ivo van Doorn <IvDoorn@gmail.com> | 2011-05-04 15:42:05 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-05-05 14:59:21 -0400 |
commit | 4268d8ed64ed918384954924284ba396cdb0e388 (patch) | |
tree | 895b619672b5048e826ed18c410b80a49089015d /drivers/net | |
parent | aca355b9784fbc960c9caa6b30f953a965296420 (diff) |
rt2x00: Fix transfer speed regression for USB hardware
Patch:
rt2x00: Make rt2x00_queue_entry_for_each more flexible
commit: 10e11568ca8b8a15f7478f6a4ceebabcbdba1018
introduced a severe regression on the throughput
for USB hardware. It turns out that the exiting of
the rt2x00queue_for_each_entry() was done too early.
The exact cause for this regression is unknown,
but by disabling the premature exiting of the loop
seems to resolve the issue.
Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
Reported-by: Yasushi SHOJI <yashi@atmark-techno.com>
Reported-by: Balint Viragh <bviragh@dension.com>
Tested-by: Balint Viragh <bviragh@dension.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00usb.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00usb.c b/drivers/net/wireless/rt2x00/rt2x00usb.c index e027ebd4458..dc6b662ad5f 100644 --- a/drivers/net/wireless/rt2x00/rt2x00usb.c +++ b/drivers/net/wireless/rt2x00/rt2x00usb.c | |||
@@ -298,7 +298,7 @@ static bool rt2x00usb_kick_tx_entry(struct queue_entry *entry, void* data) | |||
298 | 298 | ||
299 | if (!test_and_clear_bit(ENTRY_DATA_PENDING, &entry->flags) || | 299 | if (!test_and_clear_bit(ENTRY_DATA_PENDING, &entry->flags) || |
300 | test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) | 300 | test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) |
301 | return true; | 301 | return false; |
302 | 302 | ||
303 | /* | 303 | /* |
304 | * USB devices cannot blindly pass the skb->len as the | 304 | * USB devices cannot blindly pass the skb->len as the |
@@ -392,7 +392,7 @@ static bool rt2x00usb_kick_rx_entry(struct queue_entry *entry, void* data) | |||
392 | 392 | ||
393 | if (test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || | 393 | if (test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags) || |
394 | test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) | 394 | test_bit(ENTRY_DATA_STATUS_PENDING, &entry->flags)) |
395 | return true; | 395 | return false; |
396 | 396 | ||
397 | rt2x00lib_dmastart(entry); | 397 | rt2x00lib_dmastart(entry); |
398 | 398 | ||
@@ -447,7 +447,7 @@ static bool rt2x00usb_flush_entry(struct queue_entry *entry, void* data) | |||
447 | struct queue_entry_priv_usb_bcn *bcn_priv = entry->priv_data; | 447 | struct queue_entry_priv_usb_bcn *bcn_priv = entry->priv_data; |
448 | 448 | ||
449 | if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) | 449 | if (!test_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) |
450 | return true; | 450 | return false; |
451 | 451 | ||
452 | usb_kill_urb(entry_priv->urb); | 452 | usb_kill_urb(entry_priv->urb); |
453 | 453 | ||