From: Maxime Coquelin <maxime.coquelin@redhat.com>
To: Cindy Lu <lulu@redhat.com>,
mst@redhat.com, armbru@redhat.com, eblake@redhat.com,
cohuck@redhat.com, jasowang@redhat.com
Cc: shahafs@mellanox.com, kevin.tian@intel.com, parav@mellanox.com,
xiao.w.wang@intel.com, saugatm@xilinx.com, qemu-devel@nongnu.org,
aadam@redhat.com, cunming.liang@intel.com, rdunlap@infradead.org,
hanand@xilinx.com, gdawar@xilinx.com, vmireyno@marvell.com,
hch@infradead.org, eperezma@redhat.com, jiri@mellanox.com,
jgg@mellanox.com, stefanha@redhat.com, zhihong.wang@intel.com,
lingshan.zhu@intel.com, mhabets@solarflare.com,
rob.miller@broadcom.com
Subject: Re: [RFC v1 3/4] vhost-vdpa: implement vhost-vdpa backend
Date: Thu, 7 May 2020 17:12:37 +0200 [thread overview]
Message-ID: <c107994b-888d-8aa4-57d2-5188837ed757@redhat.com> (raw)
In-Reply-To: <20200420093241.4238-4-lulu@redhat.com>
On 4/20/20 11:32 AM, Cindy Lu wrote:
> Currently we have 2 types of vhost backends in QEMU: vhost kernel and
> vhost-user. The above patch provides a generic device for vDPA purpose,
> this vDPA device exposes to user space a non-vendor-specific configuration
> interface for setting up a vhost HW accelerator, this patch set introduces
> a third vhost backend called vhost-vdpa based on the vDPA interface.
>
> Vhost-vdpa usage:
>
> qemu-system-x86_64 -cpu host -enable-kvm \
> ......
> -netdev type=vhost-vdpa,vhostdev=/dev/vhost-vdpa-id,id=vhost-vdpa0 \
> -device virtio-net-pci,netdev=vhost-vdpa0,page-per-vq=on \
>
> Author: Tiwei Bie
> Signed-off-by: Cindy Lu <lulu@redhat.com>
> ---
> hw/net/vhost_net.c | 43 ++++
> hw/net/virtio-net.c | 9 +
> hw/virtio/Makefile.objs | 2 +-
> hw/virtio/vhost-backend.c | 3 +
> hw/virtio/vhost-vdpa.c | 379 ++++++++++++++++++++++++++++++
> hw/virtio/vhost.c | 5 +
> include/hw/virtio/vhost-backend.h | 6 +-
> include/hw/virtio/vhost-vdpa.h | 14 ++
> 8 files changed, 459 insertions(+), 2 deletions(-)
> create mode 100644 hw/virtio/vhost-vdpa.c
> create mode 100644 include/hw/virtio/vhost-vdpa.h
>
> diff --git a/hw/net/vhost_net.c b/hw/net/vhost_net.c
> index 4096d64aaf..0d13fda2fc 100644
> --- a/hw/net/vhost_net.c
> +++ b/hw/net/vhost_net.c
> @@ -17,8 +17,10 @@
> #include "net/net.h"
> #include "net/tap.h"
> #include "net/vhost-user.h"
> +#include "net/vhost-vdpa.h"
>
> #include "standard-headers/linux/vhost_types.h"
> +#include "linux-headers/linux/vhost.h"
> #include "hw/virtio/virtio-net.h"
> #include "net/vhost_net.h"
> #include "qemu/error-report.h"
> @@ -85,6 +87,29 @@ static const int user_feature_bits[] = {
> VHOST_INVALID_FEATURE_BIT
> };
>
> +static const int vdpa_feature_bits[] = {
> + VIRTIO_F_NOTIFY_ON_EMPTY,
> + VIRTIO_RING_F_INDIRECT_DESC,
> + VIRTIO_RING_F_EVENT_IDX,
> + VIRTIO_F_ANY_LAYOUT,
> + VIRTIO_F_VERSION_1,
> + VIRTIO_NET_F_CSUM,
> + VIRTIO_NET_F_GUEST_CSUM,
> + VIRTIO_NET_F_GSO,
> + VIRTIO_NET_F_GUEST_TSO4,
> + VIRTIO_NET_F_GUEST_TSO6,
> + VIRTIO_NET_F_GUEST_ECN,
> + VIRTIO_NET_F_GUEST_UFO,
> + VIRTIO_NET_F_HOST_TSO4,
> + VIRTIO_NET_F_HOST_TSO6,
> + VIRTIO_NET_F_HOST_ECN,
> + VIRTIO_NET_F_HOST_UFO,
> + VIRTIO_NET_F_MRG_RXBUF,
> + VIRTIO_NET_F_MTU,
> + VIRTIO_F_IOMMU_PLATFORM,
> + VIRTIO_NET_F_GUEST_ANNOUNCE,
> + VHOST_INVALID_FEATURE_BIT
> +};
> static const int *vhost_net_get_feature_bits(struct vhost_net *net)
> {
> const int *feature_bits = 0;
> @@ -96,6 +121,9 @@ static const int *vhost_net_get_feature_bits(struct vhost_net *net)
> case NET_CLIENT_DRIVER_VHOST_USER:
> feature_bits = user_feature_bits;
> break;
> + case NET_CLIENT_DRIVER_VHOST_VDPA:
> + feature_bits = vdpa_feature_bits;
> + break;
> default:
> error_report("Feature bits not defined for this type: %d",
> net->nc->info->type);
> @@ -434,6 +462,10 @@ VHostNetState *get_vhost_net(NetClientState *nc)
> assert(vhost_net);
> break;
> #endif
> + case NET_CLIENT_DRIVER_VHOST_VDPA:
> + vhost_net = vhost_vdpa_get_vhost_net(nc);
> + assert(vhost_net);
> + break;
> default:
> break;
> }
> @@ -465,3 +497,14 @@ int vhost_net_set_mtu(struct vhost_net *net, uint16_t mtu)
>
> return vhost_ops->vhost_net_set_mtu(&net->dev, mtu);
> }
> +int vhost_set_state(NetClientState *nc, int state)
> +{
> + struct vhost_net *net = get_vhost_net(nc);
> + struct vhost_dev *hdev = &net->dev;
> + if (nc->info->type == NET_CLIENT_DRIVER_VHOST_VDPA) {
Maybe checking the vhost_set_state callback is implemented is enough,
and it is not need to restrict that to Vhost-vDPA?
> + if (hdev->vhost_ops->vhost_set_state) {
> + return hdev->vhost_ops->vhost_set_state(hdev, state);
> + }
> + }
> + return 0;
> +}
next prev parent reply other threads:[~2020-05-07 15:15 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-20 9:32 [RFC v1 0/4] vDPA support in qemu Cindy Lu
2020-04-20 9:32 ` [RFC v1 1/4] net: Introduce qemu_get_peer Cindy Lu
2020-04-21 3:23 ` Jason Wang
2020-04-21 8:10 ` Cindy Lu
2020-04-21 15:01 ` Laurent Vivier
2020-04-20 9:32 ` [RFC v1 2/4] vhost-vdpa: introduce vhost-vdpa net client Cindy Lu
2020-04-20 14:49 ` Eric Blake
2020-04-21 3:40 ` Jason Wang
2020-04-21 9:46 ` Cindy Lu
2020-04-21 15:06 ` Laurent Vivier
2020-04-21 15:47 ` Laurent Vivier
2020-04-22 9:21 ` Cindy Lu
2020-04-20 9:32 ` [RFC v1 3/4] vhost-vdpa: implement vhost-vdpa backend Cindy Lu
2020-04-20 14:51 ` Eric Blake
2020-04-21 3:56 ` Jason Wang
2020-04-21 9:12 ` Cindy Lu
2020-04-21 15:54 ` Laurent Vivier
2020-04-22 9:24 ` Cindy Lu
2020-05-07 15:12 ` Maxime Coquelin [this message]
2020-05-07 15:56 ` Cindy Lu
2020-05-07 15:30 ` Maxime Coquelin
2020-05-07 16:02 ` Cindy Lu
2020-04-20 9:32 ` [RFC v1 4/4] vhost: introduce vhost_set_vring_ready method Cindy Lu
2020-04-21 3:59 ` Jason Wang
2020-04-21 8:42 ` Cindy Lu
2020-04-21 4:03 ` [RFC v1 0/4] vDPA support in qemu Jason Wang
2020-04-21 4:05 ` Jason Wang
2020-04-21 9:47 ` Cindy Lu
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=c107994b-888d-8aa4-57d2-5188837ed757@redhat.com \
--to=maxime.coquelin@redhat.com \
--cc=aadam@redhat.com \
--cc=armbru@redhat.com \
--cc=cohuck@redhat.com \
--cc=cunming.liang@intel.com \
--cc=eblake@redhat.com \
--cc=eperezma@redhat.com \
--cc=gdawar@xilinx.com \
--cc=hanand@xilinx.com \
--cc=hch@infradead.org \
--cc=jasowang@redhat.com \
--cc=jgg@mellanox.com \
--cc=jiri@mellanox.com \
--cc=kevin.tian@intel.com \
--cc=lingshan.zhu@intel.com \
--cc=lulu@redhat.com \
--cc=mhabets@solarflare.com \
--cc=mst@redhat.com \
--cc=parav@mellanox.com \
--cc=qemu-devel@nongnu.org \
--cc=rdunlap@infradead.org \
--cc=rob.miller@broadcom.com \
--cc=saugatm@xilinx.com \
--cc=shahafs@mellanox.com \
--cc=stefanha@redhat.com \
--cc=vmireyno@marvell.com \
--cc=xiao.w.wang@intel.com \
--cc=zhihong.wang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).