qcacld-2.0: Fix tx pause count and unpause count different
On high latency platform host driver has pause/unpause count per vdev, so should do pause/unpause with pair. wma_unpause_vdev() want to unpause all pausing with all reasons, and clear pause reason bitmap forcedly, it works on low latency platform which depends on reason bitmap to unpause, but it possible has unpause count less then paused count on HL platform and lead to vdev peer tx queue can’t unpause after resume and data stall in host tx queue. Fix it by unpause reason by reason in wma_unpause_vdev(). Change-Id: I3aef06eeec42de5a56a98322670efa3ee453a94c CRs-Fixed: 2525548
This commit is contained in:
parent
d38cf54d99
commit
1dae7178e7
|
@ -21929,6 +21929,7 @@ static bool wma_is_wow_prtn_cached(tp_wma_handle wma, u_int8_t vdev_id)
|
|||
static void wma_unpause_vdev(tp_wma_handle wma) {
|
||||
int8_t vdev_id;
|
||||
struct wma_txrx_node *iface;
|
||||
int i, tmp_reason;
|
||||
|
||||
for (vdev_id = 0; vdev_id < wma->max_bssid; vdev_id++) {
|
||||
if (!wma->interfaces[vdev_id].handle)
|
||||
|
@ -21937,8 +21938,14 @@ static void wma_unpause_vdev(tp_wma_handle wma) {
|
|||
#if defined(CONFIG_HL_SUPPORT) || defined(QCA_SUPPORT_TXRX_VDEV_PAUSE_LL)
|
||||
/* When host resume, by default, unpause all active vdev */
|
||||
if (wma->interfaces[vdev_id].pause_bitmap) {
|
||||
wdi_in_vdev_unpause(wma->interfaces[vdev_id].handle,
|
||||
0xffffffff);
|
||||
for (i = 0; i < sizeof(wma->interfaces[vdev_id].pause_bitmap); i++) {
|
||||
tmp_reason = 1 << i;
|
||||
if (wma->interfaces[vdev_id].pause_bitmap & tmp_reason) {
|
||||
WMA_LOGD("%s: unpause reason %d", __func__, tmp_reason);
|
||||
wdi_in_vdev_unpause(wma->interfaces[vdev_id].handle,
|
||||
tmp_reason);
|
||||
}
|
||||
}
|
||||
wma->interfaces[vdev_id].pause_bitmap = 0;
|
||||
}
|
||||
#endif /* QCA_SUPPORT_TXRX_VDEV_PAUSE_LL || CONFIG_HL_SUPPORT */
|
||||
|
|
Loading…
Reference in New Issue