From: Yuanhan Liu <yuanhan.liu@linux.intel.com>
To: Victor Kaplansky <victork@redhat.com>
Cc: dev@dpdk.org, Marcel Apfelbaum <mapfelba@redhat.com>,
Marc-Andre Lureau <mlureau@redhat.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH] vhost-user: fix enabling of queue pair
Date: Mon, 23 Nov 2015 11:22:37 +0800 [thread overview]
Message-ID: <20151123032237.GC2325@yliu-dev.sh.intel.com> (raw)
In-Reply-To: <1448026465-27460-1-git-send-email-victork@redhat.com>
On Fri, Nov 20, 2015 at 03:45:00PM +0200, Victor Kaplansky wrote:
> The VHOST_USER_SET_VRING_ENABLE request is sent for each queue in
> queue-pair separately. So, a queue-pair should be considered
> enabled only when both RX and TX queues are enabled.
Hi Victor,
It was sent per queue-pair, and I found that Michael changed it to
per vring. The reason I made it per queue-pair is that the backend
can handle both queues in one queue-pair. However, I agree that
making it per queue (vring) is better here, to keep the consistency
of sending all requests (say vring_call) per vring.
>
> The old code caused segfault when last TX queue was enabled.
>
> Signed-off-by: Victor Kaplansky <victork@redhat.com>
> ---
> lib/librte_vhost/vhost_user/virtio-net-user.c | 14 +++++++++-----
> 1 file changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/lib/librte_vhost/vhost_user/virtio-net-user.c b/lib/librte_vhost/vhost_user/virtio-net-user.c
> index d07452a..c06e53e 100644
> --- a/lib/librte_vhost/vhost_user/virtio-net-user.c
> +++ b/lib/librte_vhost/vhost_user/virtio-net-user.c
> @@ -317,21 +317,25 @@ user_set_vring_enable(struct vhost_device_ctx ctx,
> struct vhost_vring_state *state)
> {
> struct virtio_net *dev = get_device(ctx);
> - uint16_t base_idx = state->index;
> + uint16_t idx = state->index;
> + uint16_t base_idx = (idx / VIRTIO_QNUM) * VIRTIO_QNUM;
> int enable = (int)state->num;
> + int qpair_enabled;
>
> RTE_LOG(INFO, VHOST_CONFIG,
> "set queue enable: %d to qp idx: %d\n",
> enable, state->index);
>
> + dev->virtqueue[idx]->enabled = enable;
> + qpair_enabled =
> + dev->virtqueue[base_idx + VIRTIO_RXQ]->enabled &&
> + dev->virtqueue[base_idx + VIRTIO_TXQ]->enabled;
> +
> if (notify_ops->vring_state_changed) {
> notify_ops->vring_state_changed(dev, base_idx / VIRTIO_QNUM,
> - enable);
> + qpair_enabled);
Here we could make the vring_state_changed callback be per vring then,
instead of per queue-pair. That make the code simpler, as well as more
consistent.
Thanks.
--yliu
> }
>
> - dev->virtqueue[base_idx + VIRTIO_RXQ]->enabled = enable;
> - dev->virtqueue[base_idx + VIRTIO_TXQ]->enabled = enable;
> -
> return 0;
> }
>
> --
> --Victor
next prev parent reply other threads:[~2015-11-23 3:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-20 13:45 [PATCH] vhost-user: fix enabling of queue pair Victor Kaplansky
2015-11-20 15:17 ` Victor Kaplansky
2015-11-23 3:22 ` Yuanhan Liu [this message]
2015-11-24 7:25 ` [PATCH v2] " Yuanhan Liu
2015-11-24 7:43 ` Victor Kaplansky
2015-11-24 20:29 ` Thomas Monjalon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20151123032237.GC2325@yliu-dev.sh.intel.com \
--to=yuanhan.liu@linux.intel.com \
--cc=dev@dpdk.org \
--cc=mapfelba@redhat.com \
--cc=mlureau@redhat.com \
--cc=mst@redhat.com \
--cc=victork@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.