return vring->used->ring[last & mask].len - hdr_sz;
}
+#define virtio_packed_check_n_left(vring, last) \
+ do \
+ { \
+ vnet_virtio_vring_packed_desc_t *d = &vring->packed_desc[last]; \
+ u16 flags = d->flags; \
+ if ((flags & VRING_DESC_F_AVAIL) != (vring->used_wrap_counter << 7) || \
+ (flags & VRING_DESC_F_USED) != (vring->used_wrap_counter << 15)) \
+ { \
+ n_left = 0; \
+ } \
+ } \
+ while (0)
+
#define increment_last(last, packed, vring) \
do \
{ \
u16 n_left = virtio_n_left_to_process (vring, packed);
vlib_buffer_t bt = {};
+ if (packed)
+ {
+ virtio_packed_check_n_left (vring, last);
+ }
+
if (n_left == 0)
return 0;