search for: vring_used_f_no_notify

Displaying 20 results from an estimated 267 matches for "vring_used_f_no_notify".

2011 Jun 16
1
[PATCH] vhost: set dirty log when updating flags of used ring
...if (vq->log_ctx) + eventfd_signal(vq->log_ctx, 1); + } + return 0; +} + /* OK, now we need to know about added descriptors. */ bool vhost_enable_notify(struct vhost_virtqueue *vq) { @@ -1384,7 +1402,7 @@ bool vhost_enable_notify(struct vhost_virtqueue *vq) if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) return false; vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; - r = put_user(vq->used_flags, &vq->used->flags); + r = vhost_update_used_flags(vq); if (r) { vq_err(vq, "Failed to enable notification at %p: %d\n", &vq->used->flags, r); @@ -1411...
2011 Jun 16
1
[PATCH] vhost: set dirty log when updating flags of used ring
...if (vq->log_ctx) + eventfd_signal(vq->log_ctx, 1); + } + return 0; +} + /* OK, now we need to know about added descriptors. */ bool vhost_enable_notify(struct vhost_virtqueue *vq) { @@ -1384,7 +1402,7 @@ bool vhost_enable_notify(struct vhost_virtqueue *vq) if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) return false; vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; - r = put_user(vq->used_flags, &vq->used->flags); + r = vhost_update_used_flags(vq); if (r) { vq_err(vq, "Failed to enable notification at %p: %d\n", &vq->used->flags, r); @@ -1411...
2018 May 30
2
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...ost_virtqueue *vq) > { > struct vring_desc_packed *d = vq->desc_packed + vq->avail_idx; > - __virtio16 flags; > + __virtio16 flags = RING_EVENT_FLAGS_ENABLE; > int ret; > > - /* FIXME: disable notification through device area */ > + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) > + return false; > + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; 'used_flags' was originally designed for 1.0, why should we pay attetion to it here? Wei > + > + if (vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { > + __virtio16 off_wrap = cpu_to_vhost16(vq, vq...
2018 May 30
2
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...ost_virtqueue *vq) > { > struct vring_desc_packed *d = vq->desc_packed + vq->avail_idx; > - __virtio16 flags; > + __virtio16 flags = RING_EVENT_FLAGS_ENABLE; > int ret; > > - /* FIXME: disable notification through device area */ > + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) > + return false; > + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; 'used_flags' was originally designed for 1.0, why should we pay attetion to it here? Wei > + > + if (vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { > + __virtio16 off_wrap = cpu_to_vhost16(vq, vq...
2018 Mar 30
1
[RFC PATCH V2 8/8] vhost: event suppression for packed ring
...gnal(struct vhost_dev *dev, struct vhost_virtqueue *vq) > { > @@ -2789,7 +2911,17 @@ static bool vhost_enable_notify_packed(struct vhost_dev *dev, > __virtio16 flags; > int ret; > > - /* FIXME: disable notification through device area */ > + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) > + return false; > + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; > + > + flags = cpu_to_vhost16(vq, RING_EVENT_FLAGS_ENABLE); > + ret = vhost_update_device_flags(vq, flags); > + if (ret) { > + vq_err(vq, "Failed to enable notification at %p: %d\n", > +...
2008 Jan 27
1
[PATCH] virtio_net tx performance fix
>From f582caf612b446e42f1e80d5ef12c5b7322efd03 Mon Sep 17 00:00:00 2001 From: Dor Laor <dor.laor@qumranet.com> Date: Mon, 28 Jan 2008 02:09:48 +0200 Subject: [PATCH] virtio_net tx performance fix There was a problem with the location of the notify call in add_buff function: When VRING_USED_F_NO_NOTIFY is set, the host does not kick the guest when packets were transmitted, as a result the guest runs out of tx buffers sometimes. This is fine but the problem lies when add_buf fails, it called notify and the host sends all the pending tx pkts. When enable_cb was called, more_used(vq) returned false...
2008 Jan 27
1
[PATCH] virtio_net tx performance fix
>From f582caf612b446e42f1e80d5ef12c5b7322efd03 Mon Sep 17 00:00:00 2001 From: Dor Laor <dor.laor@qumranet.com> Date: Mon, 28 Jan 2008 02:09:48 +0200 Subject: [PATCH] virtio_net tx performance fix There was a problem with the location of the notify call in add_buff function: When VRING_USED_F_NO_NOTIFY is set, the host does not kick the guest when packets were transmitted, as a result the guest runs out of tx buffers sometimes. This is fine but the problem lies when add_buf fails, it called notify and the host sends all the pending tx pkts. When enable_cb was called, more_used(vq) returned false...
2018 May 16
0
[RFC V4 PATCH 8/8] vhost: event suppression for packed ring
...t, using eventfd. */ void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) { @@ -2762,7 +2883,17 @@ static bool vhost_enable_notify_packed(struct vhost_dev *dev, __virtio16 flags; int ret; - /* FIXME: disable notification through device area */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) + return false; + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; + + flags = cpu_to_vhost16(vq, RING_EVENT_FLAGS_ENABLE); + ret = vhost_update_device_flags(vq, flags); + if (ret) { + vq_err(vq, "Failed to enable notification at %p: %d\n", + &vq->device_event->flag...
2018 Mar 26
0
[RFC PATCH V2 8/8] vhost: event suppression for packed ring
...t, using eventfd. */ void vhost_signal(struct vhost_dev *dev, struct vhost_virtqueue *vq) { @@ -2789,7 +2911,17 @@ static bool vhost_enable_notify_packed(struct vhost_dev *dev, __virtio16 flags; int ret; - /* FIXME: disable notification through device area */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) + return false; + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; + + flags = cpu_to_vhost16(vq, RING_EVENT_FLAGS_ENABLE); + ret = vhost_update_device_flags(vq, flags); + if (ret) { + vq_err(vq, "Failed to enable notification at %p: %d\n", + &vq->device_event->desc...
2018 Jul 03
0
[PATCH net-next 8/8] vhost: event suppression for packed ring
...struct vhost_virtqueue *vq) { struct vring_desc_packed *d = vq->desc_packed + vq->avail_idx; - __virtio16 flags; + __virtio16 flags = cpu_to_vhost16(vq, RING_EVENT_FLAGS_ENABLE); int ret; - /* TODO: enable notification through device area */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) + return false; + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; + + if (vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { + __virtio16 off_wrap = cpu_to_vhost16(vq, vq->avail_idx | + vq->avail_wrap_counter << 15); + + ret = vhost_update_device_off_wrap(vq, off_wrap); +...
2018 May 29
0
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...ct vhost_dev *dev, struct vhost_virtqueue *vq) { struct vring_desc_packed *d = vq->desc_packed + vq->avail_idx; - __virtio16 flags; + __virtio16 flags = RING_EVENT_FLAGS_ENABLE; int ret; - /* FIXME: disable notification through device area */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) + return false; + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; + + if (vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { + __virtio16 off_wrap = cpu_to_vhost16(vq, vq->avail_idx | + vq->avail_wrap_counter << 15); + + ret = vhost_update_device_off_wrap(vq, off_wrap); +...
2014 Jun 05
2
[PATCH 1/2] vhost: move acked_features to VQs
...ost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { __u16 flags; if (__get_user(flags, &vq->avail->flags)) { vq_err(vq, "Failed to get flags"); @@ -1499,7 +1500,7 @@ bool vhost_enable_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq) if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) return false; vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; - if (!vhost_has_feature(dev, VIRTIO_RING_F_EVENT_IDX)) { + if (!vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { r = vhost_update_used_flags(vq); if (r) { vq_err(vq, "Failed to enable notification at %p: %d\n&qu...
2014 Jun 05
2
[PATCH 1/2] vhost: move acked_features to VQs
...ost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { __u16 flags; if (__get_user(flags, &vq->avail->flags)) { vq_err(vq, "Failed to get flags"); @@ -1499,7 +1500,7 @@ bool vhost_enable_notify(struct vhost_dev *dev, struct vhost_virtqueue *vq) if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) return false; vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; - if (!vhost_has_feature(dev, VIRTIO_RING_F_EVENT_IDX)) { + if (!vhost_has_feature(vq, VIRTIO_RING_F_EVENT_IDX)) { r = vhost_update_used_flags(vq); if (r) { vq_err(vq, "Failed to enable notification at %p: %d\n&qu...
2014 Aug 10
0
[PATCH] vhost: Add polling mode
...; +static void vhost_vq_enable_vqpoll(struct vhost_virtqueue *vq) > +{ > + if (vq->vqpoll.enabled) > + return; /* already enabled, nothing to do */ > + if (!vq->handle_kick) > + return; /* polling will be a waste of time if no callback! */ > + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) { > + /* vq has guest notifications enabled. Disable them, > + and instead add vq to the polling list */ > + vhost_disable_notify(vq->dev, vq); > + list_add_tail(&vq->vqpoll.link, &vq->dev->vqpoll_list); > + } > + vq->vqpoll.jiffies_last_kick = jiff...
2014 Aug 20
0
[PATCH] vhost: Add polling mode
...; +static void vhost_vq_enable_vqpoll(struct vhost_virtqueue *vq) > +{ > + if (vq->vqpoll.enabled) > + return; /* already enabled, nothing to do */ > + if (!vq->handle_kick) > + return; /* polling will be a waste of time if no callback! */ > + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) { > + /* vq has guest notifications enabled. Disable them, > + and instead add vq to the polling list */ Pls fix up multiline comment to match coding style. > + vhost_disable_notify(vq->dev, vq); > + list_add_tail(&vq->vqpoll.link, &vq->dev->vqpoll_list);...
2014 Aug 10
7
[PATCH] vhost: Add polling mode
...ll() can be + * reclaimed. + */ +static void vhost_vq_enable_vqpoll(struct vhost_virtqueue *vq) +{ + if (vq->vqpoll.enabled) + return; /* already enabled, nothing to do */ + if (!vq->handle_kick) + return; /* polling will be a waste of time if no callback! */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) { + /* vq has guest notifications enabled. Disable them, + and instead add vq to the polling list */ + vhost_disable_notify(vq->dev, vq); + list_add_tail(&vq->vqpoll.link, &vq->dev->vqpoll_list); + } + vq->vqpoll.jiffies_last_kick = jiffies; + __get_user(vq->avail...
2014 Aug 10
7
[PATCH] vhost: Add polling mode
...ll() can be + * reclaimed. + */ +static void vhost_vq_enable_vqpoll(struct vhost_virtqueue *vq) +{ + if (vq->vqpoll.enabled) + return; /* already enabled, nothing to do */ + if (!vq->handle_kick) + return; /* polling will be a waste of time if no callback! */ + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) { + /* vq has guest notifications enabled. Disable them, + and instead add vq to the polling list */ + vhost_disable_notify(vq->dev, vq); + list_add_tail(&vq->vqpoll.link, &vq->dev->vqpoll_list); + } + vq->vqpoll.jiffies_last_kick = jiffies; + __get_user(vq->avail...
2018 Nov 08
4
[PATCH net-next v2 3/5] virtio_ring: add packed ring support
...c > +++ b/drivers/virtio/virtio_ring.c > @@ -87,8 +87,11 @@ static int vring_add_buf(struct virtqueue *_vq, > if (vq->num_free < out + in) { > pr_debug("Can't add buf len %i - avail = %i\n", > out + in, vq->num_free); > - /* We notify*even if* VRING_USED_F_NO_NOTIFY is set here. */ > - vq->notify(&vq->vq); > + /* FIXME: for historical reasons, we force a notify here if > + * there are outgoing parts to the buffer. Presumably the > + * host should service the ring ASAP. */ > + if (out) > + vq->notify(&vq->vq); &gt...
2018 Nov 08
4
[PATCH net-next v2 3/5] virtio_ring: add packed ring support
...c > +++ b/drivers/virtio/virtio_ring.c > @@ -87,8 +87,11 @@ static int vring_add_buf(struct virtqueue *_vq, > if (vq->num_free < out + in) { > pr_debug("Can't add buf len %i - avail = %i\n", > out + in, vq->num_free); > - /* We notify*even if* VRING_USED_F_NO_NOTIFY is set here. */ > - vq->notify(&vq->vq); > + /* FIXME: for historical reasons, we force a notify here if > + * there are outgoing parts to the buffer. Presumably the > + * host should service the ring ASAP. */ > + if (out) > + vq->notify(&vq->vq); &gt...
2018 May 31
0
[RFC V5 PATCH 8/8] vhost: event suppression for packed ring
...> struct vring_desc_packed *d = vq->desc_packed + vq->avail_idx; >> - __virtio16 flags; >> + __virtio16 flags = RING_EVENT_FLAGS_ENABLE; >> int ret; >> >> - /* FIXME: disable notification through device area */ >> + if (!(vq->used_flags & VRING_USED_F_NO_NOTIFY)) >> + return false; >> + vq->used_flags &= ~VRING_USED_F_NO_NOTIFY; > 'used_flags' was originally designed for 1.0, why should we pay attetion to it here? > > Wei It was used to recored whether or not we've disabled notification. Then we can avoid unneces...