qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 0/4] Enable vhost-user to be used on BSD systems
@ 2022-03-04 10:08 Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 1/4] event_notifier: add event_notifier_get_wfd() Sergio Lopez
                   ` (4 more replies)
  0 siblings, 5 replies; 7+ messages in thread
From: Sergio Lopez @ 2022-03-04 10:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand, Eric Farman,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Sergio Lopez,
	Richard Henderson, Alex Williamson, Stefan Hajnoczi, Kevin Wolf,
	qemu-s390x, Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

Since QEMU is already able to emulate ioeventfd using pipefd, we're already
pretty close to supporting vhost-user on non-Linux systems.

This two patches bridge the gap by:

1. Adding a new event_notifier_get_wfd() to return wfd on the places where
   the peer is expected to write to the notifier.

2. Modifying the build system to it allows enabling vhost-user on BSD.

v1->v2:
  - Drop: "Allow returning EventNotifier's wfd" (Alex Williamson)
  - Add: "event_notifier: add event_notifier_get_wfd()" (Alex Williamson)
  - Add: "vhost: use wfd on functions setting vring call fd"
  - Rename: "Allow building vhost-user in BSD" to "configure, meson: allow
    enabling vhost-user on all POSIX systems"
  - Instead of making possible enabling vhost-user on Linux and BSD systems,
    allow enabling it on all non-Windows platforms. (Paolo Bonzini)

v2->v3:
  - Add a section to docs/interop/vhost-user.rst explaining how vhost-user
    is supported on non-Linux platforms. (Stefan Hajnoczi)

v3->v4:
  - Some documentation fixes. (Stefan Hajnoczi)
  - Pick up Reviewed-by tags.

Sergio Lopez (4):
  event_notifier: add event_notifier_get_wfd()
  vhost: use wfd on functions setting vring call fd
  configure, meson: allow enabling vhost-user on all POSIX systems
  docs: vhost-user: add subsection for non-Linux platforms

 configure                     |  4 ++--
 docs/interop/vhost-user.rst   | 20 ++++++++++++++++++++
 hw/virtio/vhost.c             |  6 +++---
 include/qemu/event_notifier.h |  1 +
 meson.build                   |  2 +-
 util/event_notifier-posix.c   |  5 +++++
 6 files changed, 32 insertions(+), 6 deletions(-)

-- 
2.35.1




^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH v4 1/4] event_notifier: add event_notifier_get_wfd()
  2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
@ 2022-03-04 10:08 ` Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 2/4] vhost: use wfd on functions setting vring call fd Sergio Lopez
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Sergio Lopez @ 2022-03-04 10:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand, Eric Farman,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Sergio Lopez,
	Richard Henderson, Alex Williamson, Stefan Hajnoczi, Kevin Wolf,
	qemu-s390x, Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

event_notifier_get_fd(const EventNotifier *e) always returns
EventNotifier's read file descriptor (rfd). This is not a problem when
the EventNotifier is backed by a an eventfd, as a single file
descriptor is used both for reading and triggering events (rfd ==
wfd).

But, when EventNotifier is backed by a pipe pair, we have two file
descriptors, one that can only be used for reads (rfd), and the other
only for writes (wfd).

There's, at least, one known situation in which we need to obtain wfd
instead of rfd, which is when setting up the file that's going to be
sent to the peer in vhost's SET_VRING_CALL.

Add a new event_notifier_get_wfd(const EventNotifier *e) that can be
used to obtain wfd where needed.

Signed-off-by: Sergio Lopez <slp@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 include/qemu/event_notifier.h | 1 +
 util/event_notifier-posix.c   | 5 +++++
 2 files changed, 6 insertions(+)

diff --git a/include/qemu/event_notifier.h b/include/qemu/event_notifier.h
index b79add035d..8a4ff308e1 100644
--- a/include/qemu/event_notifier.h
+++ b/include/qemu/event_notifier.h
@@ -38,6 +38,7 @@ int event_notifier_test_and_clear(EventNotifier *);
 #ifdef CONFIG_POSIX
 void event_notifier_init_fd(EventNotifier *, int fd);
 int event_notifier_get_fd(const EventNotifier *);
+int event_notifier_get_wfd(const EventNotifier *);
 #else
 HANDLE event_notifier_get_handle(EventNotifier *);
 #endif
diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c
index 8307013c5d..16294e98d4 100644
--- a/util/event_notifier-posix.c
+++ b/util/event_notifier-posix.c
@@ -99,6 +99,11 @@ int event_notifier_get_fd(const EventNotifier *e)
     return e->rfd;
 }
 
+int event_notifier_get_wfd(const EventNotifier *e)
+{
+    return e->wfd;
+}
+
 int event_notifier_set(EventNotifier *e)
 {
     static const uint64_t value = 1;
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v4 2/4] vhost: use wfd on functions setting vring call fd
  2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 1/4] event_notifier: add event_notifier_get_wfd() Sergio Lopez
@ 2022-03-04 10:08 ` Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 7+ messages in thread
From: Sergio Lopez @ 2022-03-04 10:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand, Eric Farman,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Sergio Lopez,
	Richard Henderson, Alex Williamson, Stefan Hajnoczi, Kevin Wolf,
	qemu-s390x, Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

When ioeventfd is emulated using qemu_pipe(), only EventNotifier's wfd
can be used for writing.

Use the recently introduced event_notifier_get_wfd() function to
obtain the fd that our peer must use to signal the vring.

Signed-off-by: Sergio Lopez <slp@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 hw/virtio/vhost.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c
index 7b03efccec..b643f42ea4 100644
--- a/hw/virtio/vhost.c
+++ b/hw/virtio/vhost.c
@@ -1287,7 +1287,7 @@ static int vhost_virtqueue_init(struct vhost_dev *dev,
         return r;
     }
 
-    file.fd = event_notifier_get_fd(&vq->masked_notifier);
+    file.fd = event_notifier_get_wfd(&vq->masked_notifier);
     r = dev->vhost_ops->vhost_set_vring_call(dev, &file);
     if (r) {
         VHOST_OPS_DEBUG(r, "vhost_set_vring_call failed");
@@ -1542,9 +1542,9 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n,
 
     if (mask) {
         assert(vdev->use_guest_notifier_mask);
-        file.fd = event_notifier_get_fd(&hdev->vqs[index].masked_notifier);
+        file.fd = event_notifier_get_wfd(&hdev->vqs[index].masked_notifier);
     } else {
-        file.fd = event_notifier_get_fd(virtio_queue_get_guest_notifier(vvq));
+        file.fd = event_notifier_get_wfd(virtio_queue_get_guest_notifier(vvq));
     }
 
     file.index = hdev->vhost_ops->vhost_get_vq_index(hdev, n);
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems
  2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 1/4] event_notifier: add event_notifier_get_wfd() Sergio Lopez
  2022-03-04 10:08 ` [PATCH v4 2/4] vhost: use wfd on functions setting vring call fd Sergio Lopez
@ 2022-03-04 10:08 ` Sergio Lopez
  2022-03-07  9:39   ` Thomas Huth
  2022-03-04 10:08 ` [PATCH v4 4/4] docs: vhost-user: add subsection for non-Linux platforms Sergio Lopez
  2022-03-07  9:25 ` [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Stefan Hajnoczi
  4 siblings, 1 reply; 7+ messages in thread
From: Sergio Lopez @ 2022-03-04 10:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand, Eric Farman,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Sergio Lopez,
	Richard Henderson, Alex Williamson, Stefan Hajnoczi, Kevin Wolf,
	qemu-s390x, Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

With the possibility of using a pipe pair via qemu_pipe() as a
replacement on operating systems that doesn't support eventfd,
vhost-user can also work on all POSIX systems.

This change allows enabling vhost-user on all non-Windows platforms
and makes libvhost_user (which still depends on eventfd) a linux-only
feature.

Signed-off-by: Sergio Lopez <slp@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 configure   | 4 ++--
 meson.build | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/configure b/configure
index c56ed53ee3..daccf4be7c 100755
--- a/configure
+++ b/configure
@@ -1659,8 +1659,8 @@ fi
 # vhost interdependencies and host support
 
 # vhost backends
-if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
-  error_exit "vhost-user is only available on Linux"
+if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
+  error_exit "vhost-user is not available on Windows"
 fi
 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
diff --git a/meson.build b/meson.build
index 8df40bfac4..f2bc439c30 100644
--- a/meson.build
+++ b/meson.build
@@ -2701,7 +2701,7 @@ if have_system or have_user
 endif
 
 vhost_user = not_found
-if 'CONFIG_VHOST_USER' in config_host
+if targetos == 'linux' and 'CONFIG_VHOST_USER' in config_host
   libvhost_user = subproject('libvhost-user')
   vhost_user = libvhost_user.get_variable('vhost_user_dep')
 endif
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH v4 4/4] docs: vhost-user: add subsection for non-Linux platforms
  2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
                   ` (2 preceding siblings ...)
  2022-03-04 10:08 ` [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
@ 2022-03-04 10:08 ` Sergio Lopez
  2022-03-07  9:25 ` [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Stefan Hajnoczi
  4 siblings, 0 replies; 7+ messages in thread
From: Sergio Lopez @ 2022-03-04 10:08 UTC (permalink / raw)
  To: qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand, Eric Farman,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Sergio Lopez,
	Richard Henderson, Alex Williamson, Stefan Hajnoczi, Kevin Wolf,
	qemu-s390x, Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

Add a section explaining how vhost-user is supported on platforms
other than Linux.

Signed-off-by: Sergio Lopez <slp@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
---
 docs/interop/vhost-user.rst | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst
index edc3ad84a3..4dbc84fd00 100644
--- a/docs/interop/vhost-user.rst
+++ b/docs/interop/vhost-user.rst
@@ -38,6 +38,26 @@ conventions <backend_conventions>`.
 *Master* and *slave* can be either a client (i.e. connecting) or
 server (listening) in the socket communication.
 
+Support for platforms other than Linux
+--------------------------------------
+
+While vhost-user was initially developed targeting Linux, nowadays it
+is supported on any platform that provides the following features:
+
+- A way for requesting shared memory represented by a file descriptor
+  so it can be passed over a UNIX domain socket and then mapped by the
+  other process.
+
+- AF_UNIX sockets with SCM_RIGHTS, so QEMU and the other process can
+  exchange messages through it, including ancillary data when needed.
+
+- Either eventfd or pipe/pipe2. On platforms where eventfd is not
+  available, QEMU will automatically fall back to pipe2 or, as a last
+  resort, pipe. Each file descriptor will be used for receiving or
+  sending events by reading or writing (respectively) an 8-byte value
+  to the corresponding it. The 8-value itself has no meaning and
+  should not be interpreted.
+
 Message Specification
 =====================
 
-- 
2.35.1



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH v4 0/4] Enable vhost-user to be used on BSD systems
  2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
                   ` (3 preceding siblings ...)
  2022-03-04 10:08 ` [PATCH v4 4/4] docs: vhost-user: add subsection for non-Linux platforms Sergio Lopez
@ 2022-03-07  9:25 ` Stefan Hajnoczi
  4 siblings, 0 replies; 7+ messages in thread
From: Stefan Hajnoczi @ 2022-03-07  9:25 UTC (permalink / raw)
  To: Sergio Lopez
  Cc: Fam Zheng, John G Johnson, Matthew Rosato, David Hildenbrand,
	Eric Farman, Jagannathan Raman, kvm, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Thomas Huth, Richard Henderson,
	qemu-devel, Alex Williamson, Kevin Wolf, qemu-s390x,
	Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

[-- Attachment #1: Type: text/plain, Size: 1899 bytes --]

On Fri, Mar 04, 2022 at 11:08:50AM +0100, Sergio Lopez wrote:
> Since QEMU is already able to emulate ioeventfd using pipefd, we're already
> pretty close to supporting vhost-user on non-Linux systems.
> 
> This two patches bridge the gap by:
> 
> 1. Adding a new event_notifier_get_wfd() to return wfd on the places where
>    the peer is expected to write to the notifier.
> 
> 2. Modifying the build system to it allows enabling vhost-user on BSD.
> 
> v1->v2:
>   - Drop: "Allow returning EventNotifier's wfd" (Alex Williamson)
>   - Add: "event_notifier: add event_notifier_get_wfd()" (Alex Williamson)
>   - Add: "vhost: use wfd on functions setting vring call fd"
>   - Rename: "Allow building vhost-user in BSD" to "configure, meson: allow
>     enabling vhost-user on all POSIX systems"
>   - Instead of making possible enabling vhost-user on Linux and BSD systems,
>     allow enabling it on all non-Windows platforms. (Paolo Bonzini)
> 
> v2->v3:
>   - Add a section to docs/interop/vhost-user.rst explaining how vhost-user
>     is supported on non-Linux platforms. (Stefan Hajnoczi)
> 
> v3->v4:
>   - Some documentation fixes. (Stefan Hajnoczi)
>   - Pick up Reviewed-by tags.
> 
> Sergio Lopez (4):
>   event_notifier: add event_notifier_get_wfd()
>   vhost: use wfd on functions setting vring call fd
>   configure, meson: allow enabling vhost-user on all POSIX systems
>   docs: vhost-user: add subsection for non-Linux platforms
> 
>  configure                     |  4 ++--
>  docs/interop/vhost-user.rst   | 20 ++++++++++++++++++++
>  hw/virtio/vhost.c             |  6 +++---
>  include/qemu/event_notifier.h |  1 +
>  meson.build                   |  2 +-
>  util/event_notifier-posix.c   |  5 +++++
>  6 files changed, 32 insertions(+), 6 deletions(-)
> 
> -- 
> 2.35.1
> 
> 

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems
  2022-03-04 10:08 ` [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
@ 2022-03-07  9:39   ` Thomas Huth
  0 siblings, 0 replies; 7+ messages in thread
From: Thomas Huth @ 2022-03-07  9:39 UTC (permalink / raw)
  To: Sergio Lopez, qemu-devel
  Cc: Fam Zheng, John G Johnson, kvm, David Hildenbrand,
	Jagannathan Raman, Matthew Rosato, qemu-block,
	Michael S. Tsirkin, Elena Ufimtseva, Halil Pasic,
	Christian Borntraeger, vgoyal, Eric Farman, Richard Henderson,
	Alex Williamson, Stefan Hajnoczi, Kevin Wolf, qemu-s390x,
	Cornelia Huck, Philippe Mathieu-Daudé,
	Hanna Reitz, Paolo Bonzini

On 04/03/2022 11.08, Sergio Lopez wrote:
> With the possibility of using a pipe pair via qemu_pipe() as a
> replacement on operating systems that doesn't support eventfd,
> vhost-user can also work on all POSIX systems.
> 
> This change allows enabling vhost-user on all non-Windows platforms
> and makes libvhost_user (which still depends on eventfd) a linux-only
> feature.
> 
> Signed-off-by: Sergio Lopez <slp@redhat.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
> ---
>   configure   | 4 ++--
>   meson.build | 2 +-
>   2 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/configure b/configure
> index c56ed53ee3..daccf4be7c 100755
> --- a/configure
> +++ b/configure
> @@ -1659,8 +1659,8 @@ fi
>   # vhost interdependencies and host support
>   
>   # vhost backends
> -if test "$vhost_user" = "yes" && test "$linux" != "yes"; then
> -  error_exit "vhost-user is only available on Linux"
> +if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
> +  error_exit "vhost-user is not available on Windows"
>   fi
>   test "$vhost_vdpa" = "" && vhost_vdpa=$linux
>   if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
> diff --git a/meson.build b/meson.build
> index 8df40bfac4..f2bc439c30 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -2701,7 +2701,7 @@ if have_system or have_user
>   endif
>   
>   vhost_user = not_found
> -if 'CONFIG_VHOST_USER' in config_host
> +if targetos == 'linux' and 'CONFIG_VHOST_USER' in config_host
>     libvhost_user = subproject('libvhost-user')
>     vhost_user = libvhost_user.get_variable('vhost_user_dep')
>   endif

Reviewed-by: Thomas Huth <thuth@redhat.com>



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-03-07  9:43 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-04 10:08 [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Sergio Lopez
2022-03-04 10:08 ` [PATCH v4 1/4] event_notifier: add event_notifier_get_wfd() Sergio Lopez
2022-03-04 10:08 ` [PATCH v4 2/4] vhost: use wfd on functions setting vring call fd Sergio Lopez
2022-03-04 10:08 ` [PATCH v4 3/4] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
2022-03-07  9:39   ` Thomas Huth
2022-03-04 10:08 ` [PATCH v4 4/4] docs: vhost-user: add subsection for non-Linux platforms Sergio Lopez
2022-03-07  9:25 ` [PATCH v4 0/4] Enable vhost-user to be used on BSD systems Stefan Hajnoczi

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).