mbox series

[v6,resend,0/4] add generic vDPA device support

Message ID 20220514041107.1980-1-longpeng2@huawei.com (mailing list archive)
Headers show
Series add generic vDPA device support | expand

Message

Denis V. Lunev" via May 14, 2022, 4:11 a.m. UTC
From: Longpeng <longpeng2@huawei.com>

Hi guys,

With the generic vDPA device, QEMU won't need to touch the device
types any more, such like vfio.

We can use the generic vDPA device as follow:
  -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
  Or
  -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
  vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x

I've done some simple tests on Huawei's offloading card (net, 0.95).

Changes v5 -> v6:
  Patch 2:
    - Turn to the original approach in the RFC to initialize the
      virtio_pci_id_info array. [Michael]
	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
  Patch 3:
    - Fix logical error of exception handler around the post_init.
      [Stefano]
    - Fix some coding style warnings. [Stefano]
  Patch 4:
    - Fix some coding style warnings. [Stefano]

Changes v4 -> v5:
  Patch 3:
    - remove vhostfd [Jason]
    - support virtio-mmio [Jason]

Changes v3 -> v4:
  v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
  - reorganize the series [Stefano]
  - fix some typos [Stefano]
  - fix logical error in vhost_vdpa_device_realize [Stefano]

Changes v2 -> v3
  Patch 4 & 5:
    - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
    - s/VQS_NUM/VQS_COUNT  [Stefano]
    - check both vdpa_dev_fd and vdpa_dev [Stefano]
  Patch 6:
    - move all steps into vhost_vdpa_device_unrealize. [Stefano]

Changes RFC -> v2
  Patch 1:
    - rename 'pdev_id' to 'trans_devid'  [Michael]
    - only use transitional device id for the devices
      listed in the spec  [Michael]
    - use macros to make the id_info table clearer  [Longpeng]
    - add some modern devices in the id_info table  [Longpeng]
  Patch 2:
    - remove the GET_VECTORS_NUM command  [Jason]
  Patch 4:
    - expose vdpa_dev_fd as a QOM preperty  [Stefan]
    - introduce vhost_vdpa_device_get_u32 as a common
      function to make the code clearer  [Stefan]
    - fix the misleading description of 'dc->desc'  [Stefano]
  Patch 5:
    - check returned number of virtqueues  [Stefan]
  Patch 6:
    - init s->num_queues  [Stefano]
    - free s->dev.vqs  [Stefano]


Longpeng (Mike) (4):
  linux-headers: Update headers to Linux 5.18-rc6
  virtio: get class_id and pci device id by the virtio id
  vdpa: add vdpa-dev support
  vdpa: add vdpa-dev-pci support

 hw/virtio/Kconfig            |   5 +
 hw/virtio/meson.build        |   2 +
 hw/virtio/vdpa-dev-pci.c     | 102 ++++++++++
 hw/virtio/vdpa-dev.c         | 377 +++++++++++++++++++++++++++++++++++
 hw/virtio/virtio-pci.c       |  88 ++++++++
 hw/virtio/virtio-pci.h       |   5 +
 include/hw/virtio/vdpa-dev.h |  43 ++++
 linux-headers/linux/vhost.h  |   7 +
 8 files changed, 629 insertions(+)
 create mode 100644 hw/virtio/vdpa-dev-pci.c
 create mode 100644 hw/virtio/vdpa-dev.c
 create mode 100644 include/hw/virtio/vdpa-dev.h

Comments

Denis V. Lunev" via May 30, 2022, 4:16 a.m. UTC | #1
Hi guys,

Ping...Any other comments?

在 2022/5/14 12:11, Longpeng(Mike) 写道:
> From: Longpeng <longpeng2@huawei.com>
>
> Hi guys,
>
> With the generic vDPA device, QEMU won't need to touch the device
> types any more, such like vfio.
>
> We can use the generic vDPA device as follow:
>    -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>    Or
>    -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>    vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
>
> I've done some simple tests on Huawei's offloading card (net, 0.95).
>
> Changes v5 -> v6:
>    Patch 2:
>      - Turn to the original approach in the RFC to initialize the
>        virtio_pci_id_info array. [Michael]
> 	  https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>    Patch 3:
>      - Fix logical error of exception handler around the post_init.
>        [Stefano]
>      - Fix some coding style warnings. [Stefano]
>    Patch 4:
>      - Fix some coding style warnings. [Stefano]
>
> Changes v4 -> v5:
>    Patch 3:
>      - remove vhostfd [Jason]
>      - support virtio-mmio [Jason]
>
> Changes v3 -> v4:
>    v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>    - reorganize the series [Stefano]
>    - fix some typos [Stefano]
>    - fix logical error in vhost_vdpa_device_realize [Stefano]
>
> Changes v2 -> v3
>    Patch 4 & 5:
>      - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>      - s/VQS_NUM/VQS_COUNT  [Stefano]
>      - check both vdpa_dev_fd and vdpa_dev [Stefano]
>    Patch 6:
>      - move all steps into vhost_vdpa_device_unrealize. [Stefano]
>
> Changes RFC -> v2
>    Patch 1:
>      - rename 'pdev_id' to 'trans_devid'  [Michael]
>      - only use transitional device id for the devices
>        listed in the spec  [Michael]
>      - use macros to make the id_info table clearer  [Longpeng]
>      - add some modern devices in the id_info table  [Longpeng]
>    Patch 2:
>      - remove the GET_VECTORS_NUM command  [Jason]
>    Patch 4:
>      - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>      - introduce vhost_vdpa_device_get_u32 as a common
>        function to make the code clearer  [Stefan]
>      - fix the misleading description of 'dc->desc'  [Stefano]
>    Patch 5:
>      - check returned number of virtqueues  [Stefan]
>    Patch 6:
>      - init s->num_queues  [Stefano]
>      - free s->dev.vqs  [Stefano]
>
>
> Longpeng (Mike) (4):
>    linux-headers: Update headers to Linux 5.18-rc6
>    virtio: get class_id and pci device id by the virtio id
>    vdpa: add vdpa-dev support
>    vdpa: add vdpa-dev-pci support
>
>   hw/virtio/Kconfig            |   5 +
>   hw/virtio/meson.build        |   2 +
>   hw/virtio/vdpa-dev-pci.c     | 102 ++++++++++
>   hw/virtio/vdpa-dev.c         | 377 +++++++++++++++++++++++++++++++++++
>   hw/virtio/virtio-pci.c       |  88 ++++++++
>   hw/virtio/virtio-pci.h       |   5 +
>   include/hw/virtio/vdpa-dev.h |  43 ++++
>   linux-headers/linux/vhost.h  |   7 +
>   8 files changed, 629 insertions(+)
>   create mode 100644 hw/virtio/vdpa-dev-pci.c
>   create mode 100644 hw/virtio/vdpa-dev.c
>   create mode 100644 include/hw/virtio/vdpa-dev.h
>
Jason Wang May 31, 2022, 7 a.m. UTC | #2
On Mon, May 30, 2022 at 12:16 PM Longpeng (Mike, Cloud Infrastructure
Service Product Dept.) <longpeng2@huawei.com> wrote:
>
> Hi guys,
>
> Ping...Any other comments?

Will go through this and try to provide some acks soon.

Thanks

>
> 在 2022/5/14 12:11, Longpeng(Mike) 写道:
> > From: Longpeng <longpeng2@huawei.com>
> >
> > Hi guys,
> >
> > With the generic vDPA device, QEMU won't need to touch the device
> > types any more, such like vfio.
> >
> > We can use the generic vDPA device as follow:
> >    -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
> >    Or
> >    -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
> >    vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> >
> > I've done some simple tests on Huawei's offloading card (net, 0.95).
> >
> > Changes v5 -> v6:
> >    Patch 2:
> >      - Turn to the original approach in the RFC to initialize the
> >        virtio_pci_id_info array. [Michael]
> >         https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
> >    Patch 3:
> >      - Fix logical error of exception handler around the post_init.
> >        [Stefano]
> >      - Fix some coding style warnings. [Stefano]
> >    Patch 4:
> >      - Fix some coding style warnings. [Stefano]
> >
> > Changes v4 -> v5:
> >    Patch 3:
> >      - remove vhostfd [Jason]
> >      - support virtio-mmio [Jason]
> >
> > Changes v3 -> v4:
> >    v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
> >    - reorganize the series [Stefano]
> >    - fix some typos [Stefano]
> >    - fix logical error in vhost_vdpa_device_realize [Stefano]
> >
> > Changes v2 -> v3
> >    Patch 4 & 5:
> >      - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
> >      - s/VQS_NUM/VQS_COUNT  [Stefano]
> >      - check both vdpa_dev_fd and vdpa_dev [Stefano]
> >    Patch 6:
> >      - move all steps into vhost_vdpa_device_unrealize. [Stefano]
> >
> > Changes RFC -> v2
> >    Patch 1:
> >      - rename 'pdev_id' to 'trans_devid'  [Michael]
> >      - only use transitional device id for the devices
> >        listed in the spec  [Michael]
> >      - use macros to make the id_info table clearer  [Longpeng]
> >      - add some modern devices in the id_info table  [Longpeng]
> >    Patch 2:
> >      - remove the GET_VECTORS_NUM command  [Jason]
> >    Patch 4:
> >      - expose vdpa_dev_fd as a QOM preperty  [Stefan]
> >      - introduce vhost_vdpa_device_get_u32 as a common
> >        function to make the code clearer  [Stefan]
> >      - fix the misleading description of 'dc->desc'  [Stefano]
> >    Patch 5:
> >      - check returned number of virtqueues  [Stefan]
> >    Patch 6:
> >      - init s->num_queues  [Stefano]
> >      - free s->dev.vqs  [Stefano]
> >
> >
> > Longpeng (Mike) (4):
> >    linux-headers: Update headers to Linux 5.18-rc6
> >    virtio: get class_id and pci device id by the virtio id
> >    vdpa: add vdpa-dev support
> >    vdpa: add vdpa-dev-pci support
> >
> >   hw/virtio/Kconfig            |   5 +
> >   hw/virtio/meson.build        |   2 +
> >   hw/virtio/vdpa-dev-pci.c     | 102 ++++++++++
> >   hw/virtio/vdpa-dev.c         | 377 +++++++++++++++++++++++++++++++++++
> >   hw/virtio/virtio-pci.c       |  88 ++++++++
> >   hw/virtio/virtio-pci.h       |   5 +
> >   include/hw/virtio/vdpa-dev.h |  43 ++++
> >   linux-headers/linux/vhost.h  |   7 +
> >   8 files changed, 629 insertions(+)
> >   create mode 100644 hw/virtio/vdpa-dev-pci.c
> >   create mode 100644 hw/virtio/vdpa-dev.c
> >   create mode 100644 include/hw/virtio/vdpa-dev.h
> >
>
Jason Wang May 31, 2022, 8:50 a.m. UTC | #3
On Mon, May 30, 2022 at 12:16 PM Longpeng (Mike, Cloud Infrastructure
Service Product Dept.) <longpeng2@huawei.com> wrote:
>
> Hi guys,
>
> Ping...Any other comments?

Looks good to me.

Acked-by: Jason Wang <jasowang@redhat.com>

(This probably requires a rebase since it doesn't apply cleanly on master).

Thanks

>
> 在 2022/5/14 12:11, Longpeng(Mike) 写道:
> > From: Longpeng <longpeng2@huawei.com>
> >
> > Hi guys,
> >
> > With the generic vDPA device, QEMU won't need to touch the device
> > types any more, such like vfio.
> >
> > We can use the generic vDPA device as follow:
> >    -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
> >    Or
> >    -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
> >    vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> >
> > I've done some simple tests on Huawei's offloading card (net, 0.95).
> >
> > Changes v5 -> v6:
> >    Patch 2:
> >      - Turn to the original approach in the RFC to initialize the
> >        virtio_pci_id_info array. [Michael]
> >         https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
> >    Patch 3:
> >      - Fix logical error of exception handler around the post_init.
> >        [Stefano]
> >      - Fix some coding style warnings. [Stefano]
> >    Patch 4:
> >      - Fix some coding style warnings. [Stefano]
> >
> > Changes v4 -> v5:
> >    Patch 3:
> >      - remove vhostfd [Jason]
> >      - support virtio-mmio [Jason]
> >
> > Changes v3 -> v4:
> >    v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
> >    - reorganize the series [Stefano]
> >    - fix some typos [Stefano]
> >    - fix logical error in vhost_vdpa_device_realize [Stefano]
> >
> > Changes v2 -> v3
> >    Patch 4 & 5:
> >      - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
> >      - s/VQS_NUM/VQS_COUNT  [Stefano]
> >      - check both vdpa_dev_fd and vdpa_dev [Stefano]
> >    Patch 6:
> >      - move all steps into vhost_vdpa_device_unrealize. [Stefano]
> >
> > Changes RFC -> v2
> >    Patch 1:
> >      - rename 'pdev_id' to 'trans_devid'  [Michael]
> >      - only use transitional device id for the devices
> >        listed in the spec  [Michael]
> >      - use macros to make the id_info table clearer  [Longpeng]
> >      - add some modern devices in the id_info table  [Longpeng]
> >    Patch 2:
> >      - remove the GET_VECTORS_NUM command  [Jason]
> >    Patch 4:
> >      - expose vdpa_dev_fd as a QOM preperty  [Stefan]
> >      - introduce vhost_vdpa_device_get_u32 as a common
> >        function to make the code clearer  [Stefan]
> >      - fix the misleading description of 'dc->desc'  [Stefano]
> >    Patch 5:
> >      - check returned number of virtqueues  [Stefan]
> >    Patch 6:
> >      - init s->num_queues  [Stefano]
> >      - free s->dev.vqs  [Stefano]
> >
> >
> > Longpeng (Mike) (4):
> >    linux-headers: Update headers to Linux 5.18-rc6
> >    virtio: get class_id and pci device id by the virtio id
> >    vdpa: add vdpa-dev support
> >    vdpa: add vdpa-dev-pci support
> >
> >   hw/virtio/Kconfig            |   5 +
> >   hw/virtio/meson.build        |   2 +
> >   hw/virtio/vdpa-dev-pci.c     | 102 ++++++++++
> >   hw/virtio/vdpa-dev.c         | 377 +++++++++++++++++++++++++++++++++++
> >   hw/virtio/virtio-pci.c       |  88 ++++++++
> >   hw/virtio/virtio-pci.h       |   5 +
> >   include/hw/virtio/vdpa-dev.h |  43 ++++
> >   linux-headers/linux/vhost.h  |   7 +
> >   8 files changed, 629 insertions(+)
> >   create mode 100644 hw/virtio/vdpa-dev-pci.c
> >   create mode 100644 hw/virtio/vdpa-dev.c
> >   create mode 100644 include/hw/virtio/vdpa-dev.h
> >
>
Denis V. Lunev" via May 31, 2022, 9:50 a.m. UTC | #4
在 2022/5/31 16:50, Jason Wang 写道:
> On Mon, May 30, 2022 at 12:16 PM Longpeng (Mike, Cloud Infrastructure
> Service Product Dept.) <longpeng2@huawei.com> wrote:
>>
>> Hi guys,
>>
>> Ping...Any other comments?
> 
> Looks good to me.
> 
> Acked-by: Jason Wang <jasowang@redhat.com>
> 
> (This probably requires a rebase since it doesn't apply cleanly on master).
> 

Okay, I'll rebase in next version.
Thanks.

> Thanks
> 
>>
>> 在 2022/5/14 12:11, Longpeng(Mike) 写道:
>>> From: Longpeng <longpeng2@huawei.com>
>>>
>>> Hi guys,
>>>
>>> With the generic vDPA device, QEMU won't need to touch the device
>>> types any more, such like vfio.
>>>
>>> We can use the generic vDPA device as follow:
>>>     -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>>>     Or
>>>     -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>>>     vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
>>>
>>> I've done some simple tests on Huawei's offloading card (net, 0.95).
>>>
>>> Changes v5 -> v6:
>>>     Patch 2:
>>>       - Turn to the original approach in the RFC to initialize the
>>>         virtio_pci_id_info array. [Michael]
>>>          https://lore.kernel.org/all/20220105005900.860-2-longpeng2@huawei.com/
>>>     Patch 3:
>>>       - Fix logical error of exception handler around the post_init.
>>>         [Stefano]
>>>       - Fix some coding style warnings. [Stefano]
>>>     Patch 4:
>>>       - Fix some coding style warnings. [Stefano]
>>>
>>> Changes v4 -> v5:
>>>     Patch 3:
>>>       - remove vhostfd [Jason]
>>>       - support virtio-mmio [Jason]
>>>
>>> Changes v3 -> v4:
>>>     v3: https://www.mail-archive.com/qemu-devel@nongnu.org/msg877015.html
>>>     - reorganize the series [Stefano]
>>>     - fix some typos [Stefano]
>>>     - fix logical error in vhost_vdpa_device_realize [Stefano]
>>>
>>> Changes v2 -> v3
>>>     Patch 4 & 5:
>>>       - only call vdpa ioctls in vdpa-dev.c [Stefano, Longpeng]
>>>       - s/VQS_NUM/VQS_COUNT  [Stefano]
>>>       - check both vdpa_dev_fd and vdpa_dev [Stefano]
>>>     Patch 6:
>>>       - move all steps into vhost_vdpa_device_unrealize. [Stefano]
>>>
>>> Changes RFC -> v2
>>>     Patch 1:
>>>       - rename 'pdev_id' to 'trans_devid'  [Michael]
>>>       - only use transitional device id for the devices
>>>         listed in the spec  [Michael]
>>>       - use macros to make the id_info table clearer  [Longpeng]
>>>       - add some modern devices in the id_info table  [Longpeng]
>>>     Patch 2:
>>>       - remove the GET_VECTORS_NUM command  [Jason]
>>>     Patch 4:
>>>       - expose vdpa_dev_fd as a QOM preperty  [Stefan]
>>>       - introduce vhost_vdpa_device_get_u32 as a common
>>>         function to make the code clearer  [Stefan]
>>>       - fix the misleading description of 'dc->desc'  [Stefano]
>>>     Patch 5:
>>>       - check returned number of virtqueues  [Stefan]
>>>     Patch 6:
>>>       - init s->num_queues  [Stefano]
>>>       - free s->dev.vqs  [Stefano]
>>>
>>>
>>> Longpeng (Mike) (4):
>>>     linux-headers: Update headers to Linux 5.18-rc6
>>>     virtio: get class_id and pci device id by the virtio id
>>>     vdpa: add vdpa-dev support
>>>     vdpa: add vdpa-dev-pci support
>>>
>>>    hw/virtio/Kconfig            |   5 +
>>>    hw/virtio/meson.build        |   2 +
>>>    hw/virtio/vdpa-dev-pci.c     | 102 ++++++++++
>>>    hw/virtio/vdpa-dev.c         | 377 +++++++++++++++++++++++++++++++++++
>>>    hw/virtio/virtio-pci.c       |  88 ++++++++
>>>    hw/virtio/virtio-pci.h       |   5 +
>>>    include/hw/virtio/vdpa-dev.h |  43 ++++
>>>    linux-headers/linux/vhost.h  |   7 +
>>>    8 files changed, 629 insertions(+)
>>>    create mode 100644 hw/virtio/vdpa-dev-pci.c
>>>    create mode 100644 hw/virtio/vdpa-dev.c
>>>    create mode 100644 include/hw/virtio/vdpa-dev.h
>>>
>>
> 
> .
Stefan Hajnoczi June 9, 2022, 8:35 a.m. UTC | #5
On Sat, May 14, 2022 at 12:11:03PM +0800, Longpeng(Mike) wrote:
> From: Longpeng <longpeng2@huawei.com>
> 
> Hi guys,
> 
> With the generic vDPA device, QEMU won't need to touch the device
> types any more, such like vfio.
> 
> We can use the generic vDPA device as follow:
>   -device vhost-vdpa-device-pci,vhostdev=/dev/vhost-vdpa-X
>   Or
>   -M microvm -m 512m -smp 2 -kernel ... -initrd ... -device \
>   vhost-vdpa-device,vhostdev=/dev/vhost-vdpa-x
> 
> I've done some simple tests on Huawei's offloading card (net, 0.95).

Please send a follow-up patch that adds documentation for this new
device type. Maybe in a new docs/system/devices/vhost-vdpa.rst file?

Stefan