Message ID | 20220105005900.860-4-longpeng2@huawei.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | add generic vDPA device support | expand |
On Wed, Jan 05, 2022 at 08:58:53AM +0800, Longpeng(Mike) wrote: > +static const VirtioPCIDeviceTypeInfo vhost_vdpa_device_pci_info = { > + .base_name = TYPE_VHOST_VDPA_DEVICE_PCI, > + .generic_name = "vhost-vdpa-device-pci", > + .transitional_name = "vhost-vdpa-device-pci-transitional", > + .non_transitional_name = "vhost-vdpa-device-pci-non-transitional", Does vDPA support Transitional VIRTIO devices? I expected this device to support Modern devices only. Stefan
> -----Original Message----- > From: Stefan Hajnoczi [mailto:stefanha@redhat.com] > Sent: Wednesday, January 5, 2022 5:49 PM > To: Longpeng (Mike, Cloud Infrastructure Service Product Dept.) > <longpeng2@huawei.com> > Cc: mst@redhat.com; jasowang@redhat.com; sgarzare@redhat.com; > cohuck@redhat.com; pbonzini@redhat.com; Gonglei (Arei) > <arei.gonglei@huawei.com>; Yechuan <yechuan@huawei.com>; Huangzhichao > <huangzhichao@huawei.com>; qemu-devel@nongnu.org > Subject: Re: [RFC 03/10] vdpa: add the infrastructure of vdpa-dev > > On Wed, Jan 05, 2022 at 08:58:53AM +0800, Longpeng(Mike) wrote: > > +static const VirtioPCIDeviceTypeInfo vhost_vdpa_device_pci_info = { > > + .base_name = TYPE_VHOST_VDPA_DEVICE_PCI, > > + .generic_name = "vhost-vdpa-device-pci", > > + .transitional_name = "vhost-vdpa-device-pci-transitional", > > + .non_transitional_name = "vhost-vdpa-device-pci-non-transitional", > > Does vDPA support Transitional VIRTIO devices? > > I expected this device to support Modern devices only. > There's already a 0.95 vdpa driver (Alibaba ENI) in the kernel source and supporting 0.95 devices is necessary for some older GuestOS. I'm OK if other guys also approve of supporting 1.0+ devices only :) > Stefan
On Thu, Jan 06, 2022 at 01:22:19AM +0000, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote: > > > > -----Original Message----- > > From: Stefan Hajnoczi [mailto:stefanha@redhat.com] > > Sent: Wednesday, January 5, 2022 5:49 PM > > To: Longpeng (Mike, Cloud Infrastructure Service Product Dept.) > > <longpeng2@huawei.com> > > Cc: mst@redhat.com; jasowang@redhat.com; sgarzare@redhat.com; > > cohuck@redhat.com; pbonzini@redhat.com; Gonglei (Arei) > > <arei.gonglei@huawei.com>; Yechuan <yechuan@huawei.com>; Huangzhichao > > <huangzhichao@huawei.com>; qemu-devel@nongnu.org > > Subject: Re: [RFC 03/10] vdpa: add the infrastructure of vdpa-dev > > > > On Wed, Jan 05, 2022 at 08:58:53AM +0800, Longpeng(Mike) wrote: > > > +static const VirtioPCIDeviceTypeInfo vhost_vdpa_device_pci_info = { > > > + .base_name = TYPE_VHOST_VDPA_DEVICE_PCI, > > > + .generic_name = "vhost-vdpa-device-pci", > > > + .transitional_name = "vhost-vdpa-device-pci-transitional", > > > + .non_transitional_name = "vhost-vdpa-device-pci-non-transitional", > > > > Does vDPA support Transitional VIRTIO devices? > > > > I expected this device to support Modern devices only. > > > > There's already a 0.95 vdpa driver (Alibaba ENI) in the kernel source and > supporting 0.95 devices is necessary for some older GuestOS. > > I'm OK if other guys also approve of supporting 1.0+ devices only :) If vDPA supports Transitional VIRTIO devices then it's fine to keep this code unchanged in this patch series. Stefan
On Thu, Jan 6, 2022 at 7:25 PM Stefan Hajnoczi <stefanha@redhat.com> wrote: > > On Thu, Jan 06, 2022 at 01:22:19AM +0000, Longpeng (Mike, Cloud Infrastructure Service Product Dept.) wrote: > > > > > > > -----Original Message----- > > > From: Stefan Hajnoczi [mailto:stefanha@redhat.com] > > > Sent: Wednesday, January 5, 2022 5:49 PM > > > To: Longpeng (Mike, Cloud Infrastructure Service Product Dept.) > > > <longpeng2@huawei.com> > > > Cc: mst@redhat.com; jasowang@redhat.com; sgarzare@redhat.com; > > > cohuck@redhat.com; pbonzini@redhat.com; Gonglei (Arei) > > > <arei.gonglei@huawei.com>; Yechuan <yechuan@huawei.com>; Huangzhichao > > > <huangzhichao@huawei.com>; qemu-devel@nongnu.org > > > Subject: Re: [RFC 03/10] vdpa: add the infrastructure of vdpa-dev > > > > > > On Wed, Jan 05, 2022 at 08:58:53AM +0800, Longpeng(Mike) wrote: > > > > +static const VirtioPCIDeviceTypeInfo vhost_vdpa_device_pci_info = { > > > > + .base_name = TYPE_VHOST_VDPA_DEVICE_PCI, > > > > + .generic_name = "vhost-vdpa-device-pci", > > > > + .transitional_name = "vhost-vdpa-device-pci-transitional", > > > > + .non_transitional_name = "vhost-vdpa-device-pci-non-transitional", > > > > > > Does vDPA support Transitional VIRTIO devices? > > > > > > I expected this device to support Modern devices only. > > > > > > > There's already a 0.95 vdpa driver (Alibaba ENI) in the kernel source and > > supporting 0.95 devices is necessary for some older GuestOS. > > > > I'm OK if other guys also approve of supporting 1.0+ devices only :) > > If vDPA supports Transitional VIRTIO devices then it's fine to keep this > code unchanged in this patch series. Right, and I think that's the plan. Thanks > > Stefan
diff --git a/hw/virtio/Kconfig b/hw/virtio/Kconfig index c144d42f9b..2723283382 100644 --- a/hw/virtio/Kconfig +++ b/hw/virtio/Kconfig @@ -68,3 +68,8 @@ config VHOST_USER_RNG bool default y depends on VIRTIO && VHOST_USER + +config VHOST_VDPA_DEV + bool + default y if VIRTIO_PCI + depends on VIRTIO && VHOST_VDPA && LINUX diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build index 521f7d64a8..8e8943e20b 100644 --- a/hw/virtio/meson.build +++ b/hw/virtio/meson.build @@ -29,6 +29,7 @@ virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c')) virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_I2C'], if_true: files('vhost-user-i2c-pci.c')) virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c')) virtio_ss.add(when: ['CONFIG_VHOST_USER_RNG', 'CONFIG_VIRTIO_PCI'], if_true: files('vhost-user-rng-pci.c')) +virtio_ss.add(when: 'CONFIG_VHOST_VDPA_DEV', if_true: files('vdpa-dev.c')) virtio_pci_ss = ss.source_set() virtio_pci_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock-pci.c')) @@ -49,6 +50,7 @@ virtio_pci_ss.add(when: 'CONFIG_VIRTIO_SERIAL', if_true: files('virtio-serial-pc virtio_pci_ss.add(when: 'CONFIG_VIRTIO_PMEM', if_true: files('virtio-pmem-pci.c')) virtio_pci_ss.add(when: 'CONFIG_VIRTIO_IOMMU', if_true: files('virtio-iommu-pci.c')) virtio_pci_ss.add(when: 'CONFIG_VIRTIO_MEM', if_true: files('virtio-mem-pci.c')) +virtio_pci_ss.add(when: 'CONFIG_VHOST_VDPA_DEV', if_true: files('vdpa-dev-pci.c')) virtio_ss.add_all(when: 'CONFIG_VIRTIO_PCI', if_true: virtio_pci_ss) diff --git a/hw/virtio/vdpa-dev-pci.c b/hw/virtio/vdpa-dev-pci.c new file mode 100644 index 0000000000..a5a7b528a9 --- /dev/null +++ b/hw/virtio/vdpa-dev-pci.c @@ -0,0 +1,51 @@ +#include "qemu/osdep.h" +#include <sys/ioctl.h> +#include <linux/vhost.h> +#include "hw/virtio/virtio.h" +#include "hw/virtio/vdpa-dev.h" +#include "hw/pci/pci.h" +#include "hw/qdev-properties.h" +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/module.h" +#include "virtio-pci.h" +#include "qom/object.h" + + +typedef struct VhostVdpaDevicePCI VhostVdpaDevicePCI; + +#define TYPE_VHOST_VDPA_DEVICE_PCI "vhost-vdpa-device-pci-base" +DECLARE_INSTANCE_CHECKER(VhostVdpaDevicePCI, VHOST_VDPA_DEVICE_PCI, + TYPE_VHOST_VDPA_DEVICE_PCI) + +struct VhostVdpaDevicePCI { + VirtIOPCIProxy parent_obj; + VhostVdpaDevice vdev; +}; + +static void vhost_vdpa_device_pci_instance_init(Object *obj) +{ + return; +} + +static void vhost_vdpa_device_pci_class_init(ObjectClass *klass, void *data) +{ + return; +} + +static const VirtioPCIDeviceTypeInfo vhost_vdpa_device_pci_info = { + .base_name = TYPE_VHOST_VDPA_DEVICE_PCI, + .generic_name = "vhost-vdpa-device-pci", + .transitional_name = "vhost-vdpa-device-pci-transitional", + .non_transitional_name = "vhost-vdpa-device-pci-non-transitional", + .instance_size = sizeof(VhostVdpaDevicePCI), + .instance_init = vhost_vdpa_device_pci_instance_init, + .class_init = vhost_vdpa_device_pci_class_init, +}; + +static void vhost_vdpa_device_pci_register(void) +{ + virtio_pci_types_register(&vhost_vdpa_device_pci_info); +} + +type_init(vhost_vdpa_device_pci_register); diff --git a/hw/virtio/vdpa-dev.c b/hw/virtio/vdpa-dev.c new file mode 100644 index 0000000000..f4f92b90b0 --- /dev/null +++ b/hw/virtio/vdpa-dev.c @@ -0,0 +1,41 @@ +#include "qemu/osdep.h" +#include <sys/ioctl.h> +#include <linux/vhost.h> +#include "qapi/error.h" +#include "qemu/error-report.h" +#include "qemu/cutils.h" +#include "hw/qdev-core.h" +#include "hw/qdev-properties.h" +#include "hw/qdev-properties-system.h" +#include "hw/virtio/vhost.h" +#include "hw/virtio/virtio.h" +#include "hw/virtio/virtio-bus.h" +#include "hw/virtio/virtio-access.h" +#include "hw/virtio/vdpa-dev.h" +#include "sysemu/sysemu.h" +#include "sysemu/runstate.h" + +static void vhost_vdpa_device_class_init(ObjectClass *klass, void *data) +{ + return; +} + +static void vhost_vdpa_device_instance_init(Object *obj) +{ + return; +} + +static const TypeInfo vhost_vdpa_device_info = { + .name = TYPE_VHOST_VDPA_DEVICE, + .parent = TYPE_VIRTIO_DEVICE, + .instance_size = sizeof(VhostVdpaDevice), + .class_init = vhost_vdpa_device_class_init, + .instance_init = vhost_vdpa_device_instance_init, +}; + +static void register_vhost_vdpa_device_type(void) +{ + type_register_static(&vhost_vdpa_device_info); +} + +type_init(register_vhost_vdpa_device_type); diff --git a/include/hw/virtio/vdpa-dev.h b/include/hw/virtio/vdpa-dev.h new file mode 100644 index 0000000000..dd94bd74a2 --- /dev/null +++ b/include/hw/virtio/vdpa-dev.h @@ -0,0 +1,16 @@ +#ifndef _VHOST_VDPA_DEVICE_H +#define _VHOST_VDPA_DEVICE_H + +#include "hw/virtio/vhost.h" +#include "hw/virtio/vhost-vdpa.h" +#include "qom/object.h" + + +#define TYPE_VHOST_VDPA_DEVICE "vhost-vdpa-device" +OBJECT_DECLARE_SIMPLE_TYPE(VhostVdpaDevice, VHOST_VDPA_DEVICE) + +struct VhostVdpaDevice { + VirtIODevice parent_obj; +}; + +#endif