mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-26 02:05:29 +07:00
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 <tvboxspy@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
9b505647bf
commit
54fbb2da8d
@ -1014,10 +1014,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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1190,6 +1186,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);
|
||||
|
Loading…
Reference in New Issue
Block a user