From nobody Tue Sep 9 19:08:47 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=fail; 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=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1753206710747501.5042659515084; Tue, 22 Jul 2025 10:51:50 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id AE16E1366; Tue, 22 Jul 2025 13:51:49 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B4D9113E4; Tue, 22 Jul 2025 13:50:31 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 1B2589F5; Tue, 22 Jul 2025 13:50:25 -0400 (EDT) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (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 7A360E90 for ; Tue, 22 Jul 2025 13:50:24 -0400 (EDT) Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56MEdFaU013791 for ; Tue, 22 Jul 2025 17:50: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 482ckjsh9f-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 22 Jul 2025 17:50: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 56MGMqe9024975 for ; Tue, 22 Jul 2025 17:50:23 GMT Received: from smtprelay02.wdc07v.mail.ibm.com ([172.16.1.69]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 480rd2brfa-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Tue, 22 Jul 2025 17:50:23 +0000 Received: from smtpav03.wdc07v.mail.ibm.com (smtpav03.wdc07v.mail.ibm.com [10.39.53.230]) by smtprelay02.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 56MHoMDF27591242 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 22 Jul 2025 17:50:22 GMT Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 627FD5805A for ; Tue, 22 Jul 2025 17:50:22 +0000 (GMT) Received: from smtpav03.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 13B6F58054 for ; Tue, 22 Jul 2025 17:50:22 +0000 (GMT) Received: from localhost.localdomain (unknown [9.61.246.227]) by smtpav03.wdc07v.mail.ibm.com (Postfix) with ESMTP for ; Tue, 22 Jul 2025 17:50:21 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.3 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 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=p249JNx0Nh5T4tFRn nyJghEl6sd6LGlGwbQEXvWY918=; b=VRAvWpQlDl6iXs62/dGppcWg06kS3lhmO QRlgvd70sdKk1uMBeU85P6+PtF72KL2f3PbihYQYMWLnojOE2tAP7o2Pni79Cwl6 SrEUB+bCJ22TEM3SPgty85RTcGg8n1SoaTlRWbXli4GDnXcDXjkG2CXS4C6oBouu hp+rph8/g1V1GghCgupMSRY/fu5nHLIcwUqItTwYk/1qAnIT6Y9YYZi3pDmSyPbW cgDXH+mVNbS7TToAqY6w/W8+eICs8/OQ2fm/7QYpys6VPFMylau32eaODbcwMrDY zE2ic3NsNuMob73GLr2aT7eV8MH01LFkdecH59s62I14fgPZ7hAJQ== From: "Aaron M. Brown" To: devel@lists.libvirt.org Subject: [PATCH v6 2/3] domain_addr: Fix virtio console port autoassign on virtio-serial bus Date: Tue, 22 Jul 2025 13:50:19 -0400 Message-Id: <20250722175020.88279-3-aaronmbr@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250722175020.88279-1-aaronmbr@linux.ibm.com> References: <20250722175020.88279-1-aaronmbr@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 4BoIR3Hv7tLjzqa-YeQVHX3u6qtQK4LJ X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzIyMDE0OSBTYWx0ZWRfXxULQm4ohopFK bqwtI3C4ftLiH6trQ3YjCuQJxvCNSMjmzJZ+rgIh9qpN0QazkWDQkLzfBjYbnLyJoF3Y5gwdxdm qoNIBN60dSMigABamOL0xsW5+14P7tRJbxgVFqCwSW9nCvBm2HC4t1xujZy00XTMO5ecUvToiup R2V8BYj+Rva495vM2bdEndsrujD+OQahiF7CTDxTZKTXti+RwKPwjWXByfGZwwuqokEK80Z/DKf fYxYArAerD/NExOQTO1jf+Ccrh0/oZjaHfTPL1V1wIaNkqkxD4g6025zVVzET2uGzAReOUkFp8K X1TieeOdBKPj4lLcGL4pKGmvnj+ChgdUvZMsAOlnXPPseW48zP3PlE0elvimwaJeFcJXxsr3mtM C6h/6I+wnUj5D3R+poQo/apofTqb04r7yrzQwUtadkKY+DdBUOlJslX/0mweVXjt90WXWOuZ X-Proofpoint-ORIG-GUID: 4BoIR3Hv7tLjzqa-YeQVHX3u6qtQK4LJ X-Authority-Analysis: v=2.4 cv=Os9Pyz/t c=1 sm=1 tr=0 ts=687fcf5f cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Wb1JkmetP80A:10 a=VnNF1IyMAAAA:8 a=LThifPbOn76TAXhX2bEA:9 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-22_02,2025-07-21_02,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 suspectscore=0 mlxlogscore=999 lowpriorityscore=0 mlxscore=0 bulkscore=0 spamscore=0 malwarescore=0 phishscore=0 impostorscore=0 priorityscore=1501 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507220149 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: IEYELEPSLCRSAF5NFC75ODHB2273GBUR X-Message-ID-Hash: IEYELEPSLCRSAF5NFC75ODHB2273GBUR X-MailFrom: aaronmbr@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1753206712623116600 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 | 30 ++++++++++++++++--- ...rial-autoassign-address.x86_64-latest.args | 4 +-- ...erial-autoassign-address.x86_64-latest.xml | 4 +-- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 8dfa8feca0..5448d3d078 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -1692,12 +1692,16 @@ virDomainVirtioSerialAddrNext(virDomainDef *def, =20 static int virDomainVirtioSerialAddrNextFromController(virDomainVirtioSerialAddrSet *= addrs, - virDomainDeviceVirtioSerialAdd= ress *addr) + virDomainDeviceVirtioSerialAdd= ress *addr, + bool allowZero) { - ssize_t port; + ssize_t port, startPort =3D 0; 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, @@ -1707,7 +1711,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); @@ -1718,6 +1722,15 @@ virDomainVirtioSerialAddrNextFromController(virDomai= nVirtioSerialAddrSet *addrs, addr->port =3D port; VIR_DEBUG("Found free virtio serial controller %u port %u", addr->cont= roller, addr->port); + + /* if this is the first virtconsole, reserve port 0 */ + if (allowZero && port =3D=3D 0) { + ignore_value(virBitmapSetBit(map, 0)); + VIR_DEBUG( + "Port 0 reserved for the first virtconsole on vioserial contro= ller %1$u", + addr->controller); + } + return 0; } =20 @@ -1732,11 +1745,20 @@ virDomainVirtioSerialAddrAssign(virDomainDef *def, virDomainDeviceInfo *ptr =3D allowZero ? &nfo : info; =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; + } + } 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 f987168477..4f4b95e969 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 @@ -35,9 +35,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 acee9999af..712d6c8a56 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 @@ -47,11 +47,11 @@ -
+
-
+
--=20 2.39.5 (Apple Git-154)