From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561957; cv=none; d=zoho.com; s=zohoarc; b=BwYVAWikbqC5N9dLiPtgg9HCHoNefGlY+qXfmaKgRYVDmJ1i5tdZwJtHzqaNrgAT1QZWwc6CS24gE6/tb/gKPrquEOJoIbsVxpOrFiuMPcxo8IMa4foUnycdNGWWSV60cIXfpyejgu2bOxs1bJI10t6Fu/IaRxu15XkYOeIRdAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561957; 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:ARC-Authentication-Results; bh=/1sdpPrELF1WP5CrR4LrZueKMDkIvZe/sMkXlRfE+Ak=; b=YFqUJXWycyELWX3X4BglT5RXTw5HTOhZ8hNHCWfO2Ye3Ah9SVbfLZitZ+962eC+cxPGLUYfBOgKus2R9BRvOUBPF/o6UE+KjsB+W/y0b3yoqMUUO0/CKxTkbdOsExwr91H6gCc11H1dREdhGxvNVDR6LJdjmrkTFEVVZHJTAiFg= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1564561957104473.6400376136272; Wed, 31 Jul 2019 01:32:37 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 81F243B71F; Wed, 31 Jul 2019 08:32:35 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 54472600D1; Wed, 31 Jul 2019 08:32:35 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 1E0233FA9A; Wed, 31 Jul 2019 08:32:35 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WTPu027366 for ; Wed, 31 Jul 2019 04:32:29 -0400 Received: by smtp.corp.redhat.com (Postfix) id DB16D5D712; Wed, 31 Jul 2019 08:32:29 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 41AC85D70D for ; Wed, 31 Jul 2019 08:32:29 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:19 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/6] qemuBuildPCIHostdevDevStr: Always format PCI domain onto cmd line X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Wed, 31 Jul 2019 08:32:36 +0000 (UTC) Content-Type: text/plain; charset="utf-8" QEMU is perfectly capable of dealing with fully expanded PCI address. Format PCI domain always as it will simplify next commits. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/qemu/qemu_command.c | 8 ++++---- tests/qemuxml2argvdata/hostdev-pci-address-device.args | 2 +- tests/qemuxml2argvdata/hostdev-pci-address.args | 2 +- .../qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args | 2 +- tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args | 2 +- tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 2 +- tests/qemuxml2argvdata/hostdev-vfio.args | 2 +- tests/qemuxml2argvdata/net-hostdev-bootorder.args | 3 ++- tests/qemuxml2argvdata/net-hostdev-vfio.args | 2 +- tests/qemuxml2argvdata/net-hostdev.args | 2 +- tests/qemuxml2argvdata/pci-rom.args | 4 ++-- 11 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index fee51158a9..1871c6ef81 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4933,10 +4933,10 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, } =20 virBufferAddLit(&buf, ",host=3D"); - if (pcisrc->addr.domain) - virBufferAsprintf(&buf, "%.4x:", pcisrc->addr.domain); - virBufferAsprintf(&buf, "%.2x:%.2x.%.1x", - pcisrc->addr.bus, pcisrc->addr.slot, + virBufferAsprintf(&buf, "%.4x:%.2x:%.2x.%.1x", + pcisrc->addr.domain, + pcisrc->addr.bus, + pcisrc->addr.slot, pcisrc->addr.function); virBufferAsprintf(&buf, ",id=3D%s", dev->info->alias); if (dev->info->bootIndex) diff --git a/tests/qemuxml2argvdata/hostdev-pci-address-device.args b/tests= /qemuxml2argvdata/hostdev-pci-address-device.args index 4763e1a147..5159b00ef1 100644 --- a/tests/qemuxml2argvdata/hostdev-pci-address-device.args +++ b/tests/qemuxml2argvdata/hostdev-pci-address-device.args @@ -27,5 +27,5 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest2,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ --device pci-assign,host=3D06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ +-device pci-assign,host=3D0000:06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x= 3 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x4 diff --git a/tests/qemuxml2argvdata/hostdev-pci-address.args b/tests/qemuxm= l2argvdata/hostdev-pci-address.args index d90fb2c085..fe6acaaf62 100644 --- a/tests/qemuxml2argvdata/hostdev-pci-address.args +++ b/tests/qemuxml2argvdata/hostdev-pci-address.args @@ -27,4 +27,4 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest2,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ --device pci-assign,host=3D06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 +-device pci-assign,host=3D0000:06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args b/t= ests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args index 1861811e8b..963d508066 100644 --- a/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args @@ -24,6 +24,6 @@ server,nowait \ -rtc base=3Dutc \ -no-shutdown \ -device zpci,uid=3D1,fid=3D0,target=3Dhostdev0,id=3Dzpci1 \ --device vfio-pci,host=3D00:00.0,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x1 \ +-device vfio-pci,host=3D0000:00:00.0,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x1 \ -device zpci,uid=3D2,fid=3D1,target=3Dballoon0,id=3Dzpci2 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x2 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args b/tes= ts/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args index 4a58a1eb8d..2fc4200c23 100644 --- a/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args @@ -28,6 +28,6 @@ server,nowait \ -device zpci,uid=3D65535,fid=3D4294967295,target=3Dhostdev0,id=3Dzpci65535= \ -device vfio-pci,host=3Dffff:00:00.0,id=3Dhostdev0,bus=3Dpci.1,addr=3D0x1f= \ -device zpci,uid=3D1,fid=3D0,target=3Dhostdev1,id=3Dzpci1 \ --device vfio-pci,host=3D00:00.0,id=3Dhostdev1,bus=3Dpci.0,addr=3D0x2 \ +-device vfio-pci,host=3D0000:00:00.0,id=3Dhostdev1,bus=3Dpci.0,addr=3D0x2 \ -device zpci,uid=3D2,fid=3D1,target=3Dballoon0,id=3Dzpci2 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x3 diff --git a/tests/qemuxml2argvdata/hostdev-vfio-zpci.args b/tests/qemuxml2= argvdata/hostdev-vfio-zpci.args index 07405c7c14..d3a762e5d4 100644 --- a/tests/qemuxml2argvdata/hostdev-vfio-zpci.args +++ b/tests/qemuxml2argvdata/hostdev-vfio-zpci.args @@ -24,6 +24,6 @@ server,nowait \ -rtc base=3Dutc \ -no-shutdown \ -device zpci,uid=3D25,fid=3D31,target=3Dhostdev0,id=3Dzpci25 \ --device vfio-pci,host=3D00:00.0,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x8 \ +-device vfio-pci,host=3D0000:00:00.0,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x8 \ -device zpci,uid=3D1,fid=3D0,target=3Dballoon0,id=3Dzpci1 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x1 diff --git a/tests/qemuxml2argvdata/hostdev-vfio.args b/tests/qemuxml2argvd= ata/hostdev-vfio.args index b86181e267..79654f44bb 100644 --- a/tests/qemuxml2argvdata/hostdev-vfio.args +++ b/tests/qemuxml2argvdata/hostdev-vfio.args @@ -27,5 +27,5 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest2,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ --device vfio-pci,host=3D06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ +-device vfio-pci,host=3D0000:06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x4 diff --git a/tests/qemuxml2argvdata/net-hostdev-bootorder.args b/tests/qemu= xml2argvdata/net-hostdev-bootorder.args index 700ed5366b..eefc247eed 100644 --- a/tests/qemuxml2argvdata/net-hostdev-bootorder.args +++ b/tests/qemuxml2argvdata/net-hostdev-bootorder.args @@ -27,4 +27,5 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D2 \ --device pci-assign,host=3D03:07.1,id=3Dhostdev0,bootindex=3D1,bus=3Dpci.0,= addr=3D0x3 +-device pci-assign,host=3D0000:03:07.1,id=3Dhostdev0,bootindex=3D1,bus=3Dp= ci.0,\ +addr=3D0x3 diff --git a/tests/qemuxml2argvdata/net-hostdev-vfio.args b/tests/qemuxml2a= rgvdata/net-hostdev-vfio.args index fcc8716fdf..aa9e91db82 100644 --- a/tests/qemuxml2argvdata/net-hostdev-vfio.args +++ b/tests/qemuxml2argvdata/net-hostdev-vfio.args @@ -27,5 +27,5 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ --device vfio-pci,host=3D03:07.1,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ +-device vfio-pci,host=3D0000:03:07.1,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x4 diff --git a/tests/qemuxml2argvdata/net-hostdev.args b/tests/qemuxml2argvda= ta/net-hostdev.args index 75f6934d0d..94eac176f3 100644 --- a/tests/qemuxml2argvdata/net-hostdev.args +++ b/tests/qemuxml2argvdata/net-hostdev.args @@ -27,5 +27,5 @@ server,nowait \ -usb \ -drive file=3D/dev/HostVG/QEMUGuest1,format=3Draw,if=3Dnone,id=3Ddrive-ide= 0-0-0 \ -device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ --device pci-assign,host=3D03:07.1,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x3 \ +-device pci-assign,host=3D0000:03:07.1,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x= 3 \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x4 diff --git a/tests/qemuxml2argvdata/pci-rom.args b/tests/qemuxml2argvdata/p= ci-rom.args index 5f33b20b4e..7235642ee8 100644 --- a/tests/qemuxml2argvdata/pci-rom.args +++ b/tests/qemuxml2argvdata/pci-rom.args @@ -33,7 +33,7 @@ addr=3D0x3,rombar=3D1 \ -netdev user,id=3Dhostnet1 \ -device virtio-net-pci,netdev=3Dhostnet1,id=3Dnet1,mac=3D52:54:00:24:a5:9e= ,bus=3Dpci.0,\ addr=3D0x4,romfile=3D/etc/fake/bootrom.bin \ --device pci-assign,host=3D06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x5,rom= bar=3D0 \ --device pci-assign,host=3D06:12.6,id=3Dhostdev1,bus=3Dpci.0,addr=3D0x6,rom= bar=3D1,\ +-device pci-assign,host=3D0000:06:12.5,id=3Dhostdev0,bus=3Dpci.0,addr=3D0x= 5,rombar=3D0 \ +-device pci-assign,host=3D0000:06:12.6,id=3Dhostdev1,bus=3Dpci.0,addr=3D0x= 6,rombar=3D1,\ romfile=3D/etc/fake/bootrom.bin \ -device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x7 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561955; cv=none; d=zoho.com; s=zohoarc; b=ALAwh9/i4FGy5wZl2lDZk1xPwIyBje9Tu1dAWRYLuViReyPOnrKXvMoL5JbnOuPV14Crv4aP+i4sc4tVZvB5cIwl7lavfkO6erL0JobdB1y17PWJlBcvkqvwurZCBOFP6oBWkf27uwaXPU4A0LidQj8IZD0joLdEpk9vxCKe7Ms= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561955; 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:ARC-Authentication-Results; bh=sb13M90SxENTluzcSyyGczdFMzZFkmD1vMCUB4ACbt8=; b=P6QA1SHQ4ziBIV1V6VMzr4NFcGFpTO4EKFMjmqakBUeb2DGrlwQBH0cLe6IuZ9VR9eZcMXKwY6mNRSxHw7E8VL76+DiNtbzWyTn6WO91M3slZS8/Rzg5k6NQx6GJU713MxPlI+o+PHHDE7GBqJ3GpxawQkisdTZdgCOyanulrrE= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1564561955544100.29786247812353; Wed, 31 Jul 2019 01:32:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 0E26181F31; Wed, 31 Jul 2019 08:32:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D7B205D9E1; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 5C0B7180B536; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WU73027374 for ; Wed, 31 Jul 2019 04:32:30 -0400 Received: by smtp.corp.redhat.com (Postfix) id A7B6B5D712; Wed, 31 Jul 2019 08:32:30 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 333785D70D for ; Wed, 31 Jul 2019 08:32:30 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:20 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 2/6] virPCIDeviceNew: Prefer VIR_RETURN_PTR X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Wed, 31 Jul 2019 08:32:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" This function declares @ret variable and then uses VIR_STEAL_PTR() to avoid freeing temporary variable @dev which is constructed. Well, as of 267f1e6da53 we have VIR_RETURN_PTR() macro so that we can avoid this pattern. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/util/virpci.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/util/virpci.c b/src/util/virpci.c index 6dc0a2711c..1a3d316399 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -1749,7 +1749,6 @@ virPCIDeviceNew(unsigned int domain, unsigned int slot, unsigned int function) { - virPCIDevicePtr ret =3D NULL; VIR_AUTOPTR(virPCIDevice) dev =3D NULL; VIR_AUTOFREE(char *) vendor =3D NULL; VIR_AUTOFREE(char *) product =3D NULL; @@ -1767,17 +1766,17 @@ virPCIDeviceNew(unsigned int domain, virReportError(VIR_ERR_INTERNAL_ERROR, _("dev->name buffer overflow: %.4x:%.2x:%.2x.%.1x"), domain, bus, slot, function); - goto cleanup; + return NULL; } if (virAsprintf(&dev->path, PCI_SYSFS "devices/%s/config", dev->name) < 0) - goto cleanup; + return NULL; =20 if (!virFileExists(dev->path)) { virReportSystemError(errno, _("Device %s not found: could not access %s"), dev->name, dev->path); - goto cleanup; + return NULL; } =20 vendor =3D virPCIDeviceReadID(dev, "vendor"); @@ -1787,7 +1786,7 @@ virPCIDeviceNew(unsigned int domain, virReportError(VIR_ERR_INTERNAL_ERROR, _("Failed to read product/vendor ID for %s"), dev->name); - goto cleanup; + return NULL; } =20 /* strings contain '0x' prefix */ @@ -1796,15 +1795,12 @@ virPCIDeviceNew(unsigned int domain, virReportError(VIR_ERR_INTERNAL_ERROR, _("dev->id buffer overflow: %s %s"), &vendor[2], &product[2]); - goto cleanup; + return NULL; } =20 VIR_DEBUG("%s %s: initialized", dev->id, dev->name); =20 - VIR_STEAL_PTR(ret, dev); - - cleanup: - return ret; + VIR_RETURN_PTR(dev); } =20 =20 --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561955; cv=none; d=zoho.com; s=zohoarc; b=HjeEb1RSl12Xl/Te3/YtFJGMwTg7/dUJeunsYMDYLzlIqlKGhoE9ajL0LjOddFIRqwM65UlQEiSxsOJgDTGrd5nGvK9oRMBPUxinEGF0rfJWKXHhM5sSeiHSzOgivE+WLcbHCWUCduxUKEyYpSA4ybDwZ6wW0a0yRJrun2f+FL4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561955; 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:ARC-Authentication-Results; bh=8eeD7vxTpsXIg0bJyZ/jMDA5FF08ijCYZRR1jWG6vUs=; b=ASgDAvL2e6MlZittlkUpMBs1f6p6aSCNy5BVfjHx1ED1MNrhaB3+XebPxlvWjZof3IespUmXGMszAwr0tSohyojHbqwU3XQe+JqG3nYPsAQpOraBavBVYAmmpBWQUf2n4X+nQs6dHoaYTgXDCnslCeje4t9Fp5vE7+rjCg45Zao= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1564561955878587.4181531017057; Wed, 31 Jul 2019 01:32:35 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 03ED0308FC4E; Wed, 31 Jul 2019 08:32:34 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id D048260C61; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 94A4F41F66; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WV1i027379 for ; Wed, 31 Jul 2019 04:32:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 74E715D70D; Wed, 31 Jul 2019 08:32:31 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 000475D6B2 for ; Wed, 31 Jul 2019 08:32:30 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:21 +0200 Message-Id: <1ebdcfef7c014bc325676505ed55d370407da621.1564561646.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 3/6] virPCIDevice: Make @name dynamically allocated X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 31 Jul 2019 08:32:34 +0000 (UTC) Content-Type: text/plain; charset="utf-8" In near future, the length restriction of PCI domain is going to be lifted. This means that our assumption that PCI address is 13 bytes long is no longer true. We can avoid this problem by making @name dynamically allocated and thus not bother with actual length of stringified PCI address. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/util/virpci.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/util/virpci.c b/src/util/virpci.c index 1a3d316399..6d8ddc3577 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -44,7 +44,6 @@ VIR_LOG_INIT("util.pci"); =20 #define PCI_SYSFS "/sys/bus/pci/" #define PCI_ID_LEN 10 /* "XXXX XXXX" */ -#define PCI_ADDR_LEN 13 /* "XXXX:XX:XX.X" */ =20 VIR_ENUM_IMPL(virPCIELinkSpeed, VIR_PCIE_LINK_SPEED_LAST, @@ -69,7 +68,7 @@ VIR_ENUM_IMPL(virPCIHeader, struct _virPCIDevice { virPCIDeviceAddress address; =20 - char name[PCI_ADDR_LEN]; /* domain:bus:slot.function */ + char *name; /* domain:bus:slot.function */ char id[PCI_ID_LEN]; /* product vendor */ char *path; =20 @@ -1761,13 +1760,11 @@ virPCIDeviceNew(unsigned int domain, dev->address.slot =3D slot; dev->address.function =3D function; =20 - if (snprintf(dev->name, sizeof(dev->name), "%.4x:%.2x:%.2x.%.1x", - domain, bus, slot, function) >=3D sizeof(dev->name)) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("dev->name buffer overflow: %.4x:%.2x:%.2x.%.1x"), - domain, bus, slot, function); + if (virAsprintf(&dev->name, + "%.4x:%.2x:%.2x.%.1x", + domain, bus, slot, function) < 0) return NULL; - } + if (virAsprintf(&dev->path, PCI_SYSFS "devices/%s/config", dev->name) < 0) return NULL; @@ -1816,7 +1813,8 @@ virPCIDeviceCopy(virPCIDevicePtr dev) *copy =3D *dev; copy->path =3D NULL; copy->used_by_drvname =3D copy->used_by_domname =3D NULL; - if (VIR_STRDUP(copy->path, dev->path) < 0 || + if (VIR_STRDUP(copy->name, dev->name) < 0 || + VIR_STRDUP(copy->path, dev->path) < 0 || VIR_STRDUP(copy->used_by_drvname, dev->used_by_drvname) < 0 || VIR_STRDUP(copy->used_by_domname, dev->used_by_domname) < 0) { goto error; @@ -1835,6 +1833,7 @@ virPCIDeviceFree(virPCIDevicePtr dev) if (!dev) return; VIR_DEBUG("%s %s: freeing", dev->id, dev->name); + VIR_FREE(dev->name); VIR_FREE(dev->path); VIR_FREE(dev->used_by_drvname); VIR_FREE(dev->used_by_domname); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561958; cv=none; d=zoho.com; s=zohoarc; b=SVsHi9vBJ3eCiR7dAoteYem+VorHDtxI794XqFRWQPSHlM8S/C5F2cw7mLvv3T+spdi0rWJR1KmwftIbGdhrTthAQrv2WFNbOTyTBUJn7JEjmcOLJGpcM3oMI8RBhBDG5RNy9ybERfRwdG0kOYz29kgH7xqs2FfnuMUcIm0Ymfo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561958; 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:ARC-Authentication-Results; bh=6KNPLq/Zlez50LDYsdq+CVqxq76BgV6dLOs0ZyHSgL8=; b=Bwyy4mn5WbEOPSKy+lltq/S+Z+XTtCSvtocU8+4icMTGS8PVqAWEdeKdyW8oPgHSlwcrZZn80jJ4LSflPE4oBMR7OYoy6YwAZ3pzsq5QCkrILXemZpGC7sp2Zw86ApOoClEn3sgPSscPGBYy2Z2XDZJiOkIElSN7goxoms7N39c= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 156456195853861.251142490404845; Wed, 31 Jul 2019 01:32:38 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 646D830860C6; Wed, 31 Jul 2019 08:32:37 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 3739A60925; Wed, 31 Jul 2019 08:32:37 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id ED1CF264CA; Wed, 31 Jul 2019 08:32:36 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WWns027386 for ; Wed, 31 Jul 2019 04:32:32 -0400 Received: by smtp.corp.redhat.com (Postfix) id 4210F5D70D; Wed, 31 Jul 2019 08:32:32 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id C0EE15D6B2 for ; Wed, 31 Jul 2019 08:32:31 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:22 +0200 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 4/6] lib: Unify PCI address formatting X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Wed, 31 Jul 2019 08:32:37 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The format string for a PCI address is copied over and over again, often with slight adjustments. Introduce global VIR_PCI_DEVICE_ADDRESS_FMT macro that holds the formatting string and use it wherever possible. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/conf/domain_audit.c | 3 ++- src/conf/domain_conf.c | 8 ++++---- src/libxl/libxl_driver.c | 14 +++++++++----- src/qemu/qemu_command.c | 3 ++- src/qemu/qemu_hotplug.c | 5 +++-- src/util/virpci.c | 19 +++++++++++-------- src/util/virpci.h | 2 ++ 7 files changed, 33 insertions(+), 21 deletions(-) diff --git a/src/conf/domain_audit.c b/src/conf/domain_audit.c index de7386d4c6..cc5a55a635 100644 --- a/src/conf/domain_audit.c +++ b/src/conf/domain_audit.c @@ -376,7 +376,8 @@ virDomainAuditHostdev(virDomainObjPtr vm, virDomainHost= devDefPtr hostdev, case VIR_DOMAIN_HOSTDEV_MODE_SUBSYS: switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - if (virAsprintfQuiet(&address, "%.4x:%.2x:%.2x.%.1x", + if (virAsprintfQuiet(&address, + VIR_PCI_DEVICE_ADDRESS_FMT, pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 441eb1a5a2..b5ab2bca93 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -16992,7 +16992,7 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainN= etDefPtr net) if (MACAddrSpecified && PCIAddrSpecified) { virReportError(VIR_ERR_DEVICE_MISSING, _("no device matching MAC address %s found on " - "%.4x:%.2x:%.2x.%.1x"), + VIR_PCI_DEVICE_ADDRESS_FMT), virMacAddrFormat(&net->mac, mac), net->info.addr.pci.domain, net->info.addr.pci.bus, @@ -17000,7 +17000,7 @@ virDomainNetFindIdx(virDomainDefPtr def, virDomainN= etDefPtr net) net->info.addr.pci.function); } else if (PCIAddrSpecified) { virReportError(VIR_ERR_DEVICE_MISSING, - _("no device found on %.4x:%.2x:%.2x.%.1x"), + _("no device found on " VIR_PCI_DEVICE_ADDRESS_= FMT), net->info.addr.pci.domain, net->info.addr.pci.bus, net->info.addr.pci.slot, @@ -21620,8 +21620,8 @@ virDomainDeviceInfoCheckABIStability(virDomainDevic= eInfoPtr src, src->addr.pci.slot !=3D dst->addr.pci.slot || src->addr.pci.function !=3D dst->addr.pci.function) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, - _("Target device PCI address %04x:%02x:%02x.%02= x " - "does not match source %04x:%02x:%02x.%02x"), + _("Target device PCI address " VIR_PCI_DEVICE_A= DDRESS_FMT + "does not match source " VIR_PCI_DEVICE_ADDRE= SS_FMT), dst->addr.pci.domain, dst->addr.pci.bus, dst->addr.pci.slot, dst->addr.pci.function, src->addr.pci.domain, src->addr.pci.bus, diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index 492028c487..48c23b43eb 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -3113,7 +3113,8 @@ libxlDomainAttachHostPCIDevice(libxlDriverPrivatePtr = driver, =20 if (virDomainHostdevFind(vm->def, hostdev, &found) >=3D 0) { virReportError(VIR_ERR_OPERATION_FAILED, - _("target pci device %.4x:%.2x:%.2x.%.1x already ex= ists"), + _("target pci device " VIR_PCI_DEVICE_ADDRESS_FMT + " already exists"), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); goto cleanup; @@ -3132,7 +3133,8 @@ libxlDomainAttachHostPCIDevice(libxlDriverPrivatePtr = driver, =20 if (libxl_device_pci_add(cfg->ctx, vm->def->id, &pcidev, 0) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, - _("libxenlight failed to attach pci device %.4x:%.2= x:%.2x.%.1x"), + _("libxenlight failed to attach pci device " + VIR_PCI_DEVICE_ADDRESS_FMT), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); goto error; @@ -3647,7 +3649,8 @@ libxlDomainDetachHostPCIDevice(libxlDriverPrivatePtr = driver, idx =3D virDomainHostdevFind(vm->def, hostdev, &detach); if (idx < 0) { virReportError(VIR_ERR_OPERATION_FAILED, - _("host pci device %.4x:%.2x:%.2x.%.1x not found"), + _("host pci device " VIR_PCI_DEVICE_ADDRESS_FMT + " not found"), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); goto cleanup; @@ -3655,7 +3658,8 @@ libxlDomainDetachHostPCIDevice(libxlDriverPrivatePtr = driver, =20 if (libxlIsMultiFunctionDevice(vm->def, detach->info)) { virReportError(VIR_ERR_OPERATION_FAILED, - _("cannot hot unplug multifunction PCI device: %.4x= :%.2x:%.2x.%.1x"), + _("cannot hot unplug multifunction PCI device: " + VIR_PCI_DEVICE_ADDRESS_FMT), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); goto error; @@ -3668,7 +3672,7 @@ libxlDomainDetachHostPCIDevice(libxlDriverPrivatePtr = driver, if (libxl_device_pci_remove(cfg->ctx, vm->def->id, &pcidev, 0) < 0) { virReportError(VIR_ERR_INTERNAL_ERROR, _("libxenlight failed to detach pci device " - "%.4x:%.2x:%.2x.%.1x"), + VIR_PCI_DEVICE_ADDRESS_FMT), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); goto error; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 1871c6ef81..c8494de785 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -4933,7 +4933,8 @@ qemuBuildPCIHostdevDevStr(const virDomainDef *def, } =20 virBufferAddLit(&buf, ",host=3D"); - virBufferAsprintf(&buf, "%.4x:%.2x:%.2x.%.1x", + virBufferAsprintf(&buf, + VIR_PCI_DEVICE_ADDRESS_FMT, pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 7501ae5029..d8be63b71c 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -5388,7 +5388,8 @@ qemuDomainDetachPrepHostdev(virDomainObjPtr vm, switch (subsys->type) { case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: virReportError(VIR_ERR_DEVICE_MISSING, - _("host pci device %.4x:%.2x:%.2x.%.1x not foun= d"), + _("host pci device " VIR_PCI_DEVICE_ADDRESS_FMT + " not found"), pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function); break; @@ -5874,7 +5875,7 @@ qemuDomainDetachDeviceLive(virDomainObjPtr vm, if (qemuIsMultiFunctionDevice(vm->def, info)) { virReportError(VIR_ERR_OPERATION_FAILED, _("cannot hot unplug %s device with multifunction P= CI guest address: " - "%.4x:%.2x:%.2x.%.1x"), + VIR_PCI_DEVICE_ADDRESS_FMT), virDomainDeviceTypeToString(detach.type), info->addr.pci.domain, info->addr.pci.bus, info->addr.pci.slot, info->addr.pci.function); diff --git a/src/util/virpci.c b/src/util/virpci.c index 6d8ddc3577..36b7f8b424 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -1734,7 +1734,8 @@ virPCIDeviceAddressAsString(virPCIDeviceAddressPtr ad= dr) { char *str; =20 - ignore_value(virAsprintf(&str, "%.4x:%.2x:%.2x.%.1x", + ignore_value(virAsprintf(&str, + VIR_PCI_DEVICE_ADDRESS_FMT, addr->domain, addr->bus, addr->slot, @@ -1761,7 +1762,7 @@ virPCIDeviceNew(unsigned int domain, dev->address.function =3D function; =20 if (virAsprintf(&dev->name, - "%.4x:%.2x:%.2x.%.1x", + VIR_PCI_DEVICE_ADDRESS_FMT, domain, bus, slot, function) < 0) return NULL; =20 @@ -2120,7 +2121,7 @@ int virPCIDeviceFileIterate(virPCIDevicePtr dev, struct dirent *ent; int direrr; =20 - if (virAsprintf(&pcidir, "/sys/bus/pci/devices/%04x:%02x:%02x.%x", + if (virAsprintf(&pcidir, "/sys/bus/pci/devices/" VIR_PCI_DEVICE_ADDRES= S_FMT, dev->address.domain, dev->address.bus, dev->address.slot, dev->address.function) < 0) goto cleanup; @@ -2174,7 +2175,7 @@ virPCIDeviceAddressIOMMUGroupIterate(virPCIDeviceAddr= essPtr orig, int direrr; =20 if (virAsprintf(&groupPath, - PCI_SYSFS "devices/%04x:%02x:%02x.%x/iommu_group/devic= es", + PCI_SYSFS "devices/" VIR_PCI_DEVICE_ADDRESS_FMT "/iomm= u_group/devices", orig->domain, orig->bus, orig->slot, orig->function) <= 0) goto cleanup; =20 @@ -2323,8 +2324,9 @@ virPCIDeviceAddressGetIOMMUGroupNum(virPCIDeviceAddre= ssPtr addr) const char *groupNumStr; unsigned int groupNum; =20 - if (virAsprintf(&devName, "%.4x:%.2x:%.2x.%.1x", addr->domain, - addr->bus, addr->slot, addr->function) < 0) + if (virAsprintf(&devName, + VIR_PCI_DEVICE_ADDRESS_FMT, + addr->domain, addr->bus, addr->slot, addr->function) <= 0) return -1; =20 if (!(devPath =3D virPCIFile(devName, "iommu_group"))) @@ -2648,7 +2650,8 @@ virPCIGetPhysicalFunction(const char *vf_sysfs_path, } =20 if ((*pf =3D virPCIGetDeviceAddressFromSysfsLink(device_link))) { - VIR_DEBUG("PF for VF device '%s': %.4x:%.2x:%.2x.%.1x", vf_sysfs_p= ath, + VIR_DEBUG("PF for VF device '%s': " VIR_PCI_DEVICE_ADDRESS_FMT, + vf_sysfs_path, (*pf)->domain, (*pf)->bus, (*pf)->slot, (*pf)->function); } =20 @@ -2806,7 +2809,7 @@ virPCIDeviceAddressGetSysfsFile(virPCIDeviceAddressPt= r addr, char **pci_sysfs_device_link) { if (virAsprintf(pci_sysfs_device_link, - PCI_SYSFS "devices/%04x:%02x:%02x.%x", + PCI_SYSFS "devices/" VIR_PCI_DEVICE_ADDRESS_FMT, addr->domain, addr->bus, addr->slot, addr->function) < 0) return -1; diff --git a/src/util/virpci.h b/src/util/virpci.h index 457be3c929..c13e7cd407 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -44,6 +44,8 @@ struct _virZPCIDeviceAddress { unsigned int fid; }; =20 +#define VIR_PCI_DEVICE_ADDRESS_FMT "%.4x:%.2x:%.2x.%.1x" + struct _virPCIDeviceAddress { unsigned int domain; unsigned int bus; --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561961; cv=none; d=zoho.com; s=zohoarc; b=EWB7OzGI0jK/TO7TDGkLgBKlYsuvQD27gJSBTNiJlASGwrO1oyUZ7ThREZGQB9gQyGFEuR5H1j+IrePGOaY3nt/NZTSOGG7T4stdb3sUZhD1FEqs0nrzOD/Lj5Xp0WMAq13ovM51a8nskxbxqvXZxe72QK53WML30VFauw8PZBY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561961; 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:ARC-Authentication-Results; bh=wgzJJ7VvvKokHz689s+a2MILPlaeoRfeiOPVcfJmqf8=; b=OM5jJ8jQTSME9QufvpUlUchj3EkmHr13XOMWGjDkMI6G9J/IJzlFyCWffzpOudsl9IIvbwX8SvwrY2s5wMFMDT8TY8D+UH3VI/3/2EJezErqhnICVeZd7xuGAGoEfNbnk4R3xEH/xSbPunJlL1VEu7T/p/VauyVoBiomqo2UuEY= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1564561961789378.21327795694333; Wed, 31 Jul 2019 01:32:41 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 6EDF485542; Wed, 31 Jul 2019 08:32:40 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E487F1001959; Wed, 31 Jul 2019 08:32:39 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 923BF3CBD; Wed, 31 Jul 2019 08:32:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WXsR027391 for ; Wed, 31 Jul 2019 04:32:33 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0DCCF5D70D; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 8D9095D6B2 for ; Wed, 31 Jul 2019 08:32:32 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:23 +0200 Message-Id: <72478dc22c6b846abca995d5da2e2bc065ac61e3.1564561646.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 5/6] lib: Format PCI address differently X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Wed, 31 Jul 2019 08:32:41 +0000 (UTC) Content-Type: text/plain; charset="utf-8" Currently, the way we format PCI address is using printf-s precision, e.g. "%.4x". This works if we don't want to print any value outside of bounds (which is usually the case). However, turns out, PCI domain can be 0x10000 which doesn't work well with our format strings. However, if we change the format string to "%04x" then we still pad small values with zeroes but also we are able to print values that are larger than four digits. In fact, this format string used by kernel to print a PCI address: "%04x:%02x:%02x.%d" The other three format strings (for bus, device and function) are changed too, so that we use the same format string as kernel. Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- src/conf/device_conf.c | 4 ++-- src/conf/domain_addr.c | 10 +++++----- src/conf/domain_conf.c | 4 ++-- src/conf/node_device_conf.c | 12 ++++++------ src/util/virpci.h | 2 +- tools/virsh-domain.c | 4 ++-- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/conf/device_conf.c b/src/conf/device_conf.c index b28f30dfc5..4c57f0995f 100644 --- a/src/conf/device_conf.c +++ b/src/conf/device_conf.c @@ -293,8 +293,8 @@ virPCIDeviceAddressFormat(virBufferPtr buf, virPCIDeviceAddress addr, bool includeTypeInAddr) { - virBufferAsprintf(buf, "
\n", + virBufferAsprintf(buf, "
\n", includeTypeInAddr ? "type=3D'pci' " : "", addr.domain, addr.bus, diff --git a/src/conf/domain_addr.c b/src/conf/domain_addr.c index 04c4e6d7e1..4e02c43375 100644 --- a/src/conf/domain_addr.c +++ b/src/conf/domain_addr.c @@ -868,7 +868,7 @@ virDomainPCIAddressReserveAddrInternal(virDomainPCIAddr= essSetPtr addrs, /* The first device decides the isolation group for the * entire bus */ bus->isolationGroup =3D isolationGroup; - VIR_DEBUG("PCI bus %.4x:%.2x assigned isolation group %u because o= f " + VIR_DEBUG("PCI bus %04x:%02x assigned isolation group %u because o= f " "first device %s", addr->domain, addr->bus, isolationGroup, addrStr); } else if (bus->isolationGroup !=3D isolationGroup && fromConfig) { @@ -879,7 +879,7 @@ virDomainPCIAddressReserveAddrInternal(virDomainPCIAddr= essSetPtr addrs, * back to the default (because at that point isolation can't * be guaranteed anymore) */ bus->isolationGroup =3D 0; - VIR_DEBUG("PCI bus %.4x:%.2x assigned isolation group %u because o= f " + VIR_DEBUG("PCI bus %04x:%02x assigned isolation group %u because o= f " "user assigned address %s", addr->domain, addr->bus, isolationGroup, addrStr); } @@ -1114,7 +1114,7 @@ virDomainPCIAddressFindUnusedFunctionOnBus(virDomainP= CIAddressBusPtr bus, =20 if (!virDomainPCIAddressFlagsCompatible(searchAddr, addrStr, bus->flag= s, flags, false, false)) { - VIR_DEBUG("PCI bus %.4x:%.2x is not compatible with the device", + VIR_DEBUG("PCI bus %04x:%02x is not compatible with the device", searchAddr->domain, searchAddr->bus); } else { while (searchAddr->slot <=3D bus->maxSlot) { @@ -1150,7 +1150,7 @@ virDomainPCIAddressFindUnusedFunctionOnBus(virDomainP= CIAddressBusPtr bus, } } =20 - VIR_DEBUG("PCI slot %.4x:%.2x:%.2x already in use", + VIR_DEBUG("PCI slot %04x:%02x:%02x already in use", searchAddr->domain, searchAddr->bus, searchAddr->slo= t); searchAddr->slot++; } @@ -1248,7 +1248,7 @@ virDomainPCIAddressGetNextAddr(virDomainPCIAddressSet= Ptr addrs, return -1; =20 success: - VIR_DEBUG("Found free PCI slot %.4x:%.2x:%.2x", + VIR_DEBUG("Found free PCI slot %04x:%02x:%02x", a.domain, a.bus, a.slot); *next_addr =3D a; return 0; diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index b5ab2bca93..aadb8a9162 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -7091,8 +7091,8 @@ virDomainDeviceInfoFormat(virBufferPtr buf, switch ((virDomainDeviceAddressType) info->type) { case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI: if (!virPCIDeviceAddressIsEmpty(&info->addr.pci)) { - virBufferAsprintf(&attrBuf, " domain=3D'0x%.4x' bus=3D'0x%.2x'= " - "slot=3D'0x%.2x' function=3D'0x%.1x'", + virBufferAsprintf(&attrBuf, " domain=3D'0x%04x' bus=3D'0x%02x'= " + "slot=3D'0x%02x' function=3D'0x%d'", info->addr.pci.domain, info->addr.pci.bus, info->addr.pci.slot, diff --git a/src/conf/node_device_conf.c b/src/conf/node_device_conf.c index 4ef92d5129..e51371de89 100644 --- a/src/conf/node_device_conf.c +++ b/src/conf/node_device_conf.c @@ -239,8 +239,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, virBufferAddLit(buf, "\n"); virBufferAdjustIndent(buf, 2); virBufferAsprintf(buf, - "
\n", + "
\n", data->pci_dev.physical_function->domain, data->pci_dev.physical_function->bus, data->pci_dev.physical_function->slot, @@ -260,8 +260,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, virBufferAdjustIndent(buf, 2); for (i =3D 0; i < data->pci_dev.num_virtual_functions; i++) { virBufferAsprintf(buf, - "
\n= ", + "
\n", data->pci_dev.virtual_functions[i]->doma= in, data->pci_dev.virtual_functions[i]->bus, data->pci_dev.virtual_functions[i]->slot, @@ -302,8 +302,8 @@ virNodeDeviceCapPCIDefFormat(virBufferPtr buf, virBufferAdjustIndent(buf, 2); for (i =3D 0; i < data->pci_dev.nIommuGroupDevices; i++) { virBufferAsprintf(buf, - "
\n", + "
\n", data->pci_dev.iommuGroupDevices[i]->domain, data->pci_dev.iommuGroupDevices[i]->bus, data->pci_dev.iommuGroupDevices[i]->slot, diff --git a/src/util/virpci.h b/src/util/virpci.h index c13e7cd407..e333146ac0 100644 --- a/src/util/virpci.h +++ b/src/util/virpci.h @@ -44,7 +44,7 @@ struct _virZPCIDeviceAddress { unsigned int fid; }; =20 -#define VIR_PCI_DEVICE_ADDRESS_FMT "%.4x:%.2x:%.2x.%.1x" +#define VIR_PCI_DEVICE_ADDRESS_FMT "%04x:%02x:%02x.%d" =20 struct _virPCIDeviceAddress { unsigned int domain; diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index e79dc75342..ccda71d7e0 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -1006,8 +1006,8 @@ cmdAttachInterface(vshControl *ctl, const vshCmd *cmd) =20 virBufferAddLit(&buf, "\n"); virBufferAdjustIndent(&buf, 2); - virBufferAsprintf(&buf, "
\n", + virBufferAsprintf(&buf, "
\n", pciAddr.domain, pciAddr.bus, pciAddr.slot, pciAddr.function); virBufferAdjustIndent(&buf, -2); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Sat May 4 08:14:15 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 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=1564561965; cv=none; d=zoho.com; s=zohoarc; b=ja2M3PZK2dep/3/Ofd2UHtYkecu3u+ujH3V/Tv/DmYY2of6x06PS1/osCv++KYXX9XZTp9Aez8+gGQdPxnJ5AYB20bdO81lMYMQrcW+jsJ++IGgvHz7kAtAOnW9G8MLknqSqcs6fqTKxDdRZmrdyGlXPyfP28zts5Kl708/YojM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1564561965; 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:ARC-Authentication-Results; bh=uUK+5HnJgX5AXGjsj7jJ4CADAAl/K4TuSyU/qMeInmk=; b=a9x8v3JWRt7EuOuJzjIhrGumcSJfTSy2feDVBvZFtIIFBnMQ/iiLKlbdll0DajtKJBqY9z2ZqTdBPbCPeZZCr1uoTDIhEX/SPjRwz5/G3hEtX3hm79kYtTI9CdDVeJgKsmmrIUPUF26v3q98qemY1Iog8LWB7YGn73Gt0h1fjec= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1564561965118605.2542418673454; Wed, 31 Jul 2019 01:32:45 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E08073084025; Wed, 31 Jul 2019 08:32:43 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B4E2B5D6D0; Wed, 31 Jul 2019 08:32:43 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 3305819731; Wed, 31 Jul 2019 08:32:43 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x6V8WXGM027400 for ; Wed, 31 Jul 2019 04:32:33 -0400 Received: by smtp.corp.redhat.com (Postfix) id CCFFB5D6B2; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) Received: from moe.brq.redhat.com (unknown [10.43.2.30]) by smtp.corp.redhat.com (Postfix) with ESMTP id 58E9B5D70D for ; Wed, 31 Jul 2019 08:32:33 +0000 (UTC) From: Michal Privoznik To: libvir-list@redhat.com Date: Wed, 31 Jul 2019 10:32:24 +0200 Message-Id: <5c63accbe35d7229b4f8951d16853a60f3f48f24.1564561646.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 6/6] virpci: Allow greater PCI domain value in virPCIDeviceAddressIsValid X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.40]); Wed, 31 Jul 2019 08:32:44 +0000 (UTC) Content-Type: text/plain; charset="utf-8" There is no restriction on maximum value of PCI domain. In fact, Linux kernel uses plain atomic inc when assigning PCI domains: drivers/pci/pci.c:static int pci_get_new_domain_nr(void) drivers/pci/pci.c-{ drivers/pci/pci.c- return atomic_inc_return(&__domain_nr); drivers/pci/pci.c-} Of course, this function is called only if kernel was compiled without PCI domain support or ACPI did not provide PCI domain. However, QEMU still has the same restriction as us: in set_pci_host_devaddr() QEMU checks if domain isn't greater than 0xffff. But one can argue that that's a QEMU limitation. We still want to be able to cope with other hypervisors that don't have this limitation (possibly). Signed-off-by: Michal Privoznik Reviewed-by: J=C3=A1n Tomko --- docs/schemas/basictypes.rng | 2 +- src/util/virpci.c | 2 +- tests/qemuxml2argvdata/pci-domain-invalid.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng index 70d2101b78..81465273c8 100644 --- a/docs/schemas/basictypes.rng +++ b/docs/schemas/basictypes.rng @@ -324,7 +324,7 @@ =20 - + diff --git a/src/util/virpci.c b/src/util/virpci.c index 36b7f8b424..bc7ff46194 100644 --- a/src/util/virpci.c +++ b/src/util/virpci.c @@ -1668,7 +1668,7 @@ bool virPCIDeviceAddressIsValid(virPCIDeviceAddressPtr addr, bool report) { - if (addr->domain > 0xFFFF) { + if (addr->domain > 0xFFFFFFFF) { if (report) virReportError(VIR_ERR_XML_ERROR, _("Invalid PCI address domain=3D'0x%x', " diff --git a/tests/qemuxml2argvdata/pci-domain-invalid.xml b/tests/qemuxml2= argvdata/pci-domain-invalid.xml index 1ac56fc703..21f1dc98af 100644 --- a/tests/qemuxml2argvdata/pci-domain-invalid.xml +++ b/tests/qemuxml2argvdata/pci-domain-invalid.xml @@ -26,7 +26,7 @@ -
+
--=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list