| 399 | } |
| 400 | |
| 401 | static __rte_always_inline void |
| 402 | vhost_flush_enqueue_batch_packed(struct virtio_net *dev, |
| 403 | struct vhost_virtqueue *vq, |
| 404 | uint64_t *lens, |
| 405 | uint16_t *ids) |
| 406 | { |
| 407 | uint16_t i; |
| 408 | uint16_t flags; |
| 409 | uint16_t last_used_idx; |
| 410 | struct vring_packed_desc *desc_base; |
| 411 | |
| 412 | last_used_idx = vq->last_used_idx; |
| 413 | desc_base = &vq->desc_packed[last_used_idx]; |
| 414 | |
| 415 | flags = PACKED_DESC_ENQUEUE_USED_FLAG(vq->used_wrap_counter); |
| 416 | |
| 417 | vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) { |
| 418 | desc_base[i].id = ids[i]; |
| 419 | desc_base[i].len = lens[i]; |
| 420 | } |
| 421 | |
| 422 | rte_atomic_thread_fence(rte_memory_order_release); |
| 423 | |
| 424 | vhost_for_each_try_unroll(i, 0, PACKED_BATCH_SIZE) { |
| 425 | desc_base[i].flags = flags; |
| 426 | } |
| 427 | |
| 428 | vhost_log_cache_used_vring(dev, vq, last_used_idx * |
| 429 | sizeof(struct vring_packed_desc), |
| 430 | sizeof(struct vring_packed_desc) * |
| 431 | PACKED_BATCH_SIZE); |
| 432 | vhost_log_cache_sync(dev, vq); |
| 433 | |
| 434 | vq_inc_last_used_packed(vq, PACKED_BATCH_SIZE); |
| 435 | } |
| 436 | |
| 437 | static __rte_always_inline void |
| 438 | vhost_async_shadow_enqueue_packed_batch(struct vhost_virtqueue *vq, |
no test coverage detected