From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39455) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gAbek-00055X-7u for qemu-devel@nongnu.org; Thu, 11 Oct 2018 10:09:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gAbeh-0006E9-CC for qemu-devel@nongnu.org; Thu, 11 Oct 2018 10:09:38 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42240) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1gAbeh-00068W-3u for qemu-devel@nongnu.org; Thu, 11 Oct 2018 10:09:35 -0400 From: wexu@redhat.com Date: Thu, 11 Oct 2018 10:08:35 -0400 Message-Id: <1539266915-15216-13-git-send-email-wexu@redhat.com> In-Reply-To: <1539266915-15216-1-git-send-email-wexu@redhat.com> References: <1539266915-15216-1-git-send-email-wexu@redhat.com> Subject: [Qemu-devel] [[RFC v3 12/12] virtio: feature vhost-net support for packed ring List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: jasowang@redhat.com, tiwei.bie@intel.com, wexu@redhat.com, jfreimann@redhat.com, maxime.coquelin@redhat.com From: Wei Xu (cherry picked from commit 305a2c4640c15c5717245067ab937fd10f478ee6) Signed-off-by: Wei Xu (cherry picked from commit 46476dae6f44c6fef8802a4a0ac7d0d79fe399e3) Signed-off-by: Wei Xu --- hw/virtio/vhost.c | 3 +++ hw/virtio/virtio.c | 4 ++++ include/hw/virtio/virtio.h | 1 + 3 files changed, 8 insertions(+) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 9df2da3..de06d55 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -974,6 +974,9 @@ static int vhost_virtqueue_start(struct vhost_dev *dev, } state.num = virtio_queue_get_last_avail_idx(vdev, idx); + if (virtio_vdev_has_feature(vdev, VIRTIO_F_RING_PACKED)) { + state.num |= ((int)virtio_queue_packed_get_wc(vdev, idx)) << 31; + } r = dev->vhost_ops->vhost_set_vring_base(dev, &state); if (r) { VHOST_OPS_DEBUG("vhost_set_vring_base failed"); diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index 1d25776..2a90163 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -2894,6 +2894,10 @@ void virtio_init(VirtIODevice *vdev, const char *name, vdev->use_guest_notifier_mask = true; } +bool virtio_queue_packed_get_wc(VirtIODevice *vdev, int n) +{ + return vdev->vq[n].avail_wrap_counter; +} hwaddr virtio_queue_get_desc_addr(VirtIODevice *vdev, int n) { return vdev->vq[n].vring.desc; diff --git a/include/hw/virtio/virtio.h b/include/hw/virtio/virtio.h index 9af8839..0bb3be5 100644 --- a/include/hw/virtio/virtio.h +++ b/include/hw/virtio/virtio.h @@ -295,6 +295,7 @@ void virtio_queue_aio_set_host_notifier_handler(VirtQueue *vq, AioContext *ctx, VirtIOHandleAIOOutput handle_output); VirtQueue *virtio_vector_first_queue(VirtIODevice *vdev, uint16_t vector); VirtQueue *virtio_vector_next_queue(VirtQueue *vq); +bool virtio_queue_packed_get_wc(VirtIODevice *vdev, int n); static inline void virtio_add_feature(uint64_t *features, unsigned int fbit) { -- 1.8.3.1