From nobody Sun Feb 8 13:10:57 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1657720287; cv=none; d=zohomail.com; s=zohoarc; b=cDsau0L5isKTJ9j71DhA1WhosZO1ZTWE2zSns+O+QtdxRNqrWiHjDsmeBYQnhYlVxOejZnS5qhn6+lHEKhCM+x/r1I7z3tAIfUVNrtK7ZJD/O0m50YSk+WHhFwsiWwePK8nNN+5AsNF09AJE8NpVAgjFiLlqxk02QzbJLZj8DwQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1657720287; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YE4G8rDoUwj9/n88vUPcpz/9c1Ft+cRVvlnplmPEXe4=; b=nqi9CO94OCMEBx0wmxgR06PYsn/7F0XasJf6dV16Jb2whrdNBEJATC+3lda1KEY28O8BuDvisOV2KG+bjUgt7qtfzYv9H5YAdk9bxWKCtDd2yv/ZnSLFb5cFIGrgSB7z0hEB/+h9qa6ASktzl10dZPct+GHHRRYvnD3rVJWi5PE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 1657720287907576.5009638822174; Wed, 13 Jul 2022 06:51:27 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-551-SukPNbh8MJ-5kQb8Q1DTnw-1; Wed, 13 Jul 2022 09:51:20 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id DB1982800616; Wed, 13 Jul 2022 13:51:16 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (unknown [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id BE3E62166B2A; Wed, 13 Jul 2022 13:51:16 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 883851947066; Wed, 13 Jul 2022 13:51:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id E5E6C1947B83 for ; Wed, 13 Jul 2022 13:51:14 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id C6D8B492CA4; Wed, 13 Jul 2022 13:51:14 +0000 (UTC) Received: from maggie.redhat.com (unknown [10.43.2.39]) by smtp.corp.redhat.com (Postfix) with ESMTP id 71C02492CA2 for ; Wed, 13 Jul 2022 13:51:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1657720286; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=YE4G8rDoUwj9/n88vUPcpz/9c1Ft+cRVvlnplmPEXe4=; b=N3tkosBGaSLYwt38a7Ox7o4TdV4mQ8tSLcv8CdJMmcWvN/HucnhjL7Vs7HYy2z8Y4ZMzCl AkFQblr9BPot0+Dw7WaGhXCfMxWfou7Qn/r0O2jToxCqxZd7M0mB8QK1ZVBGbnZ1jkiMkX /xZ8TNCIKwv1gLA8CNovL84VYRU6HlI= X-MC-Unique: SukPNbh8MJ-5kQb8Q1DTnw-1 X-Original-To: libvir-list@listman.corp.redhat.com From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH v2 6/6] qemu: Generate cmd line for guestReset Date: Wed, 13 Jul 2022 15:51:08 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.85 on 10.11.54.9 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1657720288795100008 QEMU offers two attributes for handling reset requests of an USB host device: guest-reset and guest-resets-all. When combined they act as follows: 1) guest-reset=3Dfalse The guest is not allowed to reset the physical USB device. 2) guest-reset=3Dtrue,guest-resets-all=3Dfalse The guest is allowed to reset the device when it is not yet initialized (aka no USB bus address assigned). Usually this results in one guest reset being allowed. This is the default behavior. 3) guest-reset=3Dtrue,guest-resets-all=3Dtrue The guest is allowed to reset the device as it pleases. Now, there's a clear 1:1 mapping with our representation of guestReset, so generating cmd line is trivial. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 21 +++++++++++++++++++ .../hostdev-usb-address.x86_64-latest.args | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index b307d3139c..262fffe5fe 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -5001,6 +5001,8 @@ qemuBuildUSBHostdevDevProps(const virDomainDef *def, unsigned int hostbus =3D 0; unsigned int hostaddr =3D 0; g_autofree char *hostdevice =3D NULL; + virTristateSwitch guestReset =3D VIR_TRISTATE_SWITCH_ABSENT; + virTristateSwitch guestResetsAll =3D VIR_TRISTATE_SWITCH_ABSENT; =20 if (!dev->missing) { if (usbsrc->bus =3D=3D 0 && usbsrc->device =3D=3D 0) { @@ -5018,6 +5020,23 @@ qemuBuildUSBHostdevDevProps(const virDomainDef *def, } } =20 + switch (usbsrc->guestReset) { + case VIR_DOMAIN_HOSTDEV_USB_GUEST_RESET_OFF: + guestReset =3D VIR_TRISTATE_SWITCH_OFF; + break; + case VIR_DOMAIN_HOSTDEV_USB_GUEST_RESET_UNINITIALIZED: + guestReset =3D VIR_TRISTATE_SWITCH_ON; + guestResetsAll =3D VIR_TRISTATE_SWITCH_OFF; + break; + case VIR_DOMAIN_HOSTDEV_USB_GUEST_RESET_ON: + guestReset =3D VIR_TRISTATE_SWITCH_ON; + guestResetsAll =3D VIR_TRISTATE_SWITCH_ON; + break; + case VIR_DOMAIN_HOSTDEV_USB_GUEST_RESET_DEFAULT: + case VIR_DOMAIN_HOSTDEV_USB_GUEST_RESET_LAST: + break; + } + if (virJSONValueObjectAdd(&props, "s:driver", "usb-host", "S:hostdevice", hostdevice, @@ -5025,6 +5044,8 @@ qemuBuildUSBHostdevDevProps(const virDomainDef *def, "p:hostaddr", hostaddr, "s:id", dev->info->alias, "p:bootindex", dev->info->bootIndex, + "T:guest-reset", guestReset, + "T:guest-resets-all", guestResetsAll, NULL) < 0) return NULL; =20 diff --git a/tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args = b/tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args index f59c463f5e..978e6a6e6d 100644 --- a/tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args +++ b/tests/qemuxml2argvdata/hostdev-usb-address.x86_64-latest.args @@ -32,6 +32,6 @@ XDG_CONFIG_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.config \ -blockdev '{"node-name":"libvirt-1-format","read-only":false,"driver":"raw= ","file":"libvirt-1-storage"}' \ -device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-form= at","id":"ide0-0-0","bootindex":1}' \ -audiodev '{"id":"audio1","driver":"none"}' \ --device '{"driver":"usb-host","hostdevice":"/dev/bus/usb/014/006","id":"ho= stdev0","bus":"usb.0","port":"1"}' \ +-device '{"driver":"usb-host","hostdevice":"/dev/bus/usb/014/006","id":"ho= stdev0","guest-reset":true,"guest-resets-all":false,"bus":"usb.0","port":"1= "}' \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ -msg timestamp=3Don --=20 2.35.1