* [PATCH v2 1/3] event_notifier: add event_notifier_get_wfd()
2022-03-02 18:03 [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Sergio Lopez
@ 2022-03-02 18:03 ` Sergio Lopez
2022-03-02 18:03 ` [PATCH v2 2/3] vhost: use wfd on functions setting vring call fd Sergio Lopez
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Sergio Lopez @ 2022-03-02 18:03 UTC (permalink / raw)
To: qemu-devel
Cc: Elena Ufimtseva, John G Johnson, kvm, David Hildenbrand,
Eric Farman, Alex Williamson, Matthew Rosato, qemu-block,
Michael S. Tsirkin, Halil Pasic, Christian Borntraeger, vgoyal,
Thomas Huth, Sergio Lopez, Richard Henderson, qemu-s390x,
Stefan Hajnoczi, Jagannathan Raman, Kevin Wolf, Cornelia Huck,
Philippe Mathieu-Daudé, Hanna Reitz, Paolo Bonzini,
Fam Zheng
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>
---
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] 5+ messages in thread* [PATCH v2 2/3] vhost: use wfd on functions setting vring call fd
2022-03-02 18:03 [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Sergio Lopez
2022-03-02 18:03 ` [PATCH v2 1/3] event_notifier: add event_notifier_get_wfd() Sergio Lopez
@ 2022-03-02 18:03 ` Sergio Lopez
2022-03-02 18:03 ` [PATCH v2 3/3] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
2022-03-03 9:44 ` [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Sergio Lopez @ 2022-03-02 18:03 UTC (permalink / raw)
To: qemu-devel
Cc: Elena Ufimtseva, John G Johnson, kvm, David Hildenbrand,
Eric Farman, Alex Williamson, Matthew Rosato, qemu-block,
Michael S. Tsirkin, Halil Pasic, Christian Borntraeger, vgoyal,
Thomas Huth, Sergio Lopez, Richard Henderson, qemu-s390x,
Stefan Hajnoczi, Jagannathan Raman, Kevin Wolf, Cornelia Huck,
Philippe Mathieu-Daudé, Hanna Reitz, Paolo Bonzini,
Fam Zheng
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>
---
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] 5+ messages in thread* [PATCH v2 3/3] configure, meson: allow enabling vhost-user on all POSIX systems
2022-03-02 18:03 [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Sergio Lopez
2022-03-02 18:03 ` [PATCH v2 1/3] event_notifier: add event_notifier_get_wfd() Sergio Lopez
2022-03-02 18:03 ` [PATCH v2 2/3] vhost: use wfd on functions setting vring call fd Sergio Lopez
@ 2022-03-02 18:03 ` Sergio Lopez
2022-03-03 9:44 ` [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Sergio Lopez @ 2022-03-02 18:03 UTC (permalink / raw)
To: qemu-devel
Cc: Elena Ufimtseva, John G Johnson, kvm, David Hildenbrand,
Eric Farman, Alex Williamson, Matthew Rosato, qemu-block,
Michael S. Tsirkin, Halil Pasic, Christian Borntraeger, vgoyal,
Thomas Huth, Sergio Lopez, Richard Henderson, qemu-s390x,
Stefan Hajnoczi, Jagannathan Raman, Kevin Wolf, Cornelia Huck,
Philippe Mathieu-Daudé, Hanna Reitz, Paolo Bonzini,
Fam Zheng
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>
---
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] 5+ messages in thread* Re: [PATCH v2 0/3] Enable vhost-user to be used on BSD systems
2022-03-02 18:03 [PATCH v2 0/3] Enable vhost-user to be used on BSD systems Sergio Lopez
` (2 preceding siblings ...)
2022-03-02 18:03 ` [PATCH v2 3/3] configure, meson: allow enabling vhost-user on all POSIX systems Sergio Lopez
@ 2022-03-03 9:44 ` Stefan Hajnoczi
3 siblings, 0 replies; 5+ messages in thread
From: Stefan Hajnoczi @ 2022-03-03 9:44 UTC (permalink / raw)
To: Sergio Lopez
Cc: Elena Ufimtseva, John G Johnson, kvm, David Hildenbrand,
Eric Farman, qemu-devel, Alex Williamson, Matthew Rosato,
qemu-block, Michael S. Tsirkin, Halil Pasic,
Christian Borntraeger, vgoyal, Thomas Huth, Richard Henderson,
qemu-s390x, Jagannathan Raman, Kevin Wolf, Cornelia Huck,
Philippe Mathieu-Daudé, Hanna Reitz, Paolo Bonzini,
Fam Zheng
[-- Attachment #1: Type: text/plain, Size: 640 bytes --]
On Wed, Mar 02, 2022 at 07:03:15PM +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.
Please update the vhost-user protocol specification. It mentions eventfd
and there needs to be a note explaining how pipes are used instead on
non-Linux platforms.
Stefan
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 484 bytes --]
^ permalink raw reply [flat|nested] 5+ messages in thread