This commit introduces QEMU capability detection and validation for virtio-multitouch devices.
1. Capability flag (QEMU_CAPS_VIRTIO_MULTITOUCH): A new capability flag is defined in src/qemu/qemu_capabilities.h to track whether the QEMU binary supports virtio-multitouch devices. 2. Device detection (src/qemu/qemu_capabilities.c): The capability probing code is updated to detect the presence of "virtio-multitouch-device" and "virtio-multitouch-pci" device types when querying QEMU. This allows libvirt to determine at runtime whether the installed QEMU version supports multitouch devices (available since QEMU 8.1.0). 3. Validation (src/qemu/qemu_validate.c): Validation logic is added to ensure that multitouch devices are only used when QEMU supports them. If a domain configuration specifies a multitouch device but QEMU lacks support, libvirt will reject the configuration with a clear error message rather than generating invalid command-line arguments. This capability-based approach ensures that libvirt gracefully handles different QEMU versions, allowing multitouch devices on newer QEMU while preventing configuration errors on older versions. Signed-off-by: Julio Faracco <[email protected]> --- src/qemu/qemu_capabilities.c | 3 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_validate.c | 5 +++++ 3 files changed, 9 insertions(+) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 92b863a826..bc19aa1a5d 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -755,6 +755,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "disk-timed-stats", /* QEMU_CAPS_DISK_TIMED_STATS */ "query-accelerators", /* QEMU_CAPS_QUERY_ACCELERATORS */ "mshv", /* QEMU_CAPS_MSHV */ + "virtio-multitouch", /* QEMU_CAPS_VIRTIO_MULTITOUCH */ ); @@ -1345,6 +1346,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = { { "virtio-keyboard-pci", QEMU_CAPS_VIRTIO_KEYBOARD }, { "virtio-mouse-device", QEMU_CAPS_VIRTIO_MOUSE }, { "virtio-mouse-pci", QEMU_CAPS_VIRTIO_MOUSE }, + { "virtio-multitouch-device", QEMU_CAPS_VIRTIO_MULTITOUCH }, + { "virtio-multitouch-pci", QEMU_CAPS_VIRTIO_MULTITOUCH }, { "virtio-tablet-device", QEMU_CAPS_VIRTIO_TABLET }, { "virtio-tablet-pci", QEMU_CAPS_VIRTIO_TABLET }, { "virtio-input-host-device", QEMU_CAPS_VIRTIO_INPUT_HOST }, diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index f180844e66..44a3350cf9 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -730,6 +730,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */ QEMU_CAPS_DISK_TIMED_STATS, /* timed stats support ('stats-intervals' property of disk frontends) */ QEMU_CAPS_QUERY_ACCELERATORS, /* query-accelerators command */ QEMU_CAPS_MSHV, /* -accel mshv */ + QEMU_CAPS_VIRTIO_MULTITOUCH, /* -device virtio-multitouch-{device,pci} */ QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 184c23d307..6589939290 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5485,6 +5485,11 @@ qemuValidateDomainDeviceDefInput(const virDomainInputDef *input, cap = QEMU_CAPS_VIRTIO_INPUT_HOST; ccwCap = QEMU_CAPS_LAST; break; + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: + baseName = "virtio-multitouch"; + cap = QEMU_CAPS_VIRTIO_MULTITOUCH; + ccwCap = QEMU_CAPS_LAST; + break; case VIR_DOMAIN_INPUT_TYPE_EVDEV: baseName = "input-linux"; cap = QEMU_CAPS_INPUT_LINUX; -- 2.52.0
