From nobody Mon Feb 2 07:29:09 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1769607007; cv=none; d=zohomail.com; s=zohoarc; b=b8Z+bdWN0xVqXdCqETUNnoLAbgcglcoigsRiCfoxuhSOrUjJsoosXNKuMI89Y8kfa2q1YFKDaaUF9t1rt6nwg+q9pbm6r27UT0LbwgsaDBvSXj6OzlvNL40vf+W4EyxSgmo1/J2TNOJ2bE3S0es8C5QR/miHIHbDE/HcfJYIbnM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769607007; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=YGLCjyULYkg0EakgvIAgopklQws7W1x+USW0ul0oe8c=; b=Qh6ngwnQtYUXVUOy6ysxp5gODBlKqm62MvAeVt7haj0OGO7U/5IjtR4S0pGUwCSdURo8Aiv2Z/3ls7PNRm4SC83Tm2J/yHTTxUzpTVOBIqVZ3RxQuC9gjEq5n8/SK7F56Va4RZIcAIiXjbrx878JfJaig7mEjOMLgfUhkzQ3wCM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1769607007570343.55404327664917; Wed, 28 Jan 2026 05:30:07 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 4831441A18; Wed, 28 Jan 2026 08:30:07 -0500 (EST) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id F02A541C1A; Wed, 28 Jan 2026 08:28:20 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 44B4C417D6; Wed, 28 Jan 2026 08:28:14 -0500 (EST) Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D226241897 for ; Wed, 28 Jan 2026 08:28:13 -0500 (EST) Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2b714f30461so6074572eec.0 for ; Wed, 28 Jan 2026 05:28:13 -0800 (PST) Received: from fedora ([2804:14c:3b83:947a::9370]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2b7a1abe57csm3049359eec.22.2026.01.28.05.28.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 28 Jan 2026 05:28:12 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769606893; x=1770211693; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=YGLCjyULYkg0EakgvIAgopklQws7W1x+USW0ul0oe8c=; b=UpmLa5x9sm6nvd0YcT92XKs8cHekDCMeyLD1chL60JQYunALNRz1AFVCSq1mp8t0Oa Q2n2/kf6FEb/3JOXd9pUb7EacBIPhzpTLZAXF8I52LZQw3gMutwiWz1NT0K9onE2UA+Q jsMZKTe6Les1v5ZtpM4XS9YSrM5zrB9NIuDkWRISkPF3mnSGKnKciif56nIeanZU4Uwl t5OL3iCr3/dq1Fc20TydFL1z0ng6FAO4V8InLq6WR++M3e6I1yNJD5uJSJyvoc+ornse q0Na40R9QmuVV6z3CS0b2du6ewlpaZ3OAzGXgPypnm+eiENozJlT1QWrjVnxKPKrJia2 VB5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769606893; x=1770211693; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=YGLCjyULYkg0EakgvIAgopklQws7W1x+USW0ul0oe8c=; b=at3Yntazyxm2HOefu+Tfp9zbIbtSFTdvmVuKgf/c8Ijyn2QKPen/ZhtQYrY/0PghNI VPh4yjNNNZp8c4dd2soGx4nuiS8NNkbPtM3vP/rIXldlOe3qSShiv+ScP4sXOLFgVUuj n5RsgF/XaA0SjS3J24PgqRRAUkQRyaoF2zRhK4ADz0sFFfNW51Ar1kErhHgZqitCvrVM Gu2o7FuyQxQxIOyNCtSEsiU0QlCoJcUGDY922dcRisWa7gFffW22hXS1LxA5gTYehjUY FSPfdtINm9940WI2moMqJJ2c578NGfFvFPk7q+j3dgDyp8llgt8eLqzO7fghj0hlOZ2X mqHA== X-Gm-Message-State: AOJu0YwXMT1b8u16m8zjqWZ11cbpBA9D0YOqQ/oTDis3pcCjhGbGBl/h s07tkFt5nSOqvwjMKCWl4zJVQuhiXQz7+URK+CCIcUpcuGswLa9/tU3d1l9bhw== X-Gm-Gg: AZuq6aKMwA840T+ElqR5xTcnElmmu5fW6Mn+hZlXOVte5qEHMCY201+EPbGd8AbtP2q ZuJ3eUtA6eXORqMKOIilrWI9tGS/d2bOixRtlCzBefOSNTrbf/SKcaxy41RdjZ/Z+JsbTBvuM6D HAqZEpj0XrbdfN4yaASDfz/TVri+T1lL/7NGb5z02Fiqy3IzcCwh8h8ODzKyygU+J/ISEw8BOgi 0XnTbF97bQa2kyEWcGuZKxqNk0NXnu+QqW/96+QqQwKMP7NWvb3S9CtJ2jLrqLlZ573d1C2NXXN 8wWQqlHETxIIRR79kBPDg/xkYx8ba9sN0sduc7Epr3bOqkosHjQDiRb8xIWbUANfBOOvo1M2SgO cFYiaICxP9uocNqjOXlxv+g/Os0tOxkPK0dg1jD0dX9+iLZdE3MeMRm+YpItwO3ZVxfbXOyNZqW 7LWX1ztnCwLjbWM7q7VtQf X-Received: by 2002:a05:7300:434a:b0:2b0:48f7:837d with SMTP id 5a478bee46e88-2b78d9017aamr3093405eec.11.1769606892318; Wed, 28 Jan 2026 05:28:12 -0800 (PST) From: Julio Faracco To: devel@lists.libvirt.org Subject: [PATCH v2 1/3] Add support for virtio-multitouch input devices Date: Wed, 28 Jan 2026 10:21:56 -0300 Message-ID: <20260128132758.30227-2-jcfaracco@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260128132758.30227-1-jcfaracco@gmail.com> References: <20260128132758.30227-1-jcfaracco@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: CNFSNC4EIXR26FYYURF346B23L2UEQYU X-Message-ID-Hash: CNFSNC4EIXR26FYYURF346B23L2UEQYU X-MailFrom: jcfaracco@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1769607021955158500 Content-Type: text/plain; charset="utf-8" This commit adds support for virtio-multitouch input devices. It introduces the VIR_DOMAIN_INPUT_TYPE_MULTITOUCH type, adds the QEMU multitouch capability, updates validation, updates command building, and updates security labeling code to handle the new device type. Signed-off-by: Julio Faracco --- src/conf/domain_audit.c | 1 + src/conf/domain_conf.c | 2 ++ src/conf/domain_conf.h | 1 + src/conf/domain_validate.c | 9 +++++++++ src/qemu/qemu_capabilities.c | 3 +++ src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 5 +++++ src/qemu/qemu_validate.c | 5 +++++ src/security/security_dac.c | 2 ++ src/security/security_selinux.c | 2 ++ 10 files changed, 31 insertions(+) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index 7a6bb02203..ae7e2fac82 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -926,6 +926,7 @@ virDomainAuditInput(virDomainObj *vm, =20 case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success, "virt=3D%s resrc=3Devdev reason=3D%s %s uuid=3D%s path= =3D%s", virt, reason, vmname, uuidstr, VIR_AUDIT_STR(input->sour= ce.evdev)); diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 9672168df9..88b4e055fd 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -916,6 +916,7 @@ VIR_ENUM_IMPL(virDomainInput, "keyboard", "passthrough", "evdev", + "multitouch", ); =20 VIR_ENUM_IMPL(virDomainInputBus, @@ -2084,6 +2085,7 @@ const char *virDomainInputDefGetPath(virDomainInputDe= f *input) =20 case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: return input->source.evdev; } return NULL; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 83d49969d3..269649dd3c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1554,6 +1554,7 @@ typedef enum { VIR_DOMAIN_INPUT_TYPE_KBD, VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH, VIR_DOMAIN_INPUT_TYPE_EVDEV, + VIR_DOMAIN_INPUT_TYPE_MULTITOUCH, =20 VIR_DOMAIN_INPUT_TYPE_LAST } virDomainInputType; diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c index 4482203087..63e08567a6 100644 --- a/src/conf/domain_validate.c +++ b/src/conf/domain_validate.c @@ -2930,6 +2930,15 @@ virDomainInputDefValidate(const virDomainInputDef *i= nput, } break; =20 + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: + if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_VIRTIO) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("only bus 'virtio' is supported for 'multitou= ch' input devices")); + return -1; + } + break; + + case VIR_DOMAIN_INPUT_TYPE_EVDEV: if (input->bus !=3D VIR_DOMAIN_INPUT_BUS_NONE) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index f456e8a378..a5e19b8c01 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 */ ); =20 =20 @@ -1349,6 +1350,8 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "virtio-tablet-pci", QEMU_CAPS_VIRTIO_TABLET }, { "virtio-input-host-device", QEMU_CAPS_VIRTIO_INPUT_HOST }, { "virtio-input-host-pci", QEMU_CAPS_VIRTIO_INPUT_HOST }, + { "virtio-multitouch-pci", QEMU_CAPS_VIRTIO_MULTITOUCH }, + { "virtio-multitouch-device", QEMU_CAPS_VIRTIO_MULTITOUCH }, { "mptsas1068", QEMU_CAPS_SCSI_MPTSAS1068 }, { "pxb", QEMU_CAPS_DEVICE_PXB }, { "pxb-pcie", QEMU_CAPS_DEVICE_PXB_PCIE }, 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}= */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index e81efdfde7..369646a4c7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -929,6 +929,10 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDe= f *device, *baseName =3D "virtio-input-host"; break; =20 + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: + *baseName =3D "virtio-multitouch"; + break; + case VIR_DOMAIN_INPUT_TYPE_EVDEV: case VIR_DOMAIN_INPUT_TYPE_LAST: default: @@ -4304,6 +4308,7 @@ qemuBuildInputVirtioDevProps(const virDomainDef *def, switch ((virDomainInputType)dev->type) { case VIR_DOMAIN_INPUT_TYPE_MOUSE: case VIR_DOMAIN_INPUT_TYPE_TABLET: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: case VIR_DOMAIN_INPUT_TYPE_KBD: case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: break; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 184c23d307..44962fee92 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -5490,6 +5490,11 @@ qemuValidateDomainDeviceDefInput(const virDomainInpu= tDef *input, cap =3D QEMU_CAPS_INPUT_LINUX; ccwCap =3D QEMU_CAPS_LAST; break; + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: + baseName =3D "virtio-multitouch"; + cap =3D QEMU_CAPS_VIRTIO_MULTITOUCH; + ccwCap =3D QEMU_CAPS_LAST; + break; case VIR_DOMAIN_INPUT_TYPE_LAST: default: virReportEnumRangeError(virDomainInputType, diff --git a/src/security/security_dac.c b/src/security/security_dac.c index 2f788b872a..85e6954018 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1830,6 +1830,7 @@ virSecurityDACSetInputLabel(virSecurityManager *mgr, switch ((virDomainInputType)input->type) { case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: if (virSecurityDACGetIds(seclabel, priv, &user, &group, NULL, NULL= ) < 0) return -1; =20 @@ -1858,6 +1859,7 @@ virSecurityDACRestoreInputLabel(virSecurityManager *m= gr, =20 switch ((virDomainInputType)input->type) { case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: ret =3D virSecurityDACRestoreFileLabel(mgr, input->source.evdev); break; diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 2f3cc274a5..2d9aaa6e32 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -1597,6 +1597,7 @@ virSecuritySELinuxSetInputLabel(virSecurityManager *m= gr, switch ((virDomainInputType)input->type) { case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: if (virSecuritySELinuxSetFilecon(mgr, input->source.evdev, seclabel->imagelabel, true) < 0) return -1; @@ -1626,6 +1627,7 @@ virSecuritySELinuxRestoreInputLabel(virSecurityManage= r *mgr, =20 switch ((virDomainInputType)input->type) { case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH: + case VIR_DOMAIN_INPUT_TYPE_MULTITOUCH: case VIR_DOMAIN_INPUT_TYPE_EVDEV: return virSecuritySELinuxRestoreFileLabel(mgr, input->source.evdev= , true, false); =20 --=20 2.52.0