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 <laine@laine.org>
-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
-<address> definition has the attribute "multifunction='on'", e.g.:
-
-  <address type='pci' domain='0x0000' bus='0x00'
-           slot='0x04' function='0x0' multifunction='on'/>
-
-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 <code>type</code> attribute is mandatory, and is typically
-         "pci" or "drive".  For a "pci" controller, additional
-         attributes for <code>bus</code>, <code>slot</code>,
--        and <code>function</code> must be present, as well as an
--        optional <code>domain</code>.  For a "drive" controller,
--        additional attributes <code>controller</code>, <code>bus</code>,
-+        and <code>function</code> must be present, as well as
-+        optional <code>domain</code> and <code>multifunction</code>.
-+        Multifunction defaults to 'off'; any other value requires
-+        QEMU 0.1.3 and <span class="since">libvirt 0.9.7</span>.  For a
-+        "drive" controller, additional attributes
-+        <code>controller</code>, <code>bus</code>,
-         and <code>unit</code> are available, each defaulting to 0.
-+
-       </dd>
-     </dl>
- 
-@@ -1293,7 +1297,7 @@
-     &lt;/controller&gt;
-     &lt;controller type='usb' index='0' model='ich9-uhci1'&gt;
-       &lt;master startport='0'/&gt;
--      &lt;address type='pci' domain='0' bus='0' slot='4' function='0'/&gt;
-+      &lt;address type='pci' domain='0' bus='0' slot='4' function='0' multifunction='on'/&gt;
-     &lt;/controller&gt;
-     ...
-   &lt;/devices&gt;
-@@ -1413,10 +1417,16 @@
-       with <code>virsh nodedev-list</code>. The
-       <code>bus</code> attribute allows the hexadecimal values 0 to ff, the
-       <code>slot</code> attribute allows the hexadecimal values 0 to 1f, and
--      the <code>function</code> attribute allows the hexadecimal values 0 to
--      7. There is also an optional <code>domain</code> attribute for the
--      PCI domain, with hexadecimal values 0 to ffff, but it is currently
--      not used by qemu.</dd>
-+      the <code>function</code> attribute allows the hexadecimal values 0 to 7.
-+      The <code>multifunction</code> attribute controls turning on the
-+      multifunction bit for a particular slot/function in the PCI
-+      control register<span class="since">since 0.9.7, requires QEMU
-+      0.13</span>. <code>multifunction</code> 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 <code>domain</code> attribute for
-+      the PCI domain, with hexadecimal values 0 to ffff, but it is
-+      currently not used by qemu.</dd>
-     </dl>
- 
-     <h4><a name="elementsRedir">Redirected devices</a></h4>
-@@ -1584,7 +1594,8 @@
-       the interface to a particular pci slot, with
-       attribute <code>type='pci'</code> and additional
-       attributes <code>domain</code>, <code>bus</code>, <code>slot</code>,
--      and <code>function</code> as appropriate.
-+      <code>function</code>, and <code>multifunction</code>
-+      <span class="since">since 0.9.7, requires QEMU 0.13</span> as appropriate.
-     </p>
- 
-     <h5><a name="elementsNICSVirtual">Virtual network</a></h5>
-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 @@
-     <attribute name="function">
-       <ref name="pciFunc"/>
-     </attribute>
-+    <optional>
-+      <attribute name="multifunction">
-+        <choice>
-+          <value>on</value>
-+          <value>off</value>
-+        </choice>
-+      </attribute>
-+    </optional>
-   </define>
-   <define name="driveaddress">
-     <optional>
-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 <address> '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 @@
-       <address type='drive' controller='0' bus='0' unit='0'/>
-     </disk>
-     <controller type='scsi' index='0'>
--      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0' multifunction='off'/>
-     </controller>
-     <controller type='scsi' index='1'>
--      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
-     </controller>
-     <controller type='scsi' index='2'>
--      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1' multifunction='on'/>
-     </controller>
-     <controller type='scsi' index='3'>
-       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
-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 @@
-     </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>
-     <controller type='usb' index='0' model='ich9-uhci2'>
-       <master startport='2'/>
-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 @@
-     </controller>
-     <controller type='usb' index='0' model='ich9-uhci1'>
-       <master startport='0'/>
--      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
-+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
-     </controller>
-     <controller type='usb' index='0' model='ich9-uhci2'>
-       <master startport='2'/>
-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 @@
-     </controller>
-     <controller type='usb' index='1' 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>
-     <controller type='usb' index='1' model='ich9-uhci2'>
-       <master startport='2'/>
-@@ -37,7 +37,7 @@
-     </controller>
-     <controller type='usb' index='2' model='ich9-uhci1'>
-       <master startport='0'/>
--      <address type='pci' domain='0' bus='0' slot='5' function='0'/>
-+      <address type='pci' domain='0' bus='0' slot='5' function='0' multifunction='on'/>
-     </controller>
-     <controller type='usb' index='2' model='ich9-uhci2'>
-       <master startport='2'/>
--- 
-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 <eblake@redhat.com>
-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,</name>,</name>\n  <uuid>$UUID</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 <veillard@redhat.com> - 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 <jforbes@redhat.com> - 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