staging: vt6655: change tx wake queue
PATCH 1/1 staging: vt6655: change tx wake queue
Wake queue in the dwIsr loop of device_intr instead of device_tx_srv.
This fixes an issue when ISR_TXDMA0 or ISR_AC0DMA does not occur device_tx_srv is not called and the queue gets stuck in stopped condition.
On test if the queue is stuck another MACvTransmitAC0 or MACvTransmit0 in vnt_tx_packet will clear it.
Check on vif that both buffers are available and the queue is stopped.
Signed-off-by Malcolm Priestley <[email protected]>
--- drivers/staging/vt6655/device_main.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/staging/vt6655/device_main.c +8 -4
@@ -1181,10 +1181,6 @@ static int device_tx_srv(struct vnt_private *pDevice, unsigned int uIdx) }device_free_tx_buf (pDevice, pTD); pDevice->iTDUsed[uIdx]--; - -/* Make sure queue is available */ -if (AVAIL_TD (pDevice, uIdx)) -ieee80211_wake_queues (pDevice->hw); } }
@@ -1357,6 +1353,14 @@ static irqreturn_t device_intr(int irq, void *dev_instance) } } +/* If both buffers available wake the queue */ +if (pDevice->vif) { +if (AVAIL_TD (pDevice,TYPE_TXDMA0 ) && +AVAIL_TD (pDevice,TYPE_AC0DMA ) && +ieee80211_queue_stopped (pDevice->hw,0 )) +ieee80211_wake_queues (pDevice->hw); + } +MACvReadISR (pDevice->PortOffset, &pDevice->dwIsr);MACvReceive0 (pDevice->PortOffset);
Signature · 1 line
2.1.0