net/netvsc: fix chimney index
authorLong Li <longli@microsoft.com>
Sun, 2 Aug 2020 06:04:28 +0000 (23:04 -0700)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 5 Aug 2020 15:57:13 +0000 (17:57 +0200)
The code should look into "slab" to figure out the index returned from
rte_bitmap_scan().

Fixes: cc02518132 ("net/netvsc: split send buffers from Tx descriptors")
Cc: stable@dpdk.org
Signed-off-by: Long Li <longli@microsoft.com>
Acked-by: Stephen Hemminger <stephen@networkplumber.org>
drivers/net/netvsc/hn_rxtx.c

index 0428c58..87b1184 100644 (file)
@@ -206,11 +206,13 @@ hn_chim_uninit(struct rte_eth_dev *dev)
 static uint32_t hn_chim_alloc(struct hn_data *hv)
 {
        uint32_t index = NVS_CHIM_IDX_INVALID;
-       uint64_t slab;
+       uint64_t slab = 0;
 
        rte_spinlock_lock(&hv->chim_lock);
-       if (rte_bitmap_scan(hv->chim_bmap, &index, &slab))
+       if (rte_bitmap_scan(hv->chim_bmap, &index, &slab)) {
+               index += rte_bsf64(slab);
                rte_bitmap_clear(hv->chim_bmap, index);
+       }
        rte_spinlock_unlock(&hv->chim_lock);
 
        return index;