From nobody Sun Apr 28 00:17:51 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=1561662283; cv=none; d=zoho.com; s=zohoarc; b=YFFDqSrGY2WUGDIZWB+MRsMX+jHcKXY3nQX6Z2HVuL4uqDt4AUNE/T60t26nYyuaipE6H6ViosGbrltoQ0ObGVT9+fERrqvw7cBvDnfSHRMSVcgErUJSdo5CLABpw7DX1Uum2/PUB4eTilrHl2rphA3dp9ZAIFzpaAq0KJYEqwg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1561662283; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=9TdP+F4dJ99RFZWVXaUbxr9QZErCR0NwnPx5v4lcf+s=; b=C19w9Hhtb6QA27Mj2sEOs8sGNkTWuIYuFBDB8ym2BK83zpy+6DdiNh7/DlhRQvv7HyCI71wyQ4KIy26OJN5qkwa1rqtMmU4LRhbB09z3TNUJc3bbYFNXqD4tQoUEZe59JdksYa82ewFWhDhtxVuzqO8KxZBjGF923iJWRLpReM0= 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 1561662283249230.25794265847856; Thu, 27 Jun 2019 12:04:43 -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 6A485308213C; Thu, 27 Jun 2019 19:04:05 +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 636E410018FB; Thu, 27 Jun 2019 19:03:51 +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 B22611806B19; Thu, 27 Jun 2019 19:03:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x5RJ3Vdp025855 for ; Thu, 27 Jun 2019 15:03:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 0F31A1001B12; Thu, 27 Jun 2019 19:03:31 +0000 (UTC) Received: from aegolius.redhat.com (ovpn-116-190.phx2.redhat.com [10.3.116.190]) by smtp.corp.redhat.com (Postfix) with ESMTPS id B15801001959 for ; Thu, 27 Jun 2019 19:03:28 +0000 (UTC) From: Jonathon Jongsma To: libvir-list@redhat.com Date: Thu, 27 Jun 2019 14:03:18 -0500 Message-Id: <20190627190318.22813-1-jjongsma@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH] qemu: add bochs-display device 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.42]); Thu, 27 Jun 2019 19:04:38 +0000 (UTC) Content-Type: text/plain; charset="utf-8" qemu provides the bochs-display video device since 3.0. This patch adds support for this device in libvirt. See Gerd's post for more details: https://www.kraxel.org/blog/2018/10/qemu-vga-emulation-and-bochs-display/ Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=3D1643404 Signed-off-by: Jonathon Jongsma --- Note that the documentation may need to be changed depending on which versi= on the patch makes it into. I suppose it'll miss 5.5.0 since we're in freeze right now. Note: depending on which distribution you're using, you may need to copy th= e vgabios into place in order to test. For example: $ sudo ln -s /path/to/qemu/pc-bios/vgabios-bochs-display.bin /usr/share/qe= mu/ docs/formatdomain.html.in | 5 +-- docs/schemas/domaincommon.rng | 1 + src/conf/domain_conf.c | 2 ++ src/conf/domain_conf.h | 1 + src/qemu/qemu_capabilities.c | 4 +++ src/qemu/qemu_capabilities.h | 3 ++ src/qemu/qemu_command.c | 18 +++++++---- src/qemu/qemu_domain.c | 1 + src/qemu/qemu_domain_address.c | 1 + .../qemucapabilitiesdata/caps_3.0.0.ppc64.xml | 1 + .../caps_3.0.0.x86_64.xml | 1 + .../qemucapabilitiesdata/caps_3.1.0.ppc64.xml | 1 + .../caps_3.1.0.x86_64.xml | 1 + .../caps_4.0.0.aarch64.xml | 1 + .../qemucapabilitiesdata/caps_4.0.0.ppc64.xml | 1 + .../caps_4.0.0.riscv32.xml | 1 + .../caps_4.0.0.riscv64.xml | 1 + .../caps_4.0.0.x86_64.xml | 1 + .../caps_4.1.0.x86_64.xml | 1 + .../video-bochs-display-device.args | 32 +++++++++++++++++++ .../video-bochs-display-device.xml | 29 +++++++++++++++++ tests/qemuxml2argvtest.c | 3 ++ 22 files changed, 102 insertions(+), 8 deletions(-) create mode 100644 tests/qemuxml2argvdata/video-bochs-display-device.args create mode 100644 tests/qemuxml2argvdata/video-bochs-display-device.xml diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in index a7a6ec32a5..9298ee7b16 100644 --- a/docs/formatdomain.html.in +++ b/docs/formatdomain.html.in @@ -6990,8 +6990,9 @@ qemu-kvm -net nic,model=3D? /dev/null attribute which takes the value "vga", "cirrus", "vmvga", "xen", "vbox", "qxl" (since 0.8.6), "virtio" (since 1.3.0), - "gop" (since 3.2.0), or - "none" (since 4.6.0) + "gop" (since 3.2.0), + "none" (since 4.6.0, or "bochs-disp= lay" + (since 5.5.0) depending on the hypervisor features available. The purpose of the type none is to instruct libvirt= not to add a default video device in the guest (see the paragraph ab= ove). diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng index 31db599ab9..2ccb393432 100644 --- a/docs/schemas/domaincommon.rng +++ b/docs/schemas/domaincommon.rng @@ -3584,6 +3584,7 @@ virtio gop none + bochs-display diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 3323c9a5b1..f6da230c18 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -738,6 +738,7 @@ VIR_ENUM_IMPL(virDomainVideo, "virtio", "gop", "none", + "bochs-display", ); =20 VIR_ENUM_IMPL(virDomainVideoVGAConf, @@ -15158,6 +15159,7 @@ virDomainVideoDefaultRAM(const virDomainDef *def, case VIR_DOMAIN_VIDEO_TYPE_VGA: case VIR_DOMAIN_VIDEO_TYPE_CIRRUS: case VIR_DOMAIN_VIDEO_TYPE_VMVGA: + case VIR_DOMAIN_VIDEO_TYPE_BOCHS_DISPLAY: if (def->virtType =3D=3D VIR_DOMAIN_VIRT_VBOX) return 8 * 1024; else if (def->virtType =3D=3D VIR_DOMAIN_VIRT_VMWARE) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index c1b5fc1337..e8e468426b 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -1385,6 +1385,7 @@ typedef enum { VIR_DOMAIN_VIDEO_TYPE_VIRTIO, VIR_DOMAIN_VIDEO_TYPE_GOP, VIR_DOMAIN_VIDEO_TYPE_NONE, + VIR_DOMAIN_VIDEO_TYPE_BOCHS_DISPLAY, =20 VIR_DOMAIN_VIDEO_TYPE_LAST } virDomainVideoType; diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 02e84edc15..ec68d05112 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -533,6 +533,9 @@ VIR_ENUM_IMPL(virQEMUCaps, "x86-max-cpu", "cpu-unavailable-features", "canonical-cpu-features", + + /* 330 */ + "bochs-display", ); =20 =20 @@ -1121,6 +1124,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[= ] =3D { { "virtio-serial-pci-transitional", QEMU_CAPS_VIRTIO_PCI_TRANSITIONAL = }, { "virtio-serial-pci-non-transitional", QEMU_CAPS_VIRTIO_PCI_TRANSITIO= NAL }, { "max-x86_64-cpu", QEMU_CAPS_X86_MAX_CPU }, + { "bochs-display", QEMU_CAPS_DEVICE_BOCHS_DISPLAY }, }; =20 static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[]= =3D { diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 915ba6cb2e..3cb56e63f4 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -515,6 +515,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_CPU_UNAVAILABLE_FEATURES, /* "unavailable-features" CPU prop= erty */ QEMU_CAPS_CANONICAL_CPU_FEATURES, /* avoid CPU feature aliases */ =20 + /* 335 */ + QEMU_CAPS_DEVICE_BOCHS_DISPLAY, /* -device bochs-display */ + QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; =20 diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 688dc324c6..5455b42f4a 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -111,6 +111,7 @@ VIR_ENUM_IMPL(qemuVideo, "", /* no need for virtio */ "" /* don't support gop */, "" /* 'none' doesn't make sense here */, + "bochs-display", ); =20 VIR_ENUM_DECL(qemuDeviceVideo); @@ -128,6 +129,7 @@ VIR_ENUM_IMPL(qemuDeviceVideo, "virtio-vga", "" /* don't support gop */, "" /* 'none' doesn't make sense here */, + "bochs-display", ); =20 VIR_ENUM_DECL(qemuDeviceVideoSecondary); @@ -145,6 +147,7 @@ VIR_ENUM_IMPL(qemuDeviceVideoSecondary, "virtio-gpu", "" /* don't support gop */, "" /* 'none' doesn't make sense here */, + "bochs-display", ); =20 VIR_ENUM_DECL(qemuSoundCodec); @@ -4748,13 +4751,16 @@ qemuBuildDeviceVideoStr(const virDomainDef *def, if (video->heads) virBufferAsprintf(&buf, ",max_outputs=3D%u", video->heads); } - } else if (video->vram && - ((video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_VGA && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_VGA_VGAMEM)) || - (video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_VMVGA && - virQEMUCapsGet(qemuCaps, QEMU_CAPS_VMWARE_SVGA_VGAMEM)))) { + } else if (video->vram) { + if ((video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_VGA && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_VGA_VGAMEM)) || + (video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_VMVGA && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_VMWARE_SVGA_VGAMEM))) { =20 - virBufferAsprintf(&buf, ",vgamem_mb=3D%u", video->vram / 1024); + virBufferAsprintf(&buf, ",vgamem_mb=3D%u", video->vram / 1024); + } else if (video->type =3D=3D VIR_DOMAIN_VIDEO_TYPE_BOCHS_DISPLAY)= { + virBufferAsprintf(&buf, ",vgamem=3D%uk", video->vram); + } } =20 if (qemuBuildDeviceAddressStr(&buf, def, &video->info, qemuCaps) < 0) diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index d71d9b3273..4e7ed45ff9 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4969,6 +4969,7 @@ qemuDomainDeviceDefValidateVideo(const virDomainVideo= Def *video) case VIR_DOMAIN_VIDEO_TYPE_VMVGA: case VIR_DOMAIN_VIDEO_TYPE_QXL: case VIR_DOMAIN_VIDEO_TYPE_VIRTIO: + case VIR_DOMAIN_VIDEO_TYPE_BOCHS_DISPLAY: case VIR_DOMAIN_VIDEO_TYPE_LAST: break; } diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c index 4b99e8ca93..677a3f0499 100644 --- a/src/qemu/qemu_domain_address.c +++ b/src/qemu/qemu_domain_address.c @@ -929,6 +929,7 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDevic= eDefPtr dev, case VIR_DOMAIN_VIDEO_TYPE_VBOX: case VIR_DOMAIN_VIDEO_TYPE_QXL: case VIR_DOMAIN_VIDEO_TYPE_PARALLELS: + case VIR_DOMAIN_VIDEO_TYPE_BOCHS_DISPLAY: return pciFlags; =20 case VIR_DOMAIN_VIDEO_TYPE_DEFAULT: diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_3.0.0.ppc64.xml index 40718981a8..61be1df782 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml @@ -151,6 +151,7 @@ + 2012050 0 42900757 diff --git a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_3.0.0.x86_64.xml index c6394db602..7a322030bd 100644 --- a/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml @@ -198,6 +198,7 @@ + 3000000 0 43100757 diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_3.1.0.ppc64.xml index ee6921ff92..400dc45be4 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml @@ -156,6 +156,7 @@ + 3000091 0 42900758 diff --git a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_3.1.0.x86_64.xml index a8cb061bf3..434c644ad4 100644 --- a/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml @@ -201,6 +201,7 @@ + 3000092 0 43100758 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.aarch64.xml index 250b7edd52..8fe369f518 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.aarch64.xml @@ -163,6 +163,7 @@ + 4000000 0 61700758 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml b/tests/qemuca= pabilitiesdata/caps_4.0.0.ppc64.xml index 24b55002a6..2df230c4f7 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml @@ -168,6 +168,7 @@ + 4000000 0 42900758 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.riscv32.xml index 230e1e7c99..f4acda457a 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv32.xml @@ -166,6 +166,7 @@ + 4000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml b/tests/qemu= capabilitiesdata/caps_4.0.0.riscv64.xml index 4b2f4cf628..e71d83ee06 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.riscv64.xml @@ -166,6 +166,7 @@ + 4000000 0 0 diff --git a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.0.0.x86_64.xml index 716b756979..1d44a5a1ba 100644 --- a/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml @@ -205,6 +205,7 @@ + 4000000 0 43100758 diff --git a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml b/tests/qemuc= apabilitiesdata/caps_4.1.0.x86_64.xml index 9cbf65b405..f336aeb48c 100644 --- a/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml +++ b/tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml @@ -207,6 +207,7 @@ + 4000050 0 43100759 diff --git a/tests/qemuxml2argvdata/video-bochs-display-device.args b/tests= /qemuxml2argvdata/video-bochs-display-device.args new file mode 100644 index 0000000000..f88e9ccb04 --- /dev/null +++ b/tests/qemuxml2argvdata/video-bochs-display-device.args @@ -0,0 +1,32 @@ +LC_ALL=3DC \ +PATH=3D/bin \ +HOME=3D/tmp/lib/domain--1-QEMUGuest1 \ +USER=3Dtest \ +LOGNAME=3Dtest \ +XDG_DATA_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=3D/tmp/lib/domain--1-QEMUGuest1/.config \ +QEMU_AUDIO_DRV=3Dnone \ +/usr/bin/qemu-system-i686 \ +-name QEMUGuest1 \ +-S \ +-machine pc,accel=3Dtcg,usb=3Doff,dump-guest-core=3Doff \ +-m 1024 \ +-realtime mlock=3Doff \ +-smp 1,sockets=3D1,cores=3D1,threads=3D1 \ +-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=3Dcharmonitor,path=3D/tmp/lib/domain--1-QEMUGuest1/moni= tor.sock,\ +server,nowait \ +-mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dcontrol \ +-rtc base=3Dutc \ +-no-shutdown \ +-no-acpi \ +-usb \ +-drive file=3D/var/lib/libvirt/images/QEMUGuest1,format=3Dqcow2,if=3Dnone,\ +id=3Ddrive-ide0-0-0,cache=3Dnone \ +-device ide-hd,bus=3Dide.0,unit=3D0,drive=3Ddrive-ide0-0-0,id=3Dide0-0-0,b= ootindex=3D1 \ +-device bochs-display,id=3Dvideo0,vgamem=3D16384k,bus=3Dpci.0,addr=3D0x2 \ +-device virtio-balloon-pci,id=3Dballoon0,bus=3Dpci.0,addr=3D0x3 diff --git a/tests/qemuxml2argvdata/video-bochs-display-device.xml b/tests/= qemuxml2argvdata/video-bochs-display-device.xml new file mode 100644 index 0000000000..f64fed4c7e --- /dev/null +++ b/tests/qemuxml2argvdata/video-bochs-display-device.xml @@ -0,0 +1,29 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 1048576 + 1048576 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu-system-i686 + + + + +
+ + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 91ca35d469..07b3689776 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2006,6 +2006,9 @@ mymain(void) QEMU_CAPS_DEVICE_VIRTIO_VGA, QEMU_CAPS_DEVICE_VIDEO_PRIMARY, QEMU_CAPS_VIRTIO_GPU_MAX_OUTPUTS); + DO_TEST("video-bochs-display-device", + QEMU_CAPS_DEVICE_BOCHS_DISPLAY, + QEMU_CAPS_DEVICE_VIDEO_PRIMARY); DO_TEST("video-none-device", QEMU_CAPS_VNC); DO_TEST_PARSE_ERROR("video-invalid-multiple-devices", NONE); --=20 2.20.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list