summaryrefslogtreecommitdiff
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorDavid Gnedt <david.gnedt@davizone.at>2011-01-30 19:10:46 (GMT)
committerJohn W. Linville <linville@tuxdriver.com>2011-02-03 21:42:44 (GMT)
commite7332a41442bde1c14550998cadceca34c967dfc (patch)
treeaa5902ac620f2fbab7d98bbdda079959b97f5bc5 /drivers/infiniband
parent172710bf8305c1b145796e34426c865480884024 (diff)
downloadlinux-fsl-qoriq-e7332a41442bde1c14550998cadceca34c967dfc.tar.xz
wl1251: fix queue stopping/waking for TX path
The queue stopping/waking functionality was broken in a way that could cause the TX to stall if the right circumstances are met. The problem was caused by tx_work, which is scheduled on each TX operation. If the firmware buffer is full, tx_work does nothing. In combinition with stopped queues or non-continues transfers, tx_work is never scheduled again. Moreover the low watermark introduced by 9df86e2e702c6d5547aced7f241addd2d698bb11 never takes effect because of some old code. Solve this by scheduling tx_work every time tx_queue is non-empty and firmware buffer is freed on tx_complete. This also solves a possible but unlikely case: If less frames than the high watermark are queued, but more than firmware buffer can hold. This results in queues staying awake but the only scheduled tx_work doesn't transfer all frames, so the remaining frames are stuck in the queue until more frames get queued and tx_work is scheduled again. Signed-off-by: David Gnedt <david.gnedt@davizone.at> Acked-by: Kalle Valo <kvalo@adurom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/infiniband')
0 files changed, 0 insertions, 0 deletions