| 220 | } |
| 221 | |
| 222 | static int |
| 223 | virtio_net_ctrl_push(struct virtio_net *dev, struct virtio_net_ctrl_elem *ctrl_elem) |
| 224 | { |
| 225 | struct vhost_virtqueue *cvq = dev->cvq; |
| 226 | struct vring_used_elem *used_elem; |
| 227 | |
| 228 | used_elem = &cvq->used->ring[cvq->last_used_idx & (cvq->size - 1)]; |
| 229 | used_elem->id = ctrl_elem->head_idx; |
| 230 | used_elem->len = sizeof(*ctrl_elem->desc_ack); |
| 231 | |
| 232 | cvq->last_used_idx++; |
| 233 | |
| 234 | rte_atomic_store_explicit((unsigned short __rte_atomic *)&cvq->used->idx, |
| 235 | cvq->last_used_idx, rte_memory_order_release); |
| 236 | |
| 237 | vhost_vring_call_split(dev, dev->cvq); |
| 238 | |
| 239 | free(ctrl_elem->ctrl_req); |
| 240 | |
| 241 | return 0; |
| 242 | } |
| 243 | |
| 244 | int |
| 245 | virtio_net_ctrl_handle(struct virtio_net *dev) |
no test coverage detected