diff --git a/libvirt-0.9.6-qemu-make-PCI-multifunction-support-more-manual.patch b/libvirt-0.9.6-qemu-make-PCI-multifunction-support-more-manual.patch deleted file mode 100644 index f4c54e2..0000000 --- a/libvirt-0.9.6-qemu-make-PCI-multifunction-support-more-manual.patch +++ /dev/null @@ -1,581 +0,0 @@ -From 3962198d82ab90d21144479c1d822db5d1f640a4 Mon Sep 17 00:00:00 2001 -From: Laine Stump -Date: Wed, 28 Sep 2011 14:19:59 -0400 -Subject: [PATCH 2/2] qemu: make PCI multifunction support more manual - -(This is a merge of cherry-picking upstream commits -c329db7180d77c8077b9f9cd167a71d7f347227a and -be7bc4d5ccb502c2da85d3b3db804fd53b70449e (a one liner). There were no -merge conflicts.) - -When support for was added for PCI multifunction cards (in commit -9f8baf, first included in libvirt 0.9.3), it was done by always -turning on the multifunction bit for all PCI devices. Since that time -it has been realized that this is not an ideal solution, and that the -multifunction bit must be selectively turned on. For example, see - - https://bugzilla.redhat.com/show_bug.cgi?id=742836 - -and the discussion before and after - - https://www.redhat.com/archives/libvir-list/2011-September/msg01036.html - -This patch modifies multifunction support so that the multifunction=on -option is only added to the qemu commandline for a device if its PCI -
definition has the attribute "multifunction='on'", e.g.: - -
- -In practice, the multifunction bit should only be turned on if -function='0' AND other functions will be used in the same slot - it -usually isn't needed for functions 1-7 (although there are apparently -some exceptions, e.g. the Intel X53 according to the QEMU source -code), and should never be set if only function 0 will be used in the -slot. The test cases have been changed accordingly to illustrate. - -With this patch in place, if a user attempts to assign multiple -functions in a slot without setting the multifunction bit for function -0, libvirt will issue an error when the domain is defined, and the -define operation will fail. In the future, we may decide to detect -this situation and automatically add multifunction=on to avoid the -error; even then it will still be useful to have a manual method of -turning on multifunction since, as stated above, there are some -devices that excpect it to be turned on for all functions in a slot. - -A side effect of this patch is that attempts to use the same PCI -address for two different devices will now log an error (previously -this would cause the domain define operation to fail, but there would -be no log message generated). Because the function doing this log was -almost completely rewritten, I didn't think it worthwhile to make a -separate patch for that fix (the entire patch would immediately be -obsoleted). ---- - docs/formatdomain.html.in | 29 +++++-- - docs/schemas/domaincommon.rng | 8 ++ - src/conf/domain_conf.c | 22 +++++- - src/conf/domain_conf.h | 11 +++- - src/libvirt_private.syms | 2 + - src/qemu/qemu_command.c | 81 ++++++++++++++++---- - .../qemuxml2argv-multifunction-pci-device.args | 18 ++-- - .../qemuxml2argv-multifunction-pci-device.xml | 6 +- - .../qemuxml2argv-usb-ich9-companion.args | 15 ++-- - .../qemuxml2argv-usb-ich9-companion.xml | 2 +- - .../qemuxml2argv-usb-ich9-ehci-addr.args | 7 ++- - .../qemuxml2argv-usb-piix3-controller.args | 7 ++- - tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args | 10 +- - tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml | 2 +- - tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args | 25 ++++--- - tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml | 4 +- - 16 files changed, 183 insertions(+), 66 deletions(-) - -diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in -index 0a7abaf..390476d 100644 ---- a/docs/formatdomain.html.in -+++ b/docs/formatdomain.html.in -@@ -1113,10 +1113,14 @@ - The type attribute is mandatory, and is typically - "pci" or "drive". For a "pci" controller, additional - attributes for bus, slot, -- and function must be present, as well as an -- optional domain. For a "drive" controller, -- additional attributes controller, bus, -+ and function must be present, as well as -+ optional domain and multifunction. -+ Multifunction defaults to 'off'; any other value requires -+ QEMU 0.1.3 and libvirt 0.9.7. For a -+ "drive" controller, additional attributes -+ controller, bus, - and unit are available, each defaulting to 0. -+ - - - -@@ -1293,7 +1297,7 @@ - </controller> - <controller type='usb' index='0' model='ich9-uhci1'> - <master startport='0'/> -- <address type='pci' domain='0' bus='0' slot='4' function='0'/> -+ <address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/> - </controller> - ... - </devices> -@@ -1413,10 +1417,16 @@ - with virsh nodedev-list. The - bus attribute allows the hexadecimal values 0 to ff, the - slot attribute allows the hexadecimal values 0 to 1f, and -- the function attribute allows the hexadecimal values 0 to -- 7. There is also an optional domain attribute for the -- PCI domain, with hexadecimal values 0 to ffff, but it is currently -- not used by qemu. -+ the function attribute allows the hexadecimal values 0 to 7. -+ The multifunction attribute controls turning on the -+ multifunction bit for a particular slot/function in the PCI -+ control registersince 0.9.7, requires QEMU -+ 0.13. multifunction defaults to 'off', but -+ should be set to 'on' for function 0 of a slot that will have -+ multiple functions used. -+ There is also an optional domain attribute for -+ the PCI domain, with hexadecimal values 0 to ffff, but it is -+ currently not used by qemu. - - -

Redirected devices

-@@ -1584,7 +1594,8 @@ - the interface to a particular pci slot, with - attribute type='pci' and additional - attributes domain, bus, slot, -- and function as appropriate. -+ function, and multifunction -+ since 0.9.7, requires QEMU 0.13 as appropriate. -

- -
Virtual network
-diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng -index d0da41c..9f8d292 100644 ---- a/docs/schemas/domaincommon.rng -+++ b/docs/schemas/domaincommon.rng -@@ -2106,6 +2106,14 @@ - - - -+ -+ -+ -+ on -+ off -+ -+ -+ - - - -diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c -index 7463d7c..318f523 100644 ---- a/src/conf/domain_conf.c -+++ b/src/conf/domain_conf.c -@@ -138,6 +138,12 @@ VIR_ENUM_IMPL(virDomainDeviceAddress, VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST, - "ccid", - "usb") - -+VIR_ENUM_IMPL(virDomainDeviceAddressPciMulti, -+ VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST, -+ "default", -+ "on", -+ "off") -+ - VIR_ENUM_IMPL(virDomainDisk, VIR_DOMAIN_DISK_TYPE_LAST, - "block", - "file", -@@ -1645,6 +1651,10 @@ virDomainDeviceInfoFormat(virBufferPtr buf, - info->addr.pci.bus, - info->addr.pci.slot, - info->addr.pci.function); -+ if (info->addr.pci.multi) { -+ virBufferAsprintf(buf, " multifunction='%s'", -+ virDomainDeviceAddressPciMultiTypeToString(info->addr.pci.multi)); -+ } - break; - - case VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE: -@@ -1689,7 +1699,7 @@ static int - virDomainDevicePCIAddressParseXML(xmlNodePtr node, - virDomainDevicePCIAddressPtr addr) - { -- char *domain, *slot, *bus, *function; -+ char *domain, *slot, *bus, *function, *multi; - int ret = -1; - - memset(addr, 0, sizeof(*addr)); -@@ -1698,6 +1708,7 @@ virDomainDevicePCIAddressParseXML(xmlNodePtr node, - bus = virXMLPropString(node, "bus"); - slot = virXMLPropString(node, "slot"); - function = virXMLPropString(node, "function"); -+ multi = virXMLPropString(node, "multifunction"); - - if (domain && - virStrToLong_ui(domain, NULL, 0, &addr->domain) < 0) { -@@ -1727,6 +1738,14 @@ virDomainDevicePCIAddressParseXML(xmlNodePtr node, - goto cleanup; - } - -+ if (multi && -+ ((addr->multi = virDomainDeviceAddressPciMultiTypeFromString(multi)) <= 0)) { -+ virDomainReportError(VIR_ERR_CONFIG_UNSUPPORTED, -+ _("Unknown value '%s' for
'multifunction' attribute"), -+ multi); -+ goto cleanup; -+ -+ } - if (!virDomainDevicePCIAddressIsValid(addr)) { - virDomainReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Insufficient specification for PCI address")); -@@ -1740,6 +1759,7 @@ cleanup: - VIR_FREE(bus); - VIR_FREE(slot); - VIR_FREE(function); -+ VIR_FREE(multi); - return ret; - } - -diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h -index 371f270..f4a38fb 100644 ---- a/src/conf/domain_conf.h -+++ b/src/conf/domain_conf.h -@@ -74,6 +74,14 @@ enum virDomainDeviceAddressType { - VIR_DOMAIN_DEVICE_ADDRESS_TYPE_LAST - }; - -+enum virDomainDeviceAddressPciMulti { -+ VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_DEFAULT = 0, -+ VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON, -+ VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF, -+ -+ VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_LAST -+}; -+ - typedef struct _virDomainDevicePCIAddress virDomainDevicePCIAddress; - typedef virDomainDevicePCIAddress *virDomainDevicePCIAddressPtr; - struct _virDomainDevicePCIAddress { -@@ -81,6 +89,7 @@ struct _virDomainDevicePCIAddress { - unsigned int bus; - unsigned int slot; - unsigned int function; -+ int multi; /* enum virDomainDeviceAddressPciMulti */ - }; - - typedef struct _virDomainDeviceDriveAddress virDomainDeviceDriveAddress; -@@ -1820,7 +1829,7 @@ VIR_ENUM_DECL(virDomainLifecycle) - VIR_ENUM_DECL(virDomainLifecycleCrash) - VIR_ENUM_DECL(virDomainDevice) - VIR_ENUM_DECL(virDomainDeviceAddress) --VIR_ENUM_DECL(virDomainDeviceAddressMode) -+VIR_ENUM_DECL(virDomainDeviceAddressPciMulti) - VIR_ENUM_DECL(virDomainDisk) - VIR_ENUM_DECL(virDomainDiskDevice) - VIR_ENUM_DECL(virDomainDiskBus) -diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms -index 8235ea1..da3042e 100644 ---- a/src/libvirt_private.syms -+++ b/src/libvirt_private.syms -@@ -269,6 +269,8 @@ virDomainDefParseNode; - virDomainDefParseString; - virDomainDeleteConfig; - virDomainDeviceAddressIsValid; -+virDomainDeviceAddressPciMultiTypeFromString; -+virDomainDeviceAddressPciMultiTypeToString; - virDomainDeviceAddressTypeToString; - virDomainDeviceDefFree; - virDomainDeviceDefParse; -diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c -index 0adc56a..ee184c2 100644 ---- a/src/qemu/qemu_command.c -+++ b/src/qemu/qemu_command.c -@@ -772,22 +772,65 @@ static int qemuCollectPCIAddress(virDomainDefPtr def ATTRIBUTE_UNUSED, - virDomainDeviceInfoPtr dev, - void *opaque) - { -+ int ret = -1; -+ char *addr = NULL; - qemuDomainPCIAddressSetPtr addrs = opaque; - -- if (dev->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { -- char *addr = qemuPCIAddressAsString(dev); -- if (!addr) -- return -1; -+ if (dev->type != VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) -+ return 0; - -- VIR_DEBUG("Remembering PCI addr %s", addr); -+ addr = qemuPCIAddressAsString(dev); -+ if (!addr) -+ goto cleanup; - -- if (virHashAddEntry(addrs->used, addr, addr) < 0) { -- VIR_FREE(addr); -- return -1; -+ if (virHashLookup(addrs->used, addr)) { -+ if (dev->addr.pci.function != 0) { -+ qemuReportError(VIR_ERR_XML_ERROR, -+ _("Attempted double use of PCI Address '%s' " -+ "(may need \"multifunction='on'\" for device on function 0"), -+ addr); -+ } else { -+ qemuReportError(VIR_ERR_XML_ERROR, -+ _("Attempted double use of PCI Address '%s'"), addr); - } -+ goto cleanup; - } - -- return 0; -+ VIR_DEBUG("Remembering PCI addr %s", addr); -+ if (virHashAddEntry(addrs->used, addr, addr) < 0) -+ goto cleanup; -+ addr = NULL; -+ -+ if ((dev->addr.pci.function == 0) && -+ (dev->addr.pci.multi != VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON)) { -+ /* a function 0 w/o multifunction=on must reserve the entire slot */ -+ int function; -+ virDomainDeviceInfo temp_dev = *dev; -+ -+ for (function = 1; function < QEMU_PCI_ADDRESS_LAST_FUNCTION; function++) { -+ temp_dev.addr.pci.function = function; -+ addr = qemuPCIAddressAsString(&temp_dev); -+ if (!addr) -+ goto cleanup; -+ -+ if (virHashLookup(addrs->used, addr)) { -+ qemuReportError(VIR_ERR_XML_ERROR, -+ _("Attempted double use of PCI Address '%s'" -+ "(need \"multifunction='off'\" for device on function 0)"), -+ addr); -+ goto cleanup; -+ } -+ -+ VIR_DEBUG("Remembering PCI addr %s (multifunction=off for function 0)", addr); -+ if (virHashAddEntry(addrs->used, addr, addr)) -+ goto cleanup; -+ addr = NULL; -+ } -+ } -+ ret = 0; -+cleanup: -+ VIR_FREE(addr); -+ return ret; - } - - -@@ -1374,7 +1417,13 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, - if (info->addr.pci.function != 0) { - qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("Only PCI device addresses with function=0 " -- "are supported")); -+ "are supported with this QEMU binary")); -+ return -1; -+ } -+ if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON) { -+ qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", -+ _("'multifunction=on' is not supported with " -+ "this QEMU binary")); - return -1; - } - } -@@ -1389,11 +1438,13 @@ qemuBuildDeviceAddressStr(virBufferPtr buf, - virBufferAsprintf(buf, ",bus=pci.0"); - else - virBufferAsprintf(buf, ",bus=pci"); -- if (qemuCapsGet(qemuCaps, QEMU_CAPS_PCI_MULTIFUNCTION)) -- virBufferAsprintf(buf, ",multifunction=on,addr=0x%x.0x%x", -- info->addr.pci.slot, info->addr.pci.function); -- else -- virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot); -+ if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_ON) -+ virBufferAddLit(buf, ",multifunction=on"); -+ else if (info->addr.pci.multi == VIR_DOMAIN_DEVICE_ADDRESS_PCI_MULTI_OFF) -+ virBufferAddLit(buf, ",multifunction=off"); -+ virBufferAsprintf(buf, ",addr=0x%x", info->addr.pci.slot); -+ if (info->addr.pci.function != 0) -+ virBufferAsprintf(buf, ".0x%x", info->addr.pci.function); - } else if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_USB) { - virBufferAsprintf(buf, ",bus="); - qemuUsbId(buf, info->addr.usb.bus); -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args -index ff229f2..8a2150e 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.args -@@ -1,15 +1,15 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M \ - pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \ - -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c \ ---device lsi,id=scsi0,bus=pci.0,multifunction=on,addr=0x3.0x0 \ ---device lsi,id=scsi1,bus=pci.0,multifunction=on,addr=0x4.0x0 \ -+-device lsi,id=scsi0,bus=pci.0,multifunction=off,addr=0x3 \ -+-device lsi,id=scsi1,bus=pci.0,multifunction=on,addr=0x4 \ - -device lsi,id=scsi2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ ---device lsi,id=scsi3,bus=pci.0,multifunction=on,addr=0x4.0x2 \ ---device lsi,id=scsi4,bus=pci.0,multifunction=on,addr=0x4.0x3 \ ---device lsi,id=scsi5,bus=pci.0,multifunction=on,addr=0x4.0x4 \ ---device lsi,id=scsi6,bus=pci.0,multifunction=on,addr=0x4.0x5 \ ---device lsi,id=scsi7,bus=pci.0,multifunction=on,addr=0x4.0x6 \ ---device lsi,id=scsi8,bus=pci.0,multifunction=on,addr=0x4.0x7 \ -+-device lsi,id=scsi3,bus=pci.0,addr=0x4.0x2 \ -+-device lsi,id=scsi4,bus=pci.0,addr=0x4.0x3 \ -+-device lsi,id=scsi5,bus=pci.0,addr=0x4.0x4 \ -+-device lsi,id=scsi6,bus=pci.0,addr=0x4.0x5 \ -+-device lsi,id=scsi7,bus=pci.0,addr=0x4.0x6 \ -+-device lsi,id=scsi8,bus=pci.0,addr=0x4.0x7 \ - -drive file=/tmp/scsidisk.img,if=none,id=drive-scsi0-0-0 \ - -device scsi-disk,bus=scsi0.0,scsi-id=0,drive=drive-scsi0-0-0,id=scsi0-0-0 \ ---usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x5.0x0 -+-usb -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml -index 672fb61..24b95b8 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-multifunction-pci-device.xml -@@ -20,13 +20,13 @@ -
- - --
-+
- - --
-+
- - --
-+
- - -
-diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args -index 1007544..080d483 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.args -@@ -1,6 +1,9 @@ --LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ ---device ich9-usb-ehci1,id=usb,bus=pci.0,multifunction=on,addr=0x4.0x7 \ ---device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ ---device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ ---device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2 \ ---device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc \ -+-m 214 -smp 1 -nographic -nodefconfig -nodefaults \ -+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \ -+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ -+-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \ -+-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ -+-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ -+-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml -index 05a6adf..5a43638 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-companion.xml -@@ -15,7 +15,7 @@ - - - --
-+
- - - -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args -index 0059ab5..babd4f8 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-ich9-ehci-addr.args -@@ -1 +1,6 @@ --LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device ich9-usb-ehci1,id=usb,bus=pci.0,multifunction=on,addr=0x4.0x7 -device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S \ -+-M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \ -+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \ -+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ -+-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args -index 06863bb..1b2d5c1 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-piix3-controller.args -@@ -1 +1,6 @@ --LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c -device piix3-usb-uhci,id=usb,bus=pci.0,multifunction=on,addr=0x1.0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S \ -+-M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \ -+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \ -+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ -+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args -index f6270d5..7d34c2a 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.args -@@ -1,10 +1,10 @@ - LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ ---device ich9-usb-ehci1,id=usb,bus=pci.0,multifunction=on,addr=0x4.0x7 \ ---device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ ---device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ ---device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2 \ -+-device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x4.0x7 \ -+-device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ -+-device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ -+-device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ - -chardev socket,id=charredir0,host=localhost,port=4000 \ - -device usb-redir,chardev=charredir0,id=redir0 \ - -chardev spicevmc,id=charredir1,name=usbredir \ - -device usb-redir,chardev=charredir1,id=redir1,bus=usb.0,port=4 \ ---device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml -index 1dac3fb..a359a3d 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb-redir.xml -@@ -19,7 +19,7 @@ - - - --
-+
- - - -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args -index be4a78e..0a61af5 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.args -@@ -1,15 +1,18 @@ --LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ ---device piix3-usb-uhci,id=usb,bus=pci.0,multifunction=on,addr=0x1.0x2 \ ---device ich9-usb-ehci1,id=usb1,bus=pci.0,multifunction=on,addr=0x4.0x7 \ ---device ich9-usb-uhci1,masterbus=usb1.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4.0x0 \ ---device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pci.0,multifunction=on,addr=0x4.0x1 \ ---device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pci.0,multifunction=on,addr=0x4.0x2 \ ---device ich9-usb-ehci1,id=usb2,bus=pci.0,multifunction=on,addr=0x5.0x7 \ ---device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5.0x0 \ ---device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.0,multifunction=on,addr=0x5.0x1 \ ---device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.0,multifunction=on,addr=0x5.0x2 \ -+LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test /usr/bin/qemu -S \ -+-M pc -m 214 -smp 1 -nographic -nodefconfig -nodefaults \ -+-chardev socket,id=charmonitor,path=/tmp/test-monitor,server,nowait \ -+-mon chardev=charmonitor,id=monitor,mode=readline -no-acpi -boot c \ -+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \ -+-device ich9-usb-ehci1,id=usb1,bus=pci.0,addr=0x4.0x7 \ -+-device ich9-usb-uhci1,masterbus=usb1.0,firstport=0,bus=pci.0,multifunction=on,addr=0x4 \ -+-device ich9-usb-uhci2,masterbus=usb1.0,firstport=2,bus=pci.0,addr=0x4.0x1 \ -+-device ich9-usb-uhci3,masterbus=usb1.0,firstport=4,bus=pci.0,addr=0x4.0x2 \ -+-device ich9-usb-ehci1,id=usb2,bus=pci.0,addr=0x5.0x7 \ -+-device ich9-usb-uhci1,masterbus=usb2.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 \ -+-device ich9-usb-uhci2,masterbus=usb2.0,firstport=2,bus=pci.0,addr=0x5.0x1 \ -+-device ich9-usb-uhci3,masterbus=usb2.0,firstport=4,bus=pci.0,addr=0x5.0x2 \ - -device usb-hub,id=hub0,bus=usb1.0,port=1 \ - -device usb-tablet,id=input0,bus=usb.0,port=2 \ - -device usb-host,hostbus=14,hostaddr=6,id=hostdev0,bus=usb2.0,port=1 \ - -device usb-host,hostbus=14,hostaddr=7,id=hostdev1,bus=usb2.0,port=2 \ ---device virtio-balloon-pci,id=balloon0,bus=pci.0,multifunction=on,addr=0x3.0x0 -+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 -diff --git a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml -index e8ada4d..b12b841 100644 ---- a/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml -+++ b/tests/qemuxml2argvdata/qemuxml2argv-usb1-usb2.xml -@@ -21,7 +21,7 @@ - - - --
-+
- - - -@@ -37,7 +37,7 @@ - - - --
-+
- - - --- -1.7.4.4 - diff --git a/libvirt-0.9.6-spec-F15-still-uses-cgconfig.patch b/libvirt-0.9.6-spec-F15-still-uses-cgconfig.patch deleted file mode 100644 index 06b7bee..0000000 --- a/libvirt-0.9.6-spec-F15-still-uses-cgconfig.patch +++ /dev/null @@ -1,56 +0,0 @@ -From 5d219e1bd98b562eed28e1df424a2590bb92b366 Mon Sep 17 00:00:00 2001 -From: Eric Blake -Date: Mon, 26 Sep 2011 14:28:47 -0600 -Subject: [PATCH 1/2] spec: F15 still uses cgconfig, RHEL lacks hyperv - -Commit ecd8725c dropped attempts to probe the cgconfig service on -new enough Fedora where systemd took over that aspect of the system, -but mistakenly used F14 instead of F15 as the cutoff point. - -https://bugzilla.redhat.com/show_bug.cgi?id=741358 - -Also, RHEL does not include HyperV support yet. - -* libvirt.spec.in (with_cgconfig): Check cgconfig service in F15. -(%{?rhel}): Provide default for with_hyperv. ---- - libvirt.spec.in | 8 +++++--- - 1 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/libvirt.spec.in b/libvirt.spec.in -index c0ea898..b87e3f6 100644 ---- a/libvirt.spec.in -+++ b/libvirt.spec.in -@@ -97,7 +97,8 @@ - %endif - - # RHEL doesn't ship OpenVZ, VBox, UML, PowerHypervisor, --# VMWare, libxenserver (xenapi), or libxenlight (Xen 4.1 and newer) -+# VMWare, libxenserver (xenapi), libxenlight (Xen 4.1 and newer), -+# or HyperV. - %if 0%{?rhel} - %define with_openvz 0 - %define with_vbox 0 -@@ -106,6 +107,7 @@ - %define with_vmware 0 - %define with_xenapi 0 - %define with_libxl 0 -+%define with_hyperv 0 - %endif - - # RHEL-5 has restricted QEMU to x86_64 only and is too old for LXC -@@ -894,9 +896,9 @@ done - %endif - - %if %{with_cgconfig} --# Starting with Fedora 15, systemd automounts all cgroups, and cgconfig is -+# Starting with Fedora 16, systemd automounts all cgroups, and cgconfig is - # no longer a necessary service. --%if 0%{?fedora} <= 14 || 0%{?rhel} <= 6 -+%if 0%{?fedora} <= 15 || 0%{?rhel} <= 6 - if [ "$1" -eq "1" ]; then - /sbin/chkconfig cgconfig on - fi --- -1.7.4.4 - diff --git a/libvirt.spec b/libvirt.spec index 2eb4fba..4e9f507 100644 --- a/libvirt.spec +++ b/libvirt.spec @@ -78,6 +78,7 @@ %define with_dtrace 0%{!?_without_dtrace:0} %define with_cgconfig 0%{!?_without_cgconfig:0} %define with_sanlock 0%{!?_without_sanlock:0} +%define with_systemd 0%{!?_without_systemd:0} # Non-server/HV driver defaults which are always enabled %define with_python 0%{!?_without_python:1} @@ -111,6 +112,11 @@ %define with_hyperv 0 %endif +# Although earlier Fedora has systemd, libvirt still used sysvinit +%if 0%{?fedora} >= 17 +%define with_systemd 1 +%endif + # RHEL-5 has restricted QEMU to x86_64 only and is too old for LXC %if 0%{?rhel} == 5 %ifnarch x86_64 @@ -168,8 +174,14 @@ %endif # Enable sanlock library for lock management with QEMU -%if 0%{?fedora} >= 16 || 0%{?rhel} >= 6 -%define with_sanlock 0%{!?_without_sanlock:%{server_drivers}} +# Sanlock is available only on i686 x86_64 for RHEL +%if 0%{?fedora} >= 16 +%define with_sanlock 0%{!?_without_sanlock:%{server_drivers}} +%endif +%if 0%{?rhel} >= 6 +%ifnarch i386 i586 i686 x86_64 +%define with_sanlock 0%{!?_without_sanlock:%{server_drivers}} +%endif %endif # Disable some drivers when building without libvirt daemon. @@ -234,8 +246,8 @@ Summary: Library providing a simple virtualization API Name: libvirt -Version: 0.9.7 -Release: 3%{?dist}%{?extra_release} +Version: 0.9.8 +Release: 1%{?dist}%{?extra_release} License: LGPLv2+ Group: Development/Libraries Source: http://libvirt.org/sources/libvirt-%{version}.tar.gz @@ -251,7 +263,6 @@ Requires: %{name}-client = %{version}-%{release} # Used by many of the drivers, so turn it on whenever the # daemon is present %if %{with_libvirtd} -Requires: bridge-utils # for modprobe of pci devices Requires: module-init-tools # for /sbin/ip & /sbin/tc @@ -327,17 +338,28 @@ Requires: device-mapper %if %{with_cgconfig} Requires: libcgroup %endif +# For virConnectGetSysinfo +Requires: dmidecode +# For service management +%if %{with_systemd} +Requires(post): systemd-units +Requires(post): systemd-sysv +Requires(preun): systemd-units +Requires(postun): systemd-units +%endif # All build-time requirements BuildRequires: python-devel - +%if %{with_systemd} +BuildRequires: systemd-units +%endif %if %{with_xen} BuildRequires: xen-devel +%endif # temporary explicit requireent missing from xen-4.1.0 %if %{with_libxl} BuildRequires: libuuid-devel %endif -%endif BuildRequires: libxml2-devel BuildRequires: xhtml1-dtds BuildRequires: libxslt @@ -384,7 +406,6 @@ BuildRequires: radvd %if %{with_nwfilter} BuildRequires: ebtables %endif -BuildRequires: bridge-utils BuildRequires: module-init-tools %if %{with_sasl} BuildRequires: cyrus-sasl-devel @@ -497,6 +518,8 @@ Requires: nc Requires: gettext # Needed by virt-pki-validate script. Requires: gnutls-utils +# Needed for probing the power management features of the host. +Requires: pm-utils %if %{with_sasl} Requires: cyrus-sasl # Not technically required, but makes 'out-of-box' config @@ -702,6 +725,13 @@ of recent versions of Linux (and other OSes). %define with_packager --with-packager="%{who}, %{when}, %{where}" %define with_packager_version --with-packager-version="%{release}" +%if %{with_systemd} +# We use 'systemd+redhat', so if someone installs upstart or +# legacy init scripts, they can still start libvirtd, etc +%define init_scripts --with-init_script=systemd+redhat +%else +%define init_scripts --with-init_script=redhat +%endif %configure %{?_without_xen} \ %{?_without_qemu} \ @@ -742,7 +772,7 @@ of recent versions of Linux (and other OSes). %{with_packager_version} \ --with-qemu-user=%{qemu_user} \ --with-qemu-group=%{qemu_group} \ - --with-init-script=redhat \ + %{init_scripts} \ --with-remote-pid-file=%{_localstatedir}/run/libvirtd.pid make %{?_smp_mflags} gzip -9 ChangeLog @@ -750,7 +780,7 @@ gzip -9 ChangeLog %install rm -fr %{buildroot} -%makeinstall +%makeinstall SYSTEMD_UNIT_DIR=%{_unitdir} for i in domain-events/events-c dominfo domsuspend hellolibvirt openauth python xml/nwfilter systemtap do (cd examples/$i ; make clean ; rm -rf .deps .libs Makefile Makefile.in) @@ -827,8 +857,6 @@ do printf "#!/bin/sh\nexit 0\n" > $i chmod +x $i done -# Fails on F17 rawhide for (currently) unknown reasons -echo "int main(void) { return 0; }" > shunloadtest.c make check %pre @@ -850,8 +878,7 @@ getent passwd qemu >/dev/null || \ # We want to install the default network for initial RPM installs # or on the first upgrade from a non-network aware libvirt only. # We check this by looking to see if the daemon is already installed -/sbin/chkconfig --list libvirtd 1>/dev/null 2>&1 -if test $? != 0 && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml +if ! /sbin/chkconfig libvirtd && test ! -f %{_sysconfdir}/libvirt/qemu/networks/default.xml then UUID=`/usr/bin/uuidgen` sed -e "s,,\n $UUID," \ @@ -901,6 +928,13 @@ do done %endif +%if %{with_systemd} +if [ $1 -eq 1 ] ; then + # Initial installation + /bin/systemctl enable libvirtd.service >/dev/null 2>&1 || : + /bin/systemctl enable cgconfig.service >/dev/null 2>&1 || : +fi +%else %if %{with_cgconfig} # Starting with Fedora 16, systemd automounts all cgroups, and cgconfig is # no longer a necessary service. @@ -916,38 +950,89 @@ if [ "$1" -ge "1" ]; then /sbin/service libvirtd condrestart > /dev/null 2>&1 fi %endif +%endif %preun %if %{with_libvirtd} +%if %{with_systemd} +if [ $1 -eq 0 ] ; then + # Package removal, not upgrade + /bin/systemctl --no-reload disable libvirtd.service > /dev/null 2>&1 || : + /bin/systemctl stop libvirtd.service > /dev/null 2>&1 || : +fi +%else if [ $1 = 0 ]; then /sbin/service libvirtd stop 1>/dev/null 2>&1 /sbin/chkconfig --del libvirtd fi %endif +%endif + +%postun +%if %{with_libvirtd} +%if %{with_systemd} +/bin/systemctl daemon-reload >/dev/null 2>&1 || : +if [ $1 -ge 1 ] ; then + # Package upgrade, not uninstall + /bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || : +fi +%endif +%endif + +%if %{with_libvirtd} +%if %{with_systemd} +%triggerun -- libvirt < 0.9.4 +%{_bindir}/systemd-sysv-convert --save libvirtd >/dev/null 2>&1 ||: + +# If the package is allowed to autostart: +/bin/systemctl --no-reload enable libvirtd.service >/dev/null 2>&1 ||: + +# Run these because the SysV package being removed won't do them +/sbin/chkconfig --del libvirtd >/dev/null 2>&1 || : +/bin/systemctl try-restart libvirtd.service >/dev/null 2>&1 || : +%endif +%endif %preun client +%if %{with_systemd} +%else if [ $1 = 0 ]; then /sbin/chkconfig --del libvirt-guests rm -f /var/lib/libvirt/libvirt-guests fi +%endif %post client /sbin/ldconfig +%if %{with_systemd} +%else /sbin/chkconfig --add libvirt-guests if [ $1 -ge 1 ]; then level=$(/sbin/runlevel | /bin/cut -d ' ' -f 2) - if /sbin/chkconfig --list libvirt-guests 2>/dev/null \ - | /bin/grep -q $level:on ; then + if /sbin/chkconfig --levels $level libvirt-guests; then # this doesn't do anything but allowing for libvirt-guests to be # stopped on the first shutdown /sbin/service libvirt-guests start > /dev/null 2>&1 || true fi fi +%endif %postun client -p /sbin/ldconfig +%if %{with_systemd} +%triggerun client -- libvirt < 0.9.4 +%{_bindir}/systemd-sysv-convert --save libvirt-guests >/dev/null 2>&1 ||: + +# If the package is allowed to autostart: +/bin/systemctl --no-reload enable libvirt-guests.service >/dev/null 2>&1 ||: + +# Run these because the SysV package being removed won't do them +/sbin/chkconfig --del libvirt-guests >/dev/null 2>&1 || : +/bin/systemctl try-restart libvirt-guests.service >/dev/null 2>&1 || : +%endif + %if %{with_libvirtd} %files %defattr(-, root, root) @@ -965,6 +1050,9 @@ fi %{_sysconfdir}/libvirt/nwfilter/*.xml %{_sysconfdir}/rc.d/init.d/libvirtd +%if %{with_systemd} +%{_unitdir}/libvirtd.service +%endif %doc daemon/libvirtd.upstart %config(noreplace) %{_sysconfdir}/sysconfig/libvirtd %config(noreplace) %{_sysconfdir}/libvirt/libvirtd.conf @@ -1004,7 +1092,7 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd %{_datadir}/libvirt/networks/default.xml %endif -%dir %{_localstatedir}/run/libvirt/ +%ghost %dir %{_localstatedir}/run/libvirt/ %dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/images/ %dir %attr(0711, root, root) %{_localstatedir}/lib/libvirt/filesystems/ @@ -1012,24 +1100,24 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd %dir %attr(0711, root, root) %{_localstatedir}/cache/libvirt/ %if %{with_qemu} -%dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/ +%ghost %dir %attr(0700, root, root) %{_localstatedir}/run/libvirt/qemu/ %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/lib/libvirt/qemu/ %dir %attr(0750, %{qemu_user}, %{qemu_group}) %{_localstatedir}/cache/libvirt/qemu/ %endif %if %{with_lxc} -%dir %{_localstatedir}/run/libvirt/lxc/ +%ghost %dir %{_localstatedir}/run/libvirt/lxc/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/lxc/ %endif %if %{with_uml} -%dir %{_localstatedir}/run/libvirt/uml/ +%ghost %dir %{_localstatedir}/run/libvirt/uml/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/uml/ %endif %if %{with_libxl} -%dir %{_localstatedir}/run/libvirt/libxl/ +%ghost %dir %{_localstatedir}/run/libvirt/libxl/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/libxl/ %endif %if %{with_network} -%dir %{_localstatedir}/run/libvirt/network/ +%ghost %dir %{_localstatedir}/run/libvirt/network/ %dir %attr(0700, root, root) %{_localstatedir}/lib/libvirt/network/ %dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/dnsmasq/ %endif @@ -1121,6 +1209,9 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd %{_datadir}/libvirt/cpu_map.xml %{_sysconfdir}/rc.d/init.d/libvirt-guests +%if %{with_systemd} +%{_unitdir}/libvirt-guests.service +%endif %config(noreplace) %{_sysconfdir}/sysconfig/libvirt-guests %dir %attr(0755, root, root) %{_localstatedir}/lib/libvirt/ @@ -1166,6 +1257,17 @@ rm -f $RPM_BUILD_ROOT%{_sysconfdir}/sysctl.d/libvirtd %endif %changelog +* Thu Dec 8 2011 Daniel Veillard - 0.9.8-1 +- Add support for QEMU 1.0 +- Add preliminary PPC cpu driver +- Add new API virDomain{Set, Get}BlockIoTune +- block_resize: Define the new API +- Add a public API to invoke suspend/resume on the host +- various improvements for LXC containers +- Define keepalive protocol and add virConnectIsAlive API +- Add support for STP and VLAN filtering +- many improvements and bug fixes + * Mon Nov 14 2011 Justin M. Forbes - 0.9.7-3 - Remove versioned buildreq for yajl as 2.0.x features are not required. diff --git a/sources b/sources index 5efd9ef..ee46000 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -4308b3f4d23f5b0c5196260a9a22a38b libvirt-0.9.7.tar.gz +5bb74092e469d773c3d63128a8c57501 libvirt-0.9.8.tar.gz