.. | .. |
---|
324 | 324 | goto fail_free_skb; |
---|
325 | 325 | |
---|
326 | 326 | spin_lock_bh(&rx_ring->idr_lock); |
---|
327 | | - buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0, |
---|
328 | | - rx_ring->bufs_max * 3, GFP_ATOMIC); |
---|
| 327 | + buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 1, |
---|
| 328 | + (rx_ring->bufs_max * 3) + 1, GFP_ATOMIC); |
---|
329 | 329 | spin_unlock_bh(&rx_ring->idr_lock); |
---|
330 | | - if (buf_id < 0) |
---|
| 330 | + if (buf_id <= 0) |
---|
331 | 331 | goto fail_dma_unmap; |
---|
332 | 332 | |
---|
333 | 333 | desc = ath11k_hal_srng_src_get_next_entry(ab, srng); |
---|
.. | .. |
---|
2564 | 2564 | cookie); |
---|
2565 | 2565 | mac_id = FIELD_GET(DP_RXDMA_BUF_COOKIE_PDEV_ID, cookie); |
---|
2566 | 2566 | |
---|
| 2567 | + if (unlikely(buf_id == 0)) |
---|
| 2568 | + continue; |
---|
| 2569 | + |
---|
2567 | 2570 | ar = ab->pdevs[mac_id].ar; |
---|
2568 | 2571 | rx_ring = &ar->dp.rx_refill_buf_ring; |
---|
2569 | 2572 | spin_lock_bh(&rx_ring->idr_lock); |
---|
.. | .. |
---|
3022 | 3025 | if (!peer) { |
---|
3023 | 3026 | ath11k_warn(ab, "failed to find the peer to set up fragment info\n"); |
---|
3024 | 3027 | spin_unlock_bh(&ab->base_lock); |
---|
| 3028 | + crypto_free_shash(tfm); |
---|
3025 | 3029 | return -ENOENT; |
---|
3026 | 3030 | } |
---|
3027 | 3031 | |
---|