On 2018年07月02日 16:16, Maxime Coquelin wrote:
+static inline int
+vhost_enable_notify_split(struct vhost_virtqueue *vq, int enable)
+{
+ if (enable)
+ vq->used->flags &= ~VRING_USED_F_NO_NOTIFY;
+ else
+ vq->used->flags |= VRING_USED_F_NO_NOTIFY;
+
+ return 0;
+}
+
+static inline int
+vhost_enable_notify_packed(struct virtio_net *dev,
+ struct vhost_virtqueue *vq, int enable)
+{
+ uint16_t flags;
+
+ if (!enable) {
+ vq->device_event->desc_event_flags = RING_EVENT_FLAGS_DISABLE;
+ return 0;
+ }
+
+ flags = RING_EVENT_FLAGS_ENABLE;
+ if (dev->features & (1ULL << VIRTIO_RING_F_EVENT_IDX)) {
+ flags = RING_EVENT_FLAGS_DESC;
+ vq->device_event->desc_event_off_wrap = vq->last_avail_idx |
+ vq->avail_wrap_counter << 15;
+ }
+
+ rte_smp_wmb();
+
+ vq->device_event->desc_event_flags = flags;
+
+ rte_smp_wmb();
+
We don't do this for split version. Any specific reason for this?
Btw, looks like we don't care about the return value so using void instead?
Thanks
+ return 0;
+}
+