From nobody Sun Oct 5 01:46:18 2025 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=reject dis=none) header.from=linux.ibm.com ARC-Seal: i=1; a=rsa-sha256; t=1758310290; cv=none; d=zohomail.com; s=zohoarc; b=LoHrRjs4s+v9LVY22zWU+D5hVeV+/UKt3jU09kSQ7dXwEI8QDs53nROv9BZT6W65VW8e2l73FMXj/hoWTLQbmO3pvCvkWGWKcPbQBdudQ0xBE1+fRugy4UEBeoBezS9o3xhUiCReeesF+XH5tgKrW0Woo6cq8pepoF5A38K7h2o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1758310290; 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=4o1uT9CRW84DNBf/hEBCDibNXS0ISwpjWzflfUcq2x0=; b=jJ2sxVNepyz3ZGrVZyjlIyYZcSFopJ2vE++7UleJzcPxc9ucuXNhMlfmQ/CGp96hHv1ouPiFJEus6TOODvs3G512V29PObvnOJOdBAi/NClIgCHXDqKO71S7XCjsz8mt8bzMeTBxREHHD9/76zaItUnVNzcjPmyiyFnoCsn9rfY= 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=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1758310290299957.0989915040162; Fri, 19 Sep 2025 12:31:30 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 58A3141C23; Fri, 19 Sep 2025 15:31:29 -0400 (EDT) Received: from [172.19.199.10] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E057F41C23; Fri, 19 Sep 2025 15:27:00 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 7F96A4192E; Fri, 19 Sep 2025 15:26:26 -0400 (EDT) Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id B8D2841C12 for ; Fri, 19 Sep 2025 15:26:24 -0400 (EDT) Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58JHaFLU027573 for ; Fri, 19 Sep 2025 19:26:24 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 497g4pjv0j-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 19 Sep 2025 19:26:23 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 58JIvWDO009367 for ; Fri, 19 Sep 2025 19:26:22 GMT Received: from smtprelay02.dal12v.mail.ibm.com ([172.16.1.4]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 495nn3w4x3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 19 Sep 2025 19:26:22 +0000 Received: from smtpav06.wdc07v.mail.ibm.com (smtpav06.wdc07v.mail.ibm.com [10.39.53.233]) by smtprelay02.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 58JJQMCW11207248 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 19 Sep 2025 19:26:22 GMT Received: from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1EFA15803F for ; Fri, 19 Sep 2025 19:26:22 +0000 (GMT) Received: from smtpav06.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id C599958056 for ; Fri, 19 Sep 2025 19:26:21 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.247.98]) by smtpav06.wdc07v.mail.ibm.com (Postfix) with ESMTP for ; Fri, 19 Sep 2025 19:26:21 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, 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=ibm.com; h= content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=4o1uT9CRW84DNBf/h EBCDibNXS0ISwpjWzflfUcq2x0=; b=bJEBY+EEoCwwyb3tyNCdVVuZSLDc04I5s +H75wuSOwhVUCBr8fH1Wqoge0o9pbKOdlj01EzMJCmEOxYKwMR7JJbpT28PIPO9g PPyVGIQIcluVxyFBN3V3pbsavsLeD/oxLRNpkuf3ZRAKvHxcl5XMz3m5cOQ4rKs4 RkcAw/j5azGxCfWUfNKi/35SMlkgttFPmZMgzBGga8WmsW2utSmF0/col8uwq+P0 X9zzbMbcVXjNPhguBFvFk/RHkWtK82j4kgpqvkfNCulhWr7u04S73rn4zK3gaCOm uJp1yWAMYWnHcMGU2rSRtMjUvA6ZZOgcitnXvYTMaQJTi/ygDtWvw== From: "Aaron M. Brown" To: devel@lists.libvirt.org Subject: [RFC PATCH v7 2/3] domain_addr.c: Fix virtio console port autoassign on virtio-serial bus Date: Fri, 19 Sep 2025 15:26:19 -0400 Message-Id: <20250919192620.4852-3-aaronmbr@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250919192620.4852-1-aaronmbr@linux.ibm.com> References: <20250919192620.4852-1-aaronmbr@linux.ibm.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTE2MDIwNCBTYWx0ZWRfX+kQ4N4Vzh7Yf Y8dQ21AquDw+Sp+hCwFRICtu8d31QqBiqGOTiOmUFXofa//A8YcyZW5u2lvon1CqanbVsOKzuPU w9YYNHPzoi8ljauZi4gHu2zZDiJ/aW1Bw1Y7hr7LSHIk/iz+y7ONTpvH0dcxQ4jqqjRCOMUwW9H nS9EArX0LhN6+5BtDGbIT/Ao6S0b6XBmYrdsfE1/MRa8XnA999L5E2tjThegSFrd/eDgG9BXP+d w+5bpXIox0ugZAZFae8zLdBT+BqCMB3kvQn/RM86U5Xn0VBj+TMNKQEMGp+wMVpDX88ypQTADbT ecfA2ImdaCk8CfDl78Xr+CCQkuZfPgs2yjPpK3+8bO1lW6cl/GUtx6x1l7rMDVoWeC7nhJyzi+P HF/aKs3q X-Proofpoint-ORIG-GUID: Wql6dCESj3PoF-2lK-asNeThBR5gpIxn X-Proofpoint-GUID: Wql6dCESj3PoF-2lK-asNeThBR5gpIxn X-Authority-Analysis: v=2.4 cv=cNzgskeN c=1 sm=1 tr=0 ts=68cdae5f cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=yJojWOMRYYMA:10 a=VnNF1IyMAAAA:8 a=LThifPbOn76TAXhX2bEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-19_02,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 clxscore=1015 spamscore=0 bulkscore=0 malwarescore=0 adultscore=0 priorityscore=1501 impostorscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509160204 Message-ID-Hash: GILV6NMT3LVFPUIMCZDEG4PZE5W7OUX7 X-Message-ID-Hash: GILV6NMT3LVFPUIMCZDEG4PZE5W7OUX7 X-MailFrom: aaronmbr@linux.ibm.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 @ibm.com) X-ZM-MESSAGEID: 1758310291836116600 Content-Type: text/plain; charset="utf-8" This change fixes an issue with virtio console port assignment on virtio-se= rial buses. Currently, when trying to autoassign a virtio console device, the device ca= nnot be assigned to a port greater than 0 on virtio-serial buses. You will receive the following error: `virtio-serial-bus: A port already exists at id 0` Therefore, the data needs to be passed back into info when allowZero is tru= e. We should also preserve the controller data when allowZero is true, and propagate allowZero into virDomainVirtioSerialAddrNextFromController to get an appropriate startPort. Fixes: 16db8d2e ("Add functions to track virtio-serial addresses") Signed-off-by: Aaron M. Brown --- src/conf/domain_addr.c | 31 +++++++++++++++++-- ...rial-autoassign-address.x86_64-latest.args | 4 +-- ...erial-autoassign-address.x86_64-latest.xml | 4 +-- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 6aa5ac1b9f..87c5973fab 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1717,12 +1717,17 @@ virDomainVirtioSerialAddrNext(virDomainDef *def, =20 static int virDomainVirtioSerialAddrNextFromController(virDomainVirtioSerialAddrSet *= addrs, - virDomainDeviceVirtioSerialAdd= ress *addr) + virDomainDeviceVirtioSerialAdd= ress *addr, + bool allowZero) { + ssize_t startPort =3D 0; ssize_t port; ssize_t i; virBitmap *map; =20 + if (allowZero) + startPort =3D -1; + i =3D virDomainVirtioSerialAddrFindController(addrs, addr->controller); if (i < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -1732,7 +1737,7 @@ virDomainVirtioSerialAddrNextFromController(virDomain= VirtioSerialAddrSet *addrs, } =20 map =3D addrs->controllers[i]->ports; - if ((port =3D virBitmapNextClearBit(map, 0)) <=3D 0) { + if ((port =3D virBitmapNextClearBit(map, startPort)) < 0) { virReportError(VIR_ERR_XML_ERROR, _("Unable to find a free port on virtio-serial cont= roller %1$u"), addr->controller); @@ -1755,13 +1760,33 @@ virDomainVirtioSerialAddrAssign(virDomainDef *def, { virDomainDeviceInfo nfo =3D { 0 }; virDomainDeviceInfo *ptr =3D allowZero ? &nfo : info; + virBitmap *map; + ssize_t i; =20 ptr->type =3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_VIRTIO_SERIAL; + ptr->addr.vioserial.controller =3D info->addr.vioserial.controller; =20 if (portOnly) { if (virDomainVirtioSerialAddrNextFromController(addrs, - &ptr->addr.vioseri= al) < 0) + &ptr->addr.vioseri= al, + allowZero) < 0) return -1; + + if (ptr =3D=3D &nfo) { + /* pass the vioserial data back into info as info is used + * later for port assignment */ + info->addr.vioserial =3D ptr->addr.vioserial; + + /* if the next available port from the controller is zero, + * let's reserve it in the map and return */ + if (ptr->addr.vioserial.port =3D=3D 0) { + i =3D virDomainVirtioSerialAddrFindController(addrs, ptr->= addr.vioserial.controller); + map =3D addrs->controllers[i]->ports; + ignore_value(virBitmapSetBit(map, 0)); + return 0; + } + } + } else { if (virDomainVirtioSerialAddrNext(def, addrs, &ptr->addr.vioserial, allowZero) < 0) diff --git a/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address= .x86_64-latest.args b/tests/qemuxmlconfdata/console-virtio-serial-autoassig= n-address.x86_64-latest.args index 4fbd1e1a5e..8070b3e2af 100644 --- a/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address.x86_64= -latest.args +++ b/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address.x86_64= -latest.args @@ -33,9 +33,9 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-QEMUGue= st1/.config \ -chardev pty,id=3Dcharconsole1 \ -device '{"driver":"virtconsole","bus":"virtio-serial0.0","nr":0,"chardev"= :"charconsole1","id":"console1"}' \ -chardev pty,id=3Dcharconsole2 \ --device '{"driver":"virtconsole","bus":"virtio-serial0.0","nr":0,"chardev"= :"charconsole2","id":"console2"}' \ +-device '{"driver":"virtconsole","bus":"virtio-serial0.0","nr":1,"chardev"= :"charconsole2","id":"console2"}' \ -chardev pty,id=3Dcharconsole3 \ --device '{"driver":"virtconsole","bus":"virtio-serial0.0","nr":0,"chardev"= :"charconsole3","id":"console3"}' \ +-device '{"driver":"virtconsole","bus":"virtio-serial0.0","nr":2,"chardev"= :"charconsole3","id":"console3"}' \ -audiodev '{"id":"audio1","driver":"none"}' \ -device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","add= r":"0x3"}' \ -sandbox on,obsolete=3Ddeny,elevateprivileges=3Ddeny,spawn=3Ddeny,resource= control=3Ddeny \ diff --git a/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address= .x86_64-latest.xml b/tests/qemuxmlconfdata/console-virtio-serial-autoassign= -address.x86_64-latest.xml index 9939584a9a..971443457a 100644 --- a/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address.x86_64= -latest.xml +++ b/tests/qemuxmlconfdata/console-virtio-serial-autoassign-address.x86_64= -latest.xml @@ -38,11 +38,11 @@ -
+
-
+
--=20 2.39.5 (Apple Git-154)