Loading drivers/net/wireless/ath/wil6210/main.c +5 −2 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) struct net_device *ndev = vif_to_ndev(vif); struct wireless_dev *wdev = vif_to_wdev(vif); struct wil_sta_info *sta = &wil->sta[cid]; int min_ring_id = wil_get_min_tx_ring_id(wil); might_sleep(); wil_dbg_misc(wil, "disconnect_cid: CID %d, MID %d, status %d\n", Loading Loading @@ -274,7 +275,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) memset(sta->tid_crypto_rx, 0, sizeof(sta->tid_crypto_rx)); memset(&sta->group_crypto_rx, 0, sizeof(sta->group_crypto_rx)); /* release vrings */ for (i = 0; i < ARRAY_SIZE(wil->ring_tx); i++) { for (i = min_ring_id; i < ARRAY_SIZE(wil->ring_tx); i++) { if (wil->ring2cid_tid[i][0] == cid) wil_ring_fini_tx(wil, i); } Loading Loading @@ -605,8 +606,10 @@ int wil_priv_init(struct wil6210_priv *wil) wil->sta[i].mid = U8_MAX; } for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { spin_lock_init(&wil->ring_tx_data[i].lock); wil->ring2cid_tid[i][0] = WIL6210_MAX_CID; } mutex_init(&wil->mutex); mutex_init(&wil->vif_mutex); Loading drivers/net/wireless/ath/wil6210/rx_reorder.c +7 −5 Original line number Diff line number Diff line Loading @@ -382,11 +382,13 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) } /* apply */ if (!wil->use_rx_hw_reordering) { r = wil_tid_ampdu_rx_alloc(wil, agg_wsize, ssn); spin_lock_bh(&sta->tid_rx_lock); wil_tid_ampdu_rx_free(wil, sta->tid_rx[tid]); sta->tid_rx[tid] = r; spin_unlock_bh(&sta->tid_rx_lock); } out: return rc; Loading drivers/net/wireless/ath/wil6210/txrx.c +4 −2 Original line number Diff line number Diff line Loading @@ -77,8 +77,9 @@ bool wil_is_tx_idle(struct wil6210_priv *wil) { int i; unsigned long data_comp_to; int min_ring_id = wil_get_min_tx_ring_id(wil); for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { for (i = min_ring_id; i < WIL6210_MAX_TX_RINGS; i++) { struct wil_ring *vring = &wil->ring_tx[i]; int vring_index = vring - wil->ring_tx; struct wil_ring_tx_data *txdata = Loading Loading @@ -1932,6 +1933,7 @@ static inline void __wil_update_net_queues(struct wil6210_priv *wil, bool check_stop) { int i; int min_ring_id = wil_get_min_tx_ring_id(wil); if (unlikely(!vif)) return; Loading Loading @@ -1964,7 +1966,7 @@ static inline void __wil_update_net_queues(struct wil6210_priv *wil, return; /* check wake */ for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { for (i = min_ring_id; i < WIL6210_MAX_TX_RINGS; i++) { struct wil_ring *cur_ring = &wil->ring_tx[i]; struct wil_ring_tx_data *txdata = &wil->ring_tx_data[i]; Loading drivers/net/wireless/ath/wil6210/txrx_edma.c +10 −5 Original line number Diff line number Diff line Loading @@ -279,9 +279,6 @@ static void wil_move_all_rx_buff_to_free_list(struct wil6210_priv *wil, u16 buff_id; *d = *_d; pa = wil_rx_desc_get_addr_edma(&d->dma); dmalen = le16_to_cpu(d->dma.length); dma_unmap_single(dev, pa, dmalen, DMA_FROM_DEVICE); /* Extract the SKB from the rx_buff management array */ buff_id = __le16_to_cpu(d->mac.buff_id); Loading @@ -291,10 +288,15 @@ static void wil_move_all_rx_buff_to_free_list(struct wil6210_priv *wil, } skb = wil->rx_buff_mgmt.buff_arr[buff_id].skb; wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; if (unlikely(!skb)) if (unlikely(!skb)) { wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); else } else { pa = wil_rx_desc_get_addr_edma(&d->dma); dmalen = le16_to_cpu(d->dma.length); dma_unmap_single(dev, pa, dmalen, DMA_FROM_DEVICE); kfree_skb(skb); } /* Move the buffer from the active to the free list */ list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, Loading Loading @@ -906,6 +908,9 @@ static struct sk_buff *wil_sring_reap_rx_edma(struct wil6210_priv *wil, wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; if (!skb) { wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); /* Move the buffer from the active list to the free list */ list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, &wil->rx_buff_mgmt.free); goto again; } Loading Loading
drivers/net/wireless/ath/wil6210/main.c +5 −2 Original line number Diff line number Diff line Loading @@ -223,6 +223,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) struct net_device *ndev = vif_to_ndev(vif); struct wireless_dev *wdev = vif_to_wdev(vif); struct wil_sta_info *sta = &wil->sta[cid]; int min_ring_id = wil_get_min_tx_ring_id(wil); might_sleep(); wil_dbg_misc(wil, "disconnect_cid: CID %d, MID %d, status %d\n", Loading Loading @@ -274,7 +275,7 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) memset(sta->tid_crypto_rx, 0, sizeof(sta->tid_crypto_rx)); memset(&sta->group_crypto_rx, 0, sizeof(sta->group_crypto_rx)); /* release vrings */ for (i = 0; i < ARRAY_SIZE(wil->ring_tx); i++) { for (i = min_ring_id; i < ARRAY_SIZE(wil->ring_tx); i++) { if (wil->ring2cid_tid[i][0] == cid) wil_ring_fini_tx(wil, i); } Loading Loading @@ -605,8 +606,10 @@ int wil_priv_init(struct wil6210_priv *wil) wil->sta[i].mid = U8_MAX; } for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { spin_lock_init(&wil->ring_tx_data[i].lock); wil->ring2cid_tid[i][0] = WIL6210_MAX_CID; } mutex_init(&wil->mutex); mutex_init(&wil->vif_mutex); Loading
drivers/net/wireless/ath/wil6210/rx_reorder.c +7 −5 Original line number Diff line number Diff line Loading @@ -382,11 +382,13 @@ __acquires(&sta->tid_rx_lock) __releases(&sta->tid_rx_lock) } /* apply */ if (!wil->use_rx_hw_reordering) { r = wil_tid_ampdu_rx_alloc(wil, agg_wsize, ssn); spin_lock_bh(&sta->tid_rx_lock); wil_tid_ampdu_rx_free(wil, sta->tid_rx[tid]); sta->tid_rx[tid] = r; spin_unlock_bh(&sta->tid_rx_lock); } out: return rc; Loading
drivers/net/wireless/ath/wil6210/txrx.c +4 −2 Original line number Diff line number Diff line Loading @@ -77,8 +77,9 @@ bool wil_is_tx_idle(struct wil6210_priv *wil) { int i; unsigned long data_comp_to; int min_ring_id = wil_get_min_tx_ring_id(wil); for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { for (i = min_ring_id; i < WIL6210_MAX_TX_RINGS; i++) { struct wil_ring *vring = &wil->ring_tx[i]; int vring_index = vring - wil->ring_tx; struct wil_ring_tx_data *txdata = Loading Loading @@ -1932,6 +1933,7 @@ static inline void __wil_update_net_queues(struct wil6210_priv *wil, bool check_stop) { int i; int min_ring_id = wil_get_min_tx_ring_id(wil); if (unlikely(!vif)) return; Loading Loading @@ -1964,7 +1966,7 @@ static inline void __wil_update_net_queues(struct wil6210_priv *wil, return; /* check wake */ for (i = 0; i < WIL6210_MAX_TX_RINGS; i++) { for (i = min_ring_id; i < WIL6210_MAX_TX_RINGS; i++) { struct wil_ring *cur_ring = &wil->ring_tx[i]; struct wil_ring_tx_data *txdata = &wil->ring_tx_data[i]; Loading
drivers/net/wireless/ath/wil6210/txrx_edma.c +10 −5 Original line number Diff line number Diff line Loading @@ -279,9 +279,6 @@ static void wil_move_all_rx_buff_to_free_list(struct wil6210_priv *wil, u16 buff_id; *d = *_d; pa = wil_rx_desc_get_addr_edma(&d->dma); dmalen = le16_to_cpu(d->dma.length); dma_unmap_single(dev, pa, dmalen, DMA_FROM_DEVICE); /* Extract the SKB from the rx_buff management array */ buff_id = __le16_to_cpu(d->mac.buff_id); Loading @@ -291,10 +288,15 @@ static void wil_move_all_rx_buff_to_free_list(struct wil6210_priv *wil, } skb = wil->rx_buff_mgmt.buff_arr[buff_id].skb; wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; if (unlikely(!skb)) if (unlikely(!skb)) { wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); else } else { pa = wil_rx_desc_get_addr_edma(&d->dma); dmalen = le16_to_cpu(d->dma.length); dma_unmap_single(dev, pa, dmalen, DMA_FROM_DEVICE); kfree_skb(skb); } /* Move the buffer from the active to the free list */ list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, Loading Loading @@ -906,6 +908,9 @@ static struct sk_buff *wil_sring_reap_rx_edma(struct wil6210_priv *wil, wil->rx_buff_mgmt.buff_arr[buff_id].skb = NULL; if (!skb) { wil_err(wil, "No Rx skb at buff_id %d\n", buff_id); /* Move the buffer from the active list to the free list */ list_move(&wil->rx_buff_mgmt.buff_arr[buff_id].list, &wil->rx_buff_mgmt.free); goto again; } Loading