if (txq->lock == 0)
clib_spinlock_init (&txq->lock);
vd->flags |= VMXNET3_DEVICE_F_SHARED_TXQ_LOCK;
+ return 0;
}
vec_validate_aligned (vd->txqs, qid, CLIB_CACHE_LINE_BYTES);
vmxnet3_rx_ring *ring;
ring = &rxq->rx_ring[rid];
- desc_idx = ring->consume;
- while (ring->fill)
- {
- desc_idx &= mask;
- bi = ring->bufs[desc_idx];
- vlib_buffer_free_no_next (vm, &bi, 1);
- ring->fill--;
- desc_idx++;
- }
+ desc_idx = (ring->consume + 1) & mask;
+ vlib_buffer_free_from_ring (vm, ring->bufs, desc_idx, rxq->size,
+ ring->fill);
vec_free (ring->bufs);
vlib_physmem_free (vm, vmxm->physmem_region, rxq->rx_desc[rid]);
}