| .. | .. |
|---|
| 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 | |
|---|