mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 02:35:23 +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);
|
device_free_tx_buf(pDevice, pTD);
|
||||||
pDevice->iTDUsed[uIdx]--;
|
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);
|
MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr);
|
||||||
|
|
||||||
MACvReceive0(pDevice->PortOffset);
|
MACvReceive0(pDevice->PortOffset);
|
||||||
|
Loading…
Reference in New Issue
Block a user