* [PATCH v2 0/4] virtio: Refactor vhost input stub
@ 2023-11-13 19:02 Leo Yan
2023-11-13 19:02 ` [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base Leo Yan
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Leo Yan @ 2023-11-13 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Marc-André Lureau, Leo Yan
This series is to refactor vhost stub vhost-user-input.
Since vhost input stub requires set_config() callback for communication
event configurations between the backend and the guest, patch 01 is a
preparison for support set_config() callback in vhost-user-base.
The patch 02 is to add documentation for vhost-user-input.
The patch 03 is to move virtio input stub from the input folder to the
virtio folder.
The patch 04 derives vhost-user-input from vhost-user-base. We reuse
the common code from vhhost-user-base as possible and the input stub is
simplized significantly.
This patch set has been tested with the backend daemon:
# ./build/contrib/vhost-user-input/vhost-user-input \
-p /dev/input/event20 -s /tmp/input.sock
The series is based on "[PATCH v8 0/7] virtio: cleanup
vhost-user-generic and reduce c&p" which introduces vhost-user-base.
Based-on: <20231107180752.3458672-1-alex.bennee@linaro.org>
Changes from v1:
- Fixed typo in vhost-user-input.rst.
- Updated MAINTAINERS for new added input document and
changing folder for vhost-user-input.c.
Leo Yan (4):
hw/virtio: Support set_config() callback in vhost-user-base
docs/system: Add vhost-user-input documentation
hw/virtio: Move vhost-user-input into virtio folder
hw/virtio: derive vhost-user-input from vhost-user-base
MAINTAINERS | 3 +-
docs/system/devices/vhost-user-input.rst | 44 ++++++++
docs/system/devices/vhost-user.rst | 2 +-
hw/input/meson.build | 1 -
hw/input/vhost-user-input.c | 136 -----------------------
hw/virtio/meson.build | 4 +-
hw/virtio/vhost-user-base.c | 17 +++
hw/virtio/vhost-user-input-pci.c | 3 -
hw/virtio/vhost-user-input.c | 58 ++++++++++
include/hw/virtio/virtio-input.h | 6 +-
10 files changed, 128 insertions(+), 146 deletions(-)
create mode 100644 docs/system/devices/vhost-user-input.rst
delete mode 100644 hw/input/vhost-user-input.c
create mode 100644 hw/virtio/vhost-user-input.c
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base
2023-11-13 19:02 [PATCH v2 0/4] virtio: Refactor vhost input stub Leo Yan
@ 2023-11-13 19:02 ` Leo Yan
2023-11-14 9:44 ` Marc-André Lureau
2023-11-13 19:02 ` [PATCH v2 2/4] docs/system: Add vhost-user-input documentation Leo Yan
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Leo Yan @ 2023-11-13 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Marc-André Lureau, Leo Yan
The Virtio input device invokes set_config() callback for retrieving
the event configuration info, but the callback is not supported in
vhost-user-base.
This patch adds support set_config() callback in vhost-user-base.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
hw/virtio/vhost-user-base.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c
index 78cfa9a5bb..a83167191e 100644
--- a/hw/virtio/vhost-user-base.c
+++ b/hw/virtio/vhost-user-base.c
@@ -140,6 +140,22 @@ static void vub_get_config(VirtIODevice *vdev, uint8_t *config)
}
}
+static void vub_set_config(VirtIODevice *vdev, const uint8_t *config_data)
+{
+ VHostUserBase *vub = VHOST_USER_BASE(vdev);
+ int ret;
+
+ g_assert(vub->config_size && vub->vhost_user.supports_config == true);
+
+ ret = vhost_dev_set_config(&vub->vhost_dev, config_data,
+ 0, vub->config_size,
+ VHOST_SET_CONFIG_TYPE_FRONTEND);
+ if (ret) {
+ error_report("vhost guest set device config space failed: %d", ret);
+ return;
+ }
+}
+
/*
* When the daemon signals an update to the config we just need to
* signal the guest as we re-read the config on demand above.
@@ -337,6 +353,7 @@ static void vub_class_init(ObjectClass *klass, void *data)
vdc->unrealize = vub_device_unrealize;
vdc->get_features = vub_get_features;
vdc->get_config = vub_get_config;
+ vdc->set_config = vub_set_config;
vdc->set_status = vub_set_status;
}
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/4] docs/system: Add vhost-user-input documentation
2023-11-13 19:02 [PATCH v2 0/4] virtio: Refactor vhost input stub Leo Yan
2023-11-13 19:02 ` [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base Leo Yan
@ 2023-11-13 19:02 ` Leo Yan
2023-11-14 9:54 ` Marc-André Lureau
2023-11-13 19:02 ` [PATCH v2 3/4] hw/virtio: Move vhost-user-input into virtio folder Leo Yan
2023-11-13 19:02 ` [PATCH v2 4/4] hw/virtio: derive vhost-user-input from vhost-user-base Leo Yan
3 siblings, 1 reply; 8+ messages in thread
From: Leo Yan @ 2023-11-13 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Marc-André Lureau, Leo Yan
This adds basic documentation for vhost-user-input.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
MAINTAINERS | 1 +
docs/system/devices/vhost-user-input.rst | 44 ++++++++++++++++++++++++
docs/system/devices/vhost-user.rst | 2 +-
3 files changed, 46 insertions(+), 1 deletion(-)
create mode 100644 docs/system/devices/vhost-user-input.rst
diff --git a/MAINTAINERS b/MAINTAINERS
index 86c649784e..ef72c6d512 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2233,6 +2233,7 @@ L: virtio-fs@redhat.com
virtio-input
M: Gerd Hoffmann <kraxel@redhat.com>
S: Odd Fixes
+F: docs/system/devices/vhost-user-input.rst
F: hw/input/vhost-user-input.c
F: hw/input/virtio-input*.c
F: include/hw/virtio/virtio-input.h
diff --git a/docs/system/devices/vhost-user-input.rst b/docs/system/devices/vhost-user-input.rst
new file mode 100644
index 0000000000..4ff9dd4b27
--- /dev/null
+++ b/docs/system/devices/vhost-user-input.rst
@@ -0,0 +1,44 @@
+.. _vhost_user_input:
+
+QEMU vhost-user-input - Input emulation
+=======================================
+
+This document describes the setup and usage of the Virtio input device.
+The Virtio input device is a paravirtualized device for input events.
+
+Description
+-----------
+
+The vhost-user-input device implementation was designed to work with a daemon
+polling on input devices and passes input events to the guest.
+
+QEMU provides a backend implementation in contrib/vhost-user-input.
+
+Linux kernel support
+--------------------
+
+Virtio input requires a guest Linux kernel built with the
+``CONFIG_VIRTIO_INPUT`` option.
+
+Examples
+--------
+
+The backend daemon should be started first:
+
+::
+
+ host# vhost-user-input --socket-path=input.sock \
+ --evdev-path=/dev/input/event17
+
+The QEMU invocation needs to create a chardev socket to communicate with the
+backend daemon and share memory with the guest over a memfd.
+
+::
+
+ host# qemu-system \
+ -chardev socket,path=/tmp/input.sock,id=mouse0 \
+ -device vhost-user-input-pci,chardev=mouse0 \
+ -m 4096 \
+ -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on \
+ -numa node,memdev=mem \
+ ...
diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
index c6afc4836f..75b40f08c6 100644
--- a/docs/system/devices/vhost-user.rst
+++ b/docs/system/devices/vhost-user.rst
@@ -42,7 +42,7 @@ platform details for what sort of virtio bus to use.
- See https://github.com/rust-vmm/vhost-device
* - vhost-user-input
- Generic input driver
- - See contrib/vhost-user-input
+ - :ref:`vhost_user_input`
* - vhost-user-rng
- Entropy driver
- :ref:`vhost_user_rng`
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/4] hw/virtio: Move vhost-user-input into virtio folder
2023-11-13 19:02 [PATCH v2 0/4] virtio: Refactor vhost input stub Leo Yan
2023-11-13 19:02 ` [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base Leo Yan
2023-11-13 19:02 ` [PATCH v2 2/4] docs/system: Add vhost-user-input documentation Leo Yan
@ 2023-11-13 19:02 ` Leo Yan
2023-11-13 19:02 ` [PATCH v2 4/4] hw/virtio: derive vhost-user-input from vhost-user-base Leo Yan
3 siblings, 0 replies; 8+ messages in thread
From: Leo Yan @ 2023-11-13 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Marc-André Lureau, Leo Yan
vhost-user-input is in the input folder. On the other hand, the folder
'hw/virtio' maintains other virtio stubs (e.g. I2C, RNG, GPIO, etc).
This patch moves vhost-user-input into the virtio folder for better code
organization. No functionality change.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
MAINTAINERS | 2 +-
hw/input/meson.build | 1 -
hw/virtio/meson.build | 4 +++-
hw/{input => virtio}/vhost-user-input.c | 0
4 files changed, 4 insertions(+), 3 deletions(-)
rename hw/{input => virtio}/vhost-user-input.c (100%)
diff --git a/MAINTAINERS b/MAINTAINERS
index ef72c6d512..b0b6db38c7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -2234,8 +2234,8 @@ virtio-input
M: Gerd Hoffmann <kraxel@redhat.com>
S: Odd Fixes
F: docs/system/devices/vhost-user-input.rst
-F: hw/input/vhost-user-input.c
F: hw/input/virtio-input*.c
+F: hw/virtio/vhost-user-input.c
F: include/hw/virtio/virtio-input.h
F: contrib/vhost-user-input/*
diff --git a/hw/input/meson.build b/hw/input/meson.build
index 640556bbbc..3cc8ab85f0 100644
--- a/hw/input/meson.build
+++ b/hw/input/meson.build
@@ -11,7 +11,6 @@ system_ss.add(when: 'CONFIG_TSC2005', if_true: files('tsc2005.c'))
system_ss.add(when: 'CONFIG_VIRTIO_INPUT', if_true: files('virtio-input.c'))
system_ss.add(when: 'CONFIG_VIRTIO_INPUT', if_true: files('virtio-input-hid.c'))
system_ss.add(when: 'CONFIG_VIRTIO_INPUT_HOST', if_true: files('virtio-input-host.c'))
-system_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))
system_ss.add(when: 'CONFIG_PXA2XX', if_true: files('pxa2xx_keypad.c'))
system_ss.add(when: 'CONFIG_TSC210X', if_true: files('tsc210x.c'))
diff --git a/hw/virtio/meson.build b/hw/virtio/meson.build
index 118d4d4da7..c924afcafc 100644
--- a/hw/virtio/meson.build
+++ b/hw/virtio/meson.build
@@ -25,6 +25,7 @@ if have_vhost
system_virtio_ss.add(when: 'CONFIG_VHOST_USER_I2C', if_true: files('vhost-user-i2c.c'))
system_virtio_ss.add(when: 'CONFIG_VHOST_USER_RNG', if_true: files('vhost-user-rng.c'))
system_virtio_ss.add(when: 'CONFIG_VHOST_USER_SND', if_true: files('vhost-user-snd.c'))
+ system_virtio_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input.c'))
# PCI Stubs
system_virtio_ss.add(when: 'CONFIG_VIRTIO_PCI', if_true: files('vhost-user-device-pci.c'))
@@ -36,6 +37,8 @@ if have_vhost
if_true: files('vhost-user-rng-pci.c'))
system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_SND'],
if_true: files('vhost-user-snd-pci.c'))
+ system_virtio_ss.add(when: ['CONFIG_VIRTIO_PCI', 'CONFIG_VHOST_USER_INPUT'],
+ if_true: files('vhost-user-input-pci.c'))
endif
if have_vhost_vdpa
system_virtio_ss.add(files('vhost-vdpa.c'))
@@ -59,7 +62,6 @@ virtio_pci_ss = ss.source_set()
virtio_pci_ss.add(when: 'CONFIG_VHOST_VSOCK', if_true: files('vhost-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_VSOCK', if_true: files('vhost-user-vsock-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_BLK', if_true: files('vhost-user-blk-pci.c'))
-virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_INPUT', if_true: files('vhost-user-input-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_SCSI', if_true: files('vhost-user-scsi-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_SCSI', if_true: files('vhost-scsi-pci.c'))
virtio_pci_ss.add(when: 'CONFIG_VHOST_USER_FS', if_true: files('vhost-user-fs-pci.c'))
diff --git a/hw/input/vhost-user-input.c b/hw/virtio/vhost-user-input.c
similarity index 100%
rename from hw/input/vhost-user-input.c
rename to hw/virtio/vhost-user-input.c
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 4/4] hw/virtio: derive vhost-user-input from vhost-user-base
2023-11-13 19:02 [PATCH v2 0/4] virtio: Refactor vhost input stub Leo Yan
` (2 preceding siblings ...)
2023-11-13 19:02 ` [PATCH v2 3/4] hw/virtio: Move vhost-user-input into virtio folder Leo Yan
@ 2023-11-13 19:02 ` Leo Yan
3 siblings, 0 replies; 8+ messages in thread
From: Leo Yan @ 2023-11-13 19:02 UTC (permalink / raw)
To: qemu-devel
Cc: Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Marc-André Lureau, Leo Yan
This patch derives vhost-user-input from vhost-user-base class, so make
the input stub as a simpler boilerplate wrapper.
With the refactoring, vhost-user-input adds the property 'chardev', this
leads to conflict with the vhost-user-input-pci adds the same property.
To resolve the error, remove the duplicate property from
vhost-user-input-pci.
Signed-off-by: Leo Yan <leo.yan@linaro.org>
---
hw/virtio/vhost-user-input-pci.c | 3 -
hw/virtio/vhost-user-input.c | 114 +++++--------------------------
include/hw/virtio/virtio-input.h | 6 +-
3 files changed, 21 insertions(+), 102 deletions(-)
diff --git a/hw/virtio/vhost-user-input-pci.c b/hw/virtio/vhost-user-input-pci.c
index b858898a36..3f4761ce88 100644
--- a/hw/virtio/vhost-user-input-pci.c
+++ b/hw/virtio/vhost-user-input-pci.c
@@ -30,9 +30,6 @@ static void vhost_user_input_pci_instance_init(Object *obj)
virtio_instance_init_common(obj, &dev->vhi, sizeof(dev->vhi),
TYPE_VHOST_USER_INPUT);
-
- object_property_add_alias(obj, "chardev",
- OBJECT(&dev->vhi), "chardev");
}
static const VirtioPCIDeviceTypeInfo vhost_user_input_pci_info = {
diff --git a/hw/virtio/vhost-user-input.c b/hw/virtio/vhost-user-input.c
index 4ee3542106..bedec0468c 100644
--- a/hw/virtio/vhost-user-input.c
+++ b/hw/virtio/vhost-user-input.c
@@ -5,83 +5,25 @@
*/
#include "qemu/osdep.h"
-#include "qemu/error-report.h"
-#include "qapi/error.h"
-
#include "hw/virtio/virtio-input.h"
-static int vhost_input_config_change(struct vhost_dev *dev)
-{
- error_report("vhost-user-input: unhandled backend config change");
- return -1;
-}
-
-static const VhostDevConfigOps config_ops = {
- .vhost_dev_config_notifier = vhost_input_config_change,
+static Property vinput_properties[] = {
+ DEFINE_PROP_CHR("chardev", VHostUserBase, chardev),
+ DEFINE_PROP_END_OF_LIST(),
};
-static void vhost_input_realize(DeviceState *dev, Error **errp)
+static void vinput_realize(DeviceState *dev, Error **errp)
{
- VHostUserInput *vhi = VHOST_USER_INPUT(dev);
- VirtIOInput *vinput = VIRTIO_INPUT(dev);
- VirtIODevice *vdev = VIRTIO_DEVICE(dev);
+ VHostUserBase *vub = VHOST_USER_BASE(dev);
+ VHostUserBaseClass *vubc = VHOST_USER_BASE_GET_CLASS(dev);
- vhost_dev_set_config_notifier(&vhi->vhost->dev, &config_ops);
- vinput->cfg_size = sizeof_field(virtio_input_config, u);
- if (vhost_user_backend_dev_init(vhi->vhost, vdev, 2, errp) == -1) {
- return;
- }
-}
+ /* Fixed for input device */
+ vub->virtio_id = VIRTIO_ID_INPUT;
+ vub->num_vqs = 2;
+ vub->vq_size = 4;
+ vub->config_size = sizeof(virtio_input_config);
-static void vhost_input_change_active(VirtIOInput *vinput)
-{
- VHostUserInput *vhi = VHOST_USER_INPUT(vinput);
-
- if (vinput->active) {
- vhost_user_backend_start(vhi->vhost);
- } else {
- vhost_user_backend_stop(vhi->vhost);
- }
-}
-
-static void vhost_input_get_config(VirtIODevice *vdev, uint8_t *config_data)
-{
- VirtIOInput *vinput = VIRTIO_INPUT(vdev);
- VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
- Error *local_err = NULL;
- int ret;
-
- memset(config_data, 0, vinput->cfg_size);
-
- ret = vhost_dev_get_config(&vhi->vhost->dev, config_data, vinput->cfg_size,
- &local_err);
- if (ret) {
- error_report_err(local_err);
- return;
- }
-}
-
-static void vhost_input_set_config(VirtIODevice *vdev,
- const uint8_t *config_data)
-{
- VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
- int ret;
-
- ret = vhost_dev_set_config(&vhi->vhost->dev, config_data,
- 0, sizeof(virtio_input_config),
- VHOST_SET_CONFIG_TYPE_FRONTEND);
- if (ret) {
- error_report("vhost-user-input: set device config space failed");
- return;
- }
-
- virtio_notify_config(vdev);
-}
-
-static struct vhost_dev *vhost_input_get_vhost(VirtIODevice *vdev)
-{
- VHostUserInput *vhi = VHOST_USER_INPUT(vdev);
- return &vhi->vhost->dev;
+ vubc->parent_realize(dev, errp);
}
static const VMStateDescription vmstate_vhost_input = {
@@ -91,40 +33,20 @@ static const VMStateDescription vmstate_vhost_input = {
static void vhost_input_class_init(ObjectClass *klass, void *data)
{
- VirtIOInputClass *vic = VIRTIO_INPUT_CLASS(klass);
- VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass);
+ VHostUserBaseClass *vubc = VHOST_USER_BASE_CLASS(klass);
DeviceClass *dc = DEVICE_CLASS(klass);
dc->vmsd = &vmstate_vhost_input;
- vdc->get_config = vhost_input_get_config;
- vdc->set_config = vhost_input_set_config;
- vdc->get_vhost = vhost_input_get_vhost;
- vic->realize = vhost_input_realize;
- vic->change_active = vhost_input_change_active;
-}
-
-static void vhost_input_init(Object *obj)
-{
- VHostUserInput *vhi = VHOST_USER_INPUT(obj);
-
- vhi->vhost = VHOST_USER_BACKEND(object_new(TYPE_VHOST_USER_BACKEND));
- object_property_add_alias(obj, "chardev",
- OBJECT(vhi->vhost), "chardev");
-}
-
-static void vhost_input_finalize(Object *obj)
-{
- VHostUserInput *vhi = VHOST_USER_INPUT(obj);
-
- object_unref(OBJECT(vhi->vhost));
+ device_class_set_props(dc, vinput_properties);
+ device_class_set_parent_realize(dc, vinput_realize,
+ &vubc->parent_realize);
+ set_bit(DEVICE_CATEGORY_INPUT, dc->categories);
}
static const TypeInfo vhost_input_info = {
.name = TYPE_VHOST_USER_INPUT,
- .parent = TYPE_VIRTIO_INPUT,
+ .parent = TYPE_VHOST_USER_BASE,
.instance_size = sizeof(VHostUserInput),
- .instance_init = vhost_input_init,
- .instance_finalize = vhost_input_finalize,
.class_init = vhost_input_class_init,
};
diff --git a/include/hw/virtio/virtio-input.h b/include/hw/virtio/virtio-input.h
index a6c9703644..e69c0aeca3 100644
--- a/include/hw/virtio/virtio-input.h
+++ b/include/hw/virtio/virtio-input.h
@@ -1,6 +1,8 @@
#ifndef QEMU_VIRTIO_INPUT_H
#define QEMU_VIRTIO_INPUT_H
+#include "hw/virtio/vhost-user.h"
+#include "hw/virtio/vhost-user-base.h"
#include "ui/input.h"
#include "sysemu/vhost-user-backend.h"
@@ -97,9 +99,7 @@ struct VirtIOInputHost {
};
struct VHostUserInput {
- VirtIOInput parent_obj;
-
- VhostUserBackend *vhost;
+ VHostUserBase parent_obj;
};
void virtio_input_send(VirtIOInput *vinput, virtio_input_event *event);
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base
2023-11-13 19:02 ` [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base Leo Yan
@ 2023-11-14 9:44 ` Marc-André Lureau
0 siblings, 0 replies; 8+ messages in thread
From: Marc-André Lureau @ 2023-11-14 9:44 UTC (permalink / raw)
To: Leo Yan
Cc: qemu-devel, Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis
On Mon, Nov 13, 2023 at 11:04 PM Leo Yan <leo.yan@linaro.org> wrote:
>
> The Virtio input device invokes set_config() callback for retrieving
> the event configuration info, but the callback is not supported in
> vhost-user-base.
>
> This patch adds support set_config() callback in vhost-user-base.
>
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
> ---
> hw/virtio/vhost-user-base.c | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
>
> diff --git a/hw/virtio/vhost-user-base.c b/hw/virtio/vhost-user-base.c
> index 78cfa9a5bb..a83167191e 100644
> --- a/hw/virtio/vhost-user-base.c
> +++ b/hw/virtio/vhost-user-base.c
> @@ -140,6 +140,22 @@ static void vub_get_config(VirtIODevice *vdev, uint8_t *config)
> }
> }
>
> +static void vub_set_config(VirtIODevice *vdev, const uint8_t *config_data)
> +{
> + VHostUserBase *vub = VHOST_USER_BASE(vdev);
> + int ret;
> +
> + g_assert(vub->config_size && vub->vhost_user.supports_config == true);
> +
> + ret = vhost_dev_set_config(&vub->vhost_dev, config_data,
> + 0, vub->config_size,
> + VHOST_SET_CONFIG_TYPE_FRONTEND);
> + if (ret) {
> + error_report("vhost guest set device config space failed: %d", ret);
> + return;
> + }
> +}
> +
> /*
> * When the daemon signals an update to the config we just need to
> * signal the guest as we re-read the config on demand above.
> @@ -337,6 +353,7 @@ static void vub_class_init(ObjectClass *klass, void *data)
> vdc->unrealize = vub_device_unrealize;
> vdc->get_features = vub_get_features;
> vdc->get_config = vub_get_config;
> + vdc->set_config = vub_set_config;
> vdc->set_status = vub_set_status;
> }
>
> --
> 2.34.1
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/4] docs/system: Add vhost-user-input documentation
2023-11-13 19:02 ` [PATCH v2 2/4] docs/system: Add vhost-user-input documentation Leo Yan
@ 2023-11-14 9:54 ` Marc-André Lureau
2023-11-14 14:25 ` Leo Yan
0 siblings, 1 reply; 8+ messages in thread
From: Marc-André Lureau @ 2023-11-14 9:54 UTC (permalink / raw)
To: Leo Yan
Cc: qemu-devel, Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis
Hi
On Mon, Nov 13, 2023 at 11:04 PM Leo Yan <leo.yan@linaro.org> wrote:
>
> This adds basic documentation for vhost-user-input.
>
> Signed-off-by: Leo Yan <leo.yan@linaro.org>
> ---
> MAINTAINERS | 1 +
> docs/system/devices/vhost-user-input.rst | 44 ++++++++++++++++++++++++
> docs/system/devices/vhost-user.rst | 2 +-
> 3 files changed, 46 insertions(+), 1 deletion(-)
> create mode 100644 docs/system/devices/vhost-user-input.rst
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 86c649784e..ef72c6d512 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -2233,6 +2233,7 @@ L: virtio-fs@redhat.com
> virtio-input
> M: Gerd Hoffmann <kraxel@redhat.com>
> S: Odd Fixes
> +F: docs/system/devices/vhost-user-input.rst
> F: hw/input/vhost-user-input.c
> F: hw/input/virtio-input*.c
> F: include/hw/virtio/virtio-input.h
> diff --git a/docs/system/devices/vhost-user-input.rst b/docs/system/devices/vhost-user-input.rst
You need to include the file in the toctree, in docs/system/device-emulation.rst
> new file mode 100644
> index 0000000000..4ff9dd4b27
> --- /dev/null
> +++ b/docs/system/devices/vhost-user-input.rst
> @@ -0,0 +1,44 @@
> +.. _vhost_user_input:
> +
> +QEMU vhost-user-input - Input emulation
> +=======================================
> +
> +This document describes the setup and usage of the Virtio input device.
> +The Virtio input device is a paravirtualized device for input events.
> +
> +Description
> +-----------
> +
> +The vhost-user-input device implementation was designed to work with a daemon
> +polling on input devices and passes input events to the guest.
> +
> +QEMU provides a backend implementation in contrib/vhost-user-input.
> +
> +Linux kernel support
> +--------------------
> +
> +Virtio input requires a guest Linux kernel built with the
> +``CONFIG_VIRTIO_INPUT`` option.
> +
> +Examples
> +--------
> +
> +The backend daemon should be started first:
> +
> +::
> +
> + host# vhost-user-input --socket-path=input.sock \
> + --evdev-path=/dev/input/event17
> +
> +The QEMU invocation needs to create a chardev socket to communicate with the
> +backend daemon and share memory with the guest over a memfd.
> +
> +::
> +
> + host# qemu-system \
> + -chardev socket,path=/tmp/input.sock,id=mouse0 \
> + -device vhost-user-input-pci,chardev=mouse0 \
> + -m 4096 \
> + -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on \
> + -numa node,memdev=mem
Well, this is not a memfd. This is taken from vhost-user-rng.rst, and
should probably be adjusted there too.
It needs shared memory, memory-backend-file can provide it and is
generally more available than memfd, although memfd should be
preferred as it offers some extra security guarantees. There is
already some explanations in vhost-user.rst, maybe we should just add
extra links.
> + ...
> diff --git a/docs/system/devices/vhost-user.rst b/docs/system/devices/vhost-user.rst
> index c6afc4836f..75b40f08c6 100644
> --- a/docs/system/devices/vhost-user.rst
> +++ b/docs/system/devices/vhost-user.rst
> @@ -42,7 +42,7 @@ platform details for what sort of virtio bus to use.
> - See https://github.com/rust-vmm/vhost-device
> * - vhost-user-input
> - Generic input driver
> - - See contrib/vhost-user-input
> + - :ref:`vhost_user_input`
> * - vhost-user-rng
> - Entropy driver
> - :ref:`vhost_user_rng`
> --
> 2.34.1
>
>
--
Marc-André Lureau
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/4] docs/system: Add vhost-user-input documentation
2023-11-14 9:54 ` Marc-André Lureau
@ 2023-11-14 14:25 ` Leo Yan
0 siblings, 0 replies; 8+ messages in thread
From: Leo Yan @ 2023-11-14 14:25 UTC (permalink / raw)
To: Marc-André Lureau
Cc: qemu-devel, Alex Bennée, Gerd Hoffmann, Michael S . Tsirkin,
Manos Pitsidianakis, Mathieu Poirier
Hi Marc-André,
+ Mathieu for vhost RNG stuff.
On Tue, Nov 14, 2023 at 01:54:50PM +0400, Marc-André Lureau wrote:
> Hi
>
> On Mon, Nov 13, 2023 at 11:04 PM Leo Yan <leo.yan@linaro.org> wrote:
[...]
> > @@ -2233,6 +2233,7 @@ L: virtio-fs@redhat.com
> > virtio-input
> > M: Gerd Hoffmann <kraxel@redhat.com>
> > S: Odd Fixes
> > +F: docs/system/devices/vhost-user-input.rst
> > F: hw/input/vhost-user-input.c
> > F: hw/input/virtio-input*.c
> > F: include/hw/virtio/virtio-input.h
> > diff --git a/docs/system/devices/vhost-user-input.rst b/docs/system/devices/vhost-user-input.rst
>
> You need to include the file in the toctree, in docs/system/device-emulation.rst
Will update the toctree in next version.
[...]
> > +The QEMU invocation needs to create a chardev socket to communicate with the
> > +backend daemon and share memory with the guest over a memfd.
> > +
> > +::
> > +
> > + host# qemu-system \
> > + -chardev socket,path=/tmp/input.sock,id=mouse0 \
> > + -device vhost-user-input-pci,chardev=mouse0 \
> > + -m 4096 \
> > + -object memory-backend-file,id=mem,size=4G,mem-path=/dev/shm,share=on \
> > + -numa node,memdev=mem
>
>
> Well, this is not a memfd. This is taken from vhost-user-rng.rst, and
> should probably be adjusted there too.
Yeah, I copied from vhost-user-rng.rst.
To be easier for our life, I will firstly fix this patch for this part,
later we can consider to update vhost-user-rng.rst in a separate patch.
Looped in Mathieu to be awared.
> It needs shared memory, memory-backend-file can provide it and is
> generally more available than memfd, although memfd should be
> preferred as it offers some extra security guarantees. There is
> already some explanations in vhost-user.rst, maybe we should just add
> extra links.
I will update the doc as:
"The QEMU invocation needs to create a chardev socket to communicate with the
backend daemon and access the VirtIO queues with the guest over the
:ref:`_shared_memory_object`."
Thanks,
Leo
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2023-11-14 14:26 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-13 19:02 [PATCH v2 0/4] virtio: Refactor vhost input stub Leo Yan
2023-11-13 19:02 ` [PATCH v2 1/4] hw/virtio: Support set_config() callback in vhost-user-base Leo Yan
2023-11-14 9:44 ` Marc-André Lureau
2023-11-13 19:02 ` [PATCH v2 2/4] docs/system: Add vhost-user-input documentation Leo Yan
2023-11-14 9:54 ` Marc-André Lureau
2023-11-14 14:25 ` Leo Yan
2023-11-13 19:02 ` [PATCH v2 3/4] hw/virtio: Move vhost-user-input into virtio folder Leo Yan
2023-11-13 19:02 ` [PATCH v2 4/4] hw/virtio: derive vhost-user-input from vhost-user-base Leo Yan
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.