diff --git a/libvirt-0.9.6-Add-internal-APIs-for-dealing-with-time.patch b/libvirt-0.9.6-Add-internal-APIs-for-dealing-with-time.patch
deleted file mode 100644
index 5957bea..0000000
--- a/libvirt-0.9.6-Add-internal-APIs-for-dealing-with-time.patch
+++ /dev/null
@@ -1,734 +0,0 @@
-From f514fb152ed5f2ff5bd372c07e47e56f8496a3db Mon Sep 17 00:00:00 2001
-From: "Daniel P. Berrange"
-Date: Tue, 29 Nov 2011 12:11:01 +0000
-Subject: [PATCH 01/11] Add internal APIs for dealing with time
-
-(cherry pick (with small conflict resolution in src/Makefile.am, and
-removing the change to tests/.gitignore) from upstream 3ec1289 to
-address https://bugzilla.redhat.com/show_bug.cgi?id=757382)
-
-The logging APIs need to be able to generate formatted timestamps
-using only async signal safe functions. This rules out using
-gmtime/localtime/malloc/gettimeday(!) and much more.
-
-Introduce a new internal API which is async signal safe.
-
- virTimeMillisNowRaw replacement for gettimeofday. Uses clock_gettime
- where available, otherwise falls back to the unsafe
- gettimeofday
-
- virTimeFieldsNowRaw replacements for gmtime(), convert a timestamp
- virTimeFieldsThenRaw into a broken out set of fields. No localtime()
- replacement is provided, because converting to
- local time is not practical with only async signal
- safe APIs.
-
- virTimeStringNowRaw replacements for strftime() which print a timestamp
- virTimeStringThenRaw into a string, using a pre-determined format, with
- a fixed size buffer (VIR_TIME_STRING_BUFLEN)
-
-For each of these there is also a version without the Raw postfix
-which raises a full libvirt error. These versions are not async
-signal safe
-
-* src/Makefile.am, src/util/virtime.c, src/util/virtime.h: New files
-* src/libvirt_private.syms: New APis
-* configure.ac: Check for clock_gettime in -lrt
-* tests/virtimetest.c, tests/Makefile.am: Test new APIs
----
- configure.ac | 10 ++
- po/POTFILES.in | 1 +
- src/Makefile.am | 7 +-
- src/libvirt_private.syms | 11 ++
- src/util/virtime.c | 350 ++++++++++++++++++++++++++++++++++++++++++++++
- src/util/virtime.h | 67 +++++++++
- tests/Makefile.am | 9 +-
- tests/virtimetest.c | 124 ++++++++++++++++
- 8 files changed, 576 insertions(+), 3 deletions(-)
- create mode 100644 src/util/virtime.c
- create mode 100644 src/util/virtime.h
- create mode 100644 tests/virtimetest.c
-
-diff --git a/configure.ac b/configure.ac
-index df19445..3d3cbbe 100644
---- a/configure.ac
-+++ b/configure.ac
-@@ -150,6 +150,16 @@ LIBS="$LIBS $LIB_PTHREAD"
- AC_CHECK_FUNCS([pthread_mutexattr_init])
- LIBS=$old_libs
-
-+old_LIBS=$LIBS
-+RT_LIBS=
-+LIBS="$LIBS $LIB_PTHREAD -lrt"
-+AC_CHECK_FUNC([clock_gettime],[
-+ AC_DEFINE([HAVE_CLOCK_GETTIME],[],[Defined if clock_gettime() exists in librt.so])
-+ RT_LIBS=-lrt
-+])
-+LIBS=$old_libs
-+AC_SUBST(RT_LIBS)
-+
- dnl Availability of various common headers (non-fatal if missing).
- AC_CHECK_HEADERS([pwd.h paths.h regex.h sys/un.h \
- sys/poll.h syslog.h mntent.h net/ethernet.h linux/magic.h \
-diff --git a/po/POTFILES.in b/po/POTFILES.in
-index 5ce35ae..5913e82 100644
---- a/po/POTFILES.in
-+++ b/po/POTFILES.in
-@@ -128,6 +128,7 @@ src/util/viraudit.c
- src/util/virfile.c
- src/util/virpidfile.c
- src/util/virterror.c
-+src/util/virtime.c
- src/util/xml.c
- src/vbox/vbox_MSCOMGlue.c
- src/vbox/vbox_XPCOMCGlue.c
-diff --git a/src/Makefile.am b/src/Makefile.am
-index 738ee91..d3ebc73 100644
---- a/src/Makefile.am
-+++ b/src/Makefile.am
-@@ -88,7 +88,8 @@ UTIL_SOURCES = \
- util/xml.c util/xml.h \
- util/virterror.c util/virterror_internal.h \
- util/virkeycode.c util/virkeycode.h \
-- util/virkeymaps.h
-+ util/virkeymaps.h \
-+ util/virtime.h util/virtime.c
-
- EXTRA_DIST += $(srcdir)/util/virkeymaps.h $(srcdir)/util/keymaps.csv \
- $(srcdir)/util/virkeycode-mapgen.py
-@@ -539,7 +540,8 @@ libvirt_util_la_SOURCES = \
- libvirt_util_la_CFLAGS = $(CAPNG_CFLAGS) $(YAJL_CFLAGS) $(LIBNL_CFLAGS) \
- $(AM_CFLAGS) $(AUDIT_CFLAGS) $(DEVMAPPER_CFLAGS)
- libvirt_util_la_LIBADD = $(CAPNG_LIBS) $(YAJL_LIBS) $(LIBNL_LIBS) \
-- $(LIB_PTHREAD) $(AUDIT_LIBS) $(DEVMAPPER_LIBS)
-+ $(LIB_PTHREAD) $(AUDIT_LIBS) $(DEVMAPPER_LIBS) \
-+ $(RT_LIBS)
-
-
- noinst_LTLIBRARIES += libvirt_conf.la
-@@ -1428,6 +1430,7 @@ libvirt_lxc_LDFLAGS = $(WARN_CFLAGS) $(AM_LDFLAGS)
- libvirt_lxc_LDADD = $(CAPNG_LIBS) $(YAJL_LIBS) \
- $(LIBXML_LIBS) $(NUMACTL_LIBS) $(LIB_PTHREAD) \
- $(LIBNL_LIBS) $(AUDIT_LIBS) $(DEVMAPPER_LIBS) \
-+ $(RT_LIBS) \
- ../gnulib/lib/libgnu.la
- libvirt_lxc_CFLAGS = \
- $(LIBPARTED_CFLAGS) \
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index da3042e..b07676f 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -1196,6 +1196,17 @@ virKeycodeSetTypeFromString;
- virKeycodeValueFromString;
- virKeycodeValueTranslate;
-
-+
-+# virtime.h
-+virTimeMillisNow;
-+virTimeFieldsNow;
-+virTimeFieldsThen;
-+virTimeStringNow;
-+virTimeStringThen;
-+virTimeStringNewNow;
-+virTimeStringNewThen;
-+
-+
- # xml.h
- virXMLParseHelper;
- virXMLPropString;
-diff --git a/src/util/virtime.c b/src/util/virtime.c
-new file mode 100644
-index 0000000..25c2317
---- /dev/null
-+++ b/src/util/virtime.c
-@@ -0,0 +1,350 @@
-+/*
-+ * virtime.c: Time handling functions
-+ *
-+ * Copyright (C) 2006-2011 Red Hat, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Author: Daniel P. Berrange
-+ *
-+ * The intent is that this file provides a set of time APIs which
-+ * are async signal safe, to allow use in between fork/exec eg by
-+ * the logging code.
-+ *
-+ * The reality is that wsnprintf is technically unsafe. We ought
-+ * to roll out our int -> str conversions to avoid this.
-+ *
-+ * We do *not* use regular libvirt error APIs for most of the code,
-+ * since those are not async signal safe, and we dont want logging
-+ * APIs generating timestamps to blow away real errors
-+ */
-+
-+#include
-+
-+#include
-+#ifndef HAVE_CLOCK_GETTIME
-+# include
-+#endif
-+
-+#include "virtime.h"
-+#include "util.h"
-+#include "memory.h"
-+#include "virterror_internal.h"
-+
-+#define VIR_FROM_THIS VIR_FROM_NONE
-+
-+/* We prefer clock_gettime if available because that is officially
-+ * async signal safe according to POSIX. Many platforms lack it
-+ * though, so fallback to gettimeofday everywhere else
-+ */
-+
-+/**
-+ * virTimeMillisNowRaw:
-+ * @now: filled with current time in milliseconds
-+ *
-+ * Retrieves the current system time, in milliseconds since the
-+ * epoch
-+ *
-+ * Returns 0 on success, -1 on error with errno set
-+ */
-+int virTimeMillisNowRaw(unsigned long long *now)
-+{
-+#ifdef HAVE_CLOCK_GETTIME
-+ struct timespec ts;
-+
-+ if (clock_gettime(CLOCK_REALTIME, &ts) < 0)
-+ return -1;
-+
-+ *now = (ts.tv_sec * 1000ull) + (ts.tv_nsec / (1000ull * 1000ull));
-+#else
-+ struct timeval tv;
-+
-+ if (gettimeofday(&tv, NULL) < 0)
-+ return -1;
-+
-+ *now = (tv.tv_sec * 1000ull) + (tv.tv_usec / 1000ull);
-+#endif
-+
-+ return 0;
-+}
-+
-+
-+/**
-+ * virTimeFieldsNowRaw:
-+ * @fields: filled with current time fields
-+ *
-+ * Retrieves the current time, in broken-down field format.
-+ * The time is always in UTC.
-+ *
-+ * Returns 0 on success, -1 on error with errno set
-+ */
-+int virTimeFieldsNowRaw(struct tm *fields)
-+{
-+ unsigned long long now;
-+
-+ if (virTimeMillisNowRaw(&now) < 0)
-+ return -1;
-+
-+ return virTimeFieldsThenRaw(now, fields);
-+}
-+
-+
-+#define SECS_PER_HOUR (60 * 60)
-+#define SECS_PER_DAY (SECS_PER_HOUR * 24)
-+#define DIV(a, b) ((a) / (b) - ((a) % (b) < 0))
-+#define LEAPS_THRU_END_OF(y) (DIV (y, 4) - DIV (y, 100) + DIV (y, 400))
-+
-+const unsigned short int __mon_yday[2][13] = {
-+ /* Normal years. */
-+ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
-+ /* Leap years. */
-+ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
-+};
-+
-+/**
-+ * virTimeFieldsThenRaw:
-+ * @when: the time to convert in milliseconds
-+ * @fields: filled with time @when fields
-+ *
-+ * Converts the timestamp @when into broken-down field format.
-+ * Time time is always in UTC
-+ *
-+ * Returns 0 on success, -1 on error with errno set
-+ */
-+int virTimeFieldsThenRaw(unsigned long long when, struct tm *fields)
-+{
-+ /* This code is taken from GLibC under terms of LGPLv2+ */
-+ long int days, rem, y;
-+ const unsigned short int *ip;
-+ unsigned long long whenSecs = when / 1000ull;
-+ unsigned int offset = 0; /* We hardcoded GMT */
-+
-+ days = whenSecs / SECS_PER_DAY;
-+ rem = whenSecs % SECS_PER_DAY;
-+ rem += offset;
-+ while (rem < 0) {
-+ rem += SECS_PER_DAY;
-+ --days;
-+ }
-+ while (rem >= SECS_PER_DAY) {
-+ rem -= SECS_PER_DAY;
-+ ++days;
-+ }
-+ fields->tm_hour = rem / SECS_PER_HOUR;
-+ rem %= SECS_PER_HOUR;
-+ fields->tm_min = rem / 60;
-+ fields->tm_sec = rem % 60;
-+ /* January 1, 1970 was a Thursday. */
-+ fields->tm_wday = (4 + days) % 7;
-+ if (fields->tm_wday < 0)
-+ fields->tm_wday += 7;
-+ y = 1970;
-+
-+ while (days < 0 || days >= (__isleap (y) ? 366 : 365)) {
-+ /* Guess a corrected year, assuming 365 days per year. */
-+ long int yg = y + days / 365 - (days % 365 < 0);
-+
-+ /* Adjust DAYS and Y to match the guessed year. */
-+ days -= ((yg - y) * 365
-+ + LEAPS_THRU_END_OF (yg - 1)
-+ - LEAPS_THRU_END_OF (y - 1));
-+ y = yg;
-+ }
-+ fields->tm_year = y - 1900;
-+
-+ fields->tm_yday = days;
-+ ip = __mon_yday[__isleap(y)];
-+ for (y = 11; days < (long int) ip[y]; --y)
-+ continue;
-+ days -= ip[y];
-+ fields->tm_mon = y;
-+ fields->tm_mday = days + 1;
-+ return 0;
-+}
-+
-+
-+/**
-+ * virTimeStringNowRaw:
-+ * @buf: a buffer at least VIR_TIME_STRING_BUFLEN in length
-+ *
-+ * Initializes @buf to contain a formatted timestamp
-+ * corresponding to the current time.
-+ *
-+ * Returns 0 on success, -1 on error
-+ */
-+int virTimeStringNowRaw(char *buf)
-+{
-+ unsigned long long now;
-+
-+ if (virTimeMillisNowRaw(&now) < 0)
-+ return -1;
-+
-+ return virTimeStringThenRaw(now, buf);
-+}
-+
-+
-+/**
-+ * virTimeStringThenRaw:
-+ * @when: the time to format in milliseconds
-+ * @buf: a buffer at least VIR_TIME_STRING_BUFLEN in length
-+ *
-+ * Initializes @buf to contain a formatted timestamp
-+ * corresponding to the time @when.
-+ *
-+ * Returns 0 on success, -1 on error
-+ */
-+int virTimeStringThenRaw(unsigned long long when, char *buf)
-+{
-+ struct tm fields;
-+
-+ if (virTimeFieldsThenRaw(when, &fields) < 0)
-+ return -1;
-+
-+ fields.tm_year += 1900;
-+ fields.tm_mon += 1;
-+
-+ if (snprintf(buf, VIR_TIME_STRING_BUFLEN,
-+ "%4d-%02d-%02d %02d:%02d:%02d.%03d+0000",
-+ fields.tm_year, fields.tm_mon, fields.tm_mday,
-+ fields.tm_hour, fields.tm_min, fields.tm_sec,
-+ (int) (when % 1000)) >= VIR_TIME_STRING_BUFLEN) {
-+ errno = ERANGE;
-+ return -1;
-+ }
-+
-+ return 0;
-+}
-+
-+
-+/**
-+ * virTimeMillisNow:
-+ * @now: filled with current time in milliseconds
-+ *
-+ * Retrieves the current system time, in milliseconds since the
-+ * epoch
-+ *
-+ * Returns 0 on success, -1 on error with error reported
-+ */
-+int virTimeMillisNow(unsigned long long *now)
-+{
-+ if (virTimeMillisNowRaw(now) < 0) {
-+ virReportSystemError(errno, "%s",
-+ _("Unable to get current time"));
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+
-+/**
-+ * virTimeFieldsNowRaw:
-+ * @fields: filled with current time fields
-+ *
-+ * Retrieves the current time, in broken-down field format.
-+ * The time is always in UTC.
-+ *
-+ * Returns 0 on success, -1 on error with errno reported
-+ */
-+int virTimeFieldsNow(struct tm *fields)
-+{
-+ unsigned long long now;
-+
-+ if (virTimeMillisNow(&now) < 0)
-+ return -1;
-+
-+ return virTimeFieldsThen(now, fields);
-+}
-+
-+
-+/**
-+ * virTimeFieldsThen:
-+ * @when: the time to convert in milliseconds
-+ * @fields: filled with time @when fields
-+ *
-+ * Converts the timestamp @when into broken-down field format.
-+ * Time time is always in UTC
-+ *
-+ * Returns 0 on success, -1 on error with error reported
-+ */
-+int virTimeFieldsThen(unsigned long long when, struct tm *fields)
-+{
-+ if (virTimeFieldsThenRaw(when, fields) < 0) {
-+ virReportSystemError(errno, "%s",
-+ _("Unable to break out time format"));
-+ return -1;
-+ }
-+ return 0;
-+}
-+
-+
-+/**
-+ * virTimeStringNow:
-+ *
-+ * Creates a string containing a formatted timestamp
-+ * corresponding to the current time.
-+ *
-+ * This function is not async signal safe
-+ *
-+ * Returns a formatted allocated string, or NULL on error
-+ */
-+char *virTimeStringNow(void)
-+{
-+ char *ret;
-+
-+ if (VIR_ALLOC_N(ret, VIR_TIME_STRING_BUFLEN) < 0) {
-+ virReportOOMError();
-+ return NULL;
-+ }
-+
-+ if (virTimeStringNowRaw(ret) < 0) {
-+ virReportSystemError(errno, "%s",
-+ _("Unable to format time"));
-+ VIR_FREE(ret);
-+ return NULL;
-+ }
-+
-+ return ret;
-+}
-+
-+
-+/**
-+ * virTimeStringThen:
-+ * @when: the time to format in milliseconds
-+ *
-+ * Creates a string containing a formatted timestamp
-+ * corresponding to the time @when.
-+ *
-+ * This function is not async signal safe
-+ *
-+ * Returns a formatted allocated string, or NULL on error
-+ */
-+char *virTimeStringThen(unsigned long long when)
-+{
-+ char *ret;
-+
-+ if (VIR_ALLOC_N(ret, VIR_TIME_STRING_BUFLEN) < 0) {
-+ virReportOOMError();
-+ return NULL;
-+ }
-+
-+ if (virTimeStringThenRaw(when, ret) < 0) {
-+ virReportSystemError(errno, "%s",
-+ _("Unable to format time"));
-+ VIR_FREE(ret);
-+ return NULL;
-+ }
-+
-+ return ret;
-+}
-diff --git a/src/util/virtime.h b/src/util/virtime.h
-new file mode 100644
-index 0000000..59954c2
---- /dev/null
-+++ b/src/util/virtime.h
-@@ -0,0 +1,67 @@
-+/*
-+ * virtime.h: Time handling functions
-+ *
-+ * Copyright (C) 2006-2011 Red Hat, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Author: Daniel P. Berrange
-+ */
-+
-+#ifndef __VIR_TIME_H__
-+# define __VIR_TIME_H__
-+
-+# include
-+
-+# include "internal.h"
-+
-+/* The format string we intend to use is:
-+ *
-+ * Yr Mon Day Hour Min Sec Ms TZ
-+ * %4d-%02d-%02d %02d:%02d:%02d.%03d+0000
-+ *
-+ */
-+# define VIR_TIME_STRING_BUFLEN \
-+ (4 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 2 + 1 + 3 + 5 + 1)
-+/* Yr Mon Day Hour Min Sec Ms TZ NULL */
-+
-+/* These APIs are async signal safe and return -1, setting
-+ * errno on failure */
-+int virTimeMillisNowRaw(unsigned long long *now)
-+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-+int virTimeFieldsNowRaw(struct tm *fields)
-+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-+int virTimeFieldsThenRaw(unsigned long long when, struct tm *fields)
-+ ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
-+int virTimeStringNowRaw(char *buf)
-+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-+int virTimeStringThenRaw(unsigned long long when, char *buf)
-+ ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
-+
-+
-+/* These APIs are *not* async signal safe and return -1,
-+ * raising a libvirt error on failure
-+ */
-+int virTimeMillisNow(unsigned long long *now)
-+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-+int virTimeFieldsNow(struct tm *fields)
-+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-+int virTimeFieldsThen(unsigned long long when, struct tm *fields)
-+ ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
-+char *virTimeStringNow(void);
-+char *virTimeStringThen(unsigned long long when);
-+
-+
-+#endif
-diff --git a/tests/Makefile.am b/tests/Makefile.am
-index cbbbc6f..fba5e53 100644
---- a/tests/Makefile.am
-+++ b/tests/Makefile.am
-@@ -89,7 +89,8 @@ check_PROGRAMS = virshtest conftest sockettest \
- nodeinfotest qparamtest virbuftest \
- commandtest commandhelper seclabeltest \
- hashtest virnetmessagetest virnetsockettest ssh \
-- utiltest virnettlscontexttest shunloadtest
-+ utiltest virnettlscontexttest shunloadtest \
-+ virtimetest
-
- check_LTLIBRARIES = libshunload.la
-
-@@ -209,6 +210,7 @@ TESTS = virshtest \
- virnetmessagetest \
- virnetsockettest \
- virnettlscontexttest \
-+ virtimetest \
- shunloadtest \
- utiltest \
- $(test_scripts)
-@@ -475,6 +477,11 @@ else
- EXTRA_DIST += pkix_asn1_tab.c
- endif
-
-+virtimetest_SOURCES = \
-+ virtimetest.c testutils.h testutils.c
-+virtimetest_CFLAGS = -Dabs_builddir="\"$(abs_builddir)\"" $(AM_CFLAGS)
-+virtimetest_LDADD = ../src/libvirt-net-rpc.la $(LDADDS)
-+
-
- seclabeltest_SOURCES = \
- seclabeltest.c
-diff --git a/tests/virtimetest.c b/tests/virtimetest.c
-new file mode 100644
-index 0000000..5d56dd3
---- /dev/null
-+++ b/tests/virtimetest.c
-@@ -0,0 +1,124 @@
-+/*
-+ * Copyright (C) 2011 Red Hat, Inc.
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * This library is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-+ *
-+ * Author: Daniel P. Berrange
-+ */
-+
-+#include
-+
-+#include
-+#include
-+
-+#include "testutils.h"
-+#include "util.h"
-+#include "virterror_internal.h"
-+#include "memory.h"
-+#include "logging.h"
-+
-+#include "virtime.h"
-+
-+#define VIR_FROM_THIS VIR_FROM_RPC
-+
-+struct testTimeFieldsData {
-+ unsigned long long when;
-+ struct tm fields;
-+};
-+
-+static int testTimeFields(const void *args)
-+{
-+ const struct testTimeFieldsData *data = args;
-+ struct tm actual;
-+
-+ if (virTimeFieldsThen(data->when, &actual) < 0)
-+ return -1;
-+
-+#define COMPARE(field) \
-+ do { \
-+ if (data->fields.field != actual.field) { \
-+ VIR_DEBUG("Expect " #field " %d got %d", \
-+ data->fields.field, actual.field); \
-+ return -1; \
-+ } \
-+ } while (0)
-+
-+ /* tm_year value 0 is based off epoch 1900 */
-+ actual.tm_year += 1900;
-+ /* tm_mon is range 0-11, but we want 1-12 */
-+ actual.tm_mon += 1;
-+
-+ COMPARE(tm_year);
-+ COMPARE(tm_mon);
-+ COMPARE(tm_mday);
-+ COMPARE(tm_hour);
-+ COMPARE(tm_min);
-+ COMPARE(tm_sec);
-+
-+ return 0;
-+}
-+
-+
-+static int
-+mymain(void)
-+{
-+ int ret = 0;
-+
-+ signal(SIGPIPE, SIG_IGN);
-+
-+#define TEST_FIELDS(ts, year, mon, day, hour, min, sec) \
-+ do { \
-+ struct testTimeFieldsData data = { \
-+ .when = ts, \
-+ .fields = { \
-+ .tm_year = year, \
-+ .tm_mon = mon, \
-+ .tm_mday = day, \
-+ .tm_hour = hour, \
-+ .tm_min = min, \
-+ .tm_sec = sec, \
-+ .tm_wday = 0, \
-+ .tm_yday = 0, \
-+ .tm_isdst = 0, \
-+ }, \
-+ }; \
-+ if (virtTestRun("Test fields " #ts " " #year " ", 1, testTimeFields, &data) < 0) \
-+ ret = -1; \
-+ } while (0)
-+
-+ TEST_FIELDS( 0ull, 1970, 1, 1, 0, 0, 0);
-+ TEST_FIELDS( 5000ull, 1970, 1, 1, 0, 0, 5);
-+ TEST_FIELDS( 3605000ull, 1970, 1, 1, 1, 0, 5);
-+ TEST_FIELDS( 86405000ull, 1970, 1, 2, 0, 0, 5);
-+ TEST_FIELDS( 31536000000ull, 1971, 1, 1, 0, 0, 0);
-+
-+ TEST_FIELDS( 30866399000ull, 1970, 12, 24, 5, 59, 59);
-+ TEST_FIELDS( 123465599000ull, 1973, 11, 29, 23, 59, 59);
-+ TEST_FIELDS( 155001599000ull, 1974, 11, 29, 23, 59, 59);
-+
-+ TEST_FIELDS( 186537599000ull, 1975, 11, 29, 23, 59, 59);
-+ TEST_FIELDS( 344390399000ull, 1980, 11, 29, 23, 59, 59);
-+ TEST_FIELDS(1203161493000ull, 2008, 2, 16, 11, 31, 33);
-+ TEST_FIELDS(1234567890000ull, 2009, 2, 13, 23, 31, 30);
-+
-+ TEST_FIELDS(1322524800000ull, 2011, 11, 29, 0, 0, 0);
-+ TEST_FIELDS(1322611199000ull, 2011, 11, 29, 23, 59, 59);
-+
-+ TEST_FIELDS(2147483648000ull, 2038, 1, 19, 3, 14, 8);
-+
-+ return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
-+}
-+
-+VIRT_TEST_MAIN(mymain)
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-Avoid-crash-in-shunloadtest.patch b/libvirt-0.9.6-Avoid-crash-in-shunloadtest.patch
deleted file mode 100644
index e1a2b95..0000000
--- a/libvirt-0.9.6-Avoid-crash-in-shunloadtest.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 7a1eb2ead5d441e3604070e8fe89cce475cc45a8 Mon Sep 17 00:00:00 2001
-From: "Daniel P. Berrange"
-Date: Thu, 1 Dec 2011 11:33:50 -0500
-Subject: [PATCH] Avoid crash in shunloadtest
-
-For unknown reasons, the shunloadtest will crash on Fedora 16
-inside dlopen()
-
- (gdb) bt
- #0 0x00000000000050e6 in ?? ()
- #1 0x00007ff61a77b9d5 in floor () from /lib64/libm.so.6
- #2 0x00007ff61e522963 in _dl_relocate_object () from /lib64/ld-linux-x86-64.so.2
- #3 0x00007ff61e5297e6 in dl_open_worker () from /lib64/ld-linux-x86-64.so.2
- #4 0x00007ff61e525006 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
- #5 0x00007ff61e52917a in _dl_open () from /lib64/ld-linux-x86-64.so.2
- #6 0x00007ff61e0f6f26 in dlopen_doit () from /lib64/libdl.so.2
- #7 0x00007ff61e525006 in _dl_catch_error () from /lib64/ld-linux-x86-64.so.2
- #8 0x00007ff61e0f752f in _dlerror_run () from /lib64/libdl.so.2
- #9 0x00007ff61e0f6fc1 in dlopen@@GLIBC_2.2.5 () from /lib64/libdl.so.2
- #10 0x0000000000400a15 in main (argc=, argv=) at shunloadtest.c:105
-
-Changing from RTLD_NOW to RTLD_LAZY avoids this problem,
-but quite possibly does not fix the root cause.
-
-* shunloadtest.c: s/NOW/LAZY/
----
- tests/shunloadtest.c | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/tests/shunloadtest.c b/tests/shunloadtest.c
-index 2cdb8b8..ab6e56f 100644
---- a/tests/shunloadtest.c
-+++ b/tests/shunloadtest.c
-@@ -102,7 +102,7 @@ int main(int argc ATTRIBUTE_UNUSED, char **argv)
- fprintf(stderr, " .%*s 1 ", 39, "");
- signal(SIGSEGV, sigHandler);
-
-- if (!(lib = dlopen("./.libs/libshunload.so", RTLD_NOW))) {
-+ if (!(lib = dlopen("./.libs/libshunload.so", RTLD_LAZY))) {
- fprintf(stderr, "Cannot load ./.libs/libshunload.so %s\n", dlerror());
- return 1;
- }
---
-1.7.7.4
-
diff --git a/libvirt-0.9.6-Fix-incorrect-symbols-for-virtime.h-module-breaking-.patch b/libvirt-0.9.6-Fix-incorrect-symbols-for-virtime.h-module-breaking-.patch
deleted file mode 100644
index 2c6d587..0000000
--- a/libvirt-0.9.6-Fix-incorrect-symbols-for-virtime.h-module-breaking-.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-From 73469d2989ad7cd4ed0802ea75d5b111af44eeb1 Mon Sep 17 00:00:00 2001
-From: "Daniel P. Berrange"
-Date: Mon, 5 Dec 2011 14:04:25 +0000
-Subject: [PATCH 07/13] Fix incorrect symbols for virtime.h module breaking
- Mingw32
-
-(prerequisite patch, direct cherry-pick of upstream b265bed, to
-resolve: https://bugzilla.redhat.com/show_bug.cgi?id=757382)
-
-The Mingw32 linker highlighted that the symbols for virtime.h
-declared in libvirt_private.syms were incorrect
-
-* src/libvirt_private.syms: Fix virtime.h symbols
----
- src/libvirt_private.syms | 9 ++++++---
- 1 files changed, 6 insertions(+), 3 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index b804b34..e4ade24 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -1196,13 +1196,16 @@ virKeycodeValueTranslate;
-
-
- # virtime.h
--virTimeMillisNow;
- virTimeFieldsNow;
-+virTimeFieldsNowRaw;
- virTimeFieldsThen;
-+virTimeFieldsThenRaw;
-+virTimeMillisNow;
-+virTimeMillisNowRaw;
- virTimeStringNow;
-+virTimeStringNowRaw;
- virTimeStringThen;
--virTimeStringNewNow;
--virTimeStringNewThen;
-+virTimeStringThenRaw;
-
-
- # xml.h
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-Make-logging-async-signal-safe-wrt-time-stamp-genera.patch b/libvirt-0.9.6-Make-logging-async-signal-safe-wrt-time-stamp-genera.patch
deleted file mode 100644
index 7c5ec8e..0000000
--- a/libvirt-0.9.6-Make-logging-async-signal-safe-wrt-time-stamp-genera.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From 744247bcfdba1dc90f71f3ef693f557b663a9cc8 Mon Sep 17 00:00:00 2001
-From: "Daniel P. Berrange"
-Date: Tue, 29 Nov 2011 12:32:31 +0000
-Subject: [PATCH 04/13] Make logging async signal safe wrt time stamp
- generation
-
-cherry pick (with small conflict resolution in src/util/logging.c) from
-upstream 32d3ec7 to address:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=757382
-
-Use the new virTimeStringNowRaw() API for generating log timestamps
-in an async signal safe manner
-
-* src/util/logging.c: Use virTimeStringNowRaw
----
- src/util/logging.c | 28 ++++------------------------
- 1 files changed, 4 insertions(+), 24 deletions(-)
-
-diff --git a/src/util/logging.c b/src/util/logging.c
-index 9df9003..22d7c2b 100644
---- a/src/util/logging.c
-+++ b/src/util/logging.c
-@@ -43,6 +43,7 @@
- #include "buf.h"
- #include "threads.h"
- #include "virfile.h"
-+#include "virtime.h"
-
- #define VIR_FROM_THIS VIR_FROM_NONE
-
-@@ -618,26 +619,6 @@ cleanup:
- return ret;
- }
-
--static char *
--virLogFormatTimestamp(void)
--{
-- struct timeval cur_time;
-- struct tm time_info;
-- char *str = NULL;
--
-- gettimeofday(&cur_time, NULL);
-- localtime_r(&cur_time.tv_sec, &time_info);
-- time_info.tm_year += 1900;
--
-- if (virAsprintf(&str, "%4d-%02d-%02d %02d:%02d:%02d.%03d",
-- time_info.tm_year, time_info.tm_mon, time_info.tm_mday,
-- time_info.tm_hour, time_info.tm_min, time_info.tm_sec,
-- (int) (cur_time.tv_usec / 1000)) < 0)
-- return NULL;
--
-- return str;
--}
--
- static int
- virLogFormatString(char **msg,
- const char *funcname,
-@@ -704,7 +685,7 @@ void virLogMessage(const char *category, int priority, const char *funcname,
- static bool logVersionStderr = true;
- char *str = NULL;
- char *msg = NULL;
-- char *timestamp = NULL;
-+ char timestamp[VIR_TIME_STRING_BUFLEN];
- int fprio, i, ret;
- int saved_errno = errno;
- int emit = 1;
-@@ -745,8 +726,8 @@ void virLogMessage(const char *category, int priority, const char *funcname,
- if (ret < 0)
- goto cleanup;
-
-- if (!(timestamp = virLogFormatTimestamp()))
-- goto cleanup;
-+ if (virTimeStringNowRaw(timestamp) < 0)
-+ timestamp[0] = '\0';
-
- /*
- * Log based on defaults, first store in the history buffer,
-@@ -798,7 +779,6 @@ void virLogMessage(const char *category, int priority, const char *funcname,
-
- cleanup:
- VIR_FREE(msg);
-- VIR_FREE(timestamp);
- errno = saved_errno;
- }
-
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-Remove-time-APIs-from-src-util-util.h.patch b/libvirt-0.9.6-Remove-time-APIs-from-src-util-util.h.patch
deleted file mode 100644
index e08214a..0000000
--- a/libvirt-0.9.6-Remove-time-APIs-from-src-util-util.h.patch
+++ /dev/null
@@ -1,364 +0,0 @@
-From 711c78a100649a47c11c90f5efa510421f711013 Mon Sep 17 00:00:00 2001
-From: "Daniel P. Berrange"
-Date: Tue, 29 Nov 2011 12:33:23 +0000
-Subject: [PATCH 05/13] Remove time APIs from src/util/util.h
-
-cherry pick (with small conflict resolution detailed below) from
-upstream a8bb75a to address:
-
- https://bugzilla.redhat.com/show_bug.cgi?id=757382
-
-The virTimestamp and virTimeMs functions in src/util/util.h
-duplicate functionality from virtime.h, in a non-async signal
-safe manner. Remove them, and convert all code over to the new
-APIs.
-
-* src/util/util.c, src/util/util.h: Delete virTimeMs and virTimestamp
-* src/lxc/lxc_driver.c, src/qemu/qemu_domain.c,
- src/qemu/qemu_driver.c, src/qemu/qemu_migration.c,
- src/qemu/qemu_process.c, src/util/event_poll.c: Convert to use
- virtime APIs
-
-Conflicts:
-
- src/lxc/lxc_driver.c
- src/qemu/qemu_domain.c
- src/qemu/qemu_driver.c
- * the patches contained context with extra include files not
- yet introduced on the branch.
- src/util/event_poll.c
- * the branch had context with a call to EVENT_DEBUG that
- was no longer existing in the original patch.
----
- src/libvirt_private.syms | 2 -
- src/lxc/lxc_driver.c | 3 +-
- src/qemu/qemu_domain.c | 5 ++-
- src/qemu/qemu_driver.c | 7 +++--
- src/qemu/qemu_migration.c | 5 ++-
- src/qemu/qemu_process.c | 9 ++++---
- src/util/event_poll.c | 10 +++++---
- src/util/util.c | 53 ---------------------------------------------
- src/util/util.h | 4 ---
- 9 files changed, 23 insertions(+), 75 deletions(-)
-
-diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
-index b07676f..b804b34 100644
---- a/src/libvirt_private.syms
-+++ b/src/libvirt_private.syms
-@@ -1131,8 +1131,6 @@ virStrToLong_ul;
- virStrToLong_ull;
- virStrcpy;
- virStrncpy;
--virTimeMs;
--virTimestamp;
- virTrimSpaces;
- virVasprintf;
-
-diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
-index 6cf7203..e7fb46d 100644
---- a/src/lxc/lxc_driver.c
-+++ b/src/lxc/lxc_driver.c
-@@ -54,6 +54,7 @@
- #include "fdstream.h"
- #include "domain_audit.h"
- #include "domain_nwfilter.h"
-+#include "virtime.h"
-
- #define VIR_FROM_THIS VIR_FROM_LXC
-
-@@ -1580,7 +1581,7 @@ static int lxcVmStart(virConnectPtr conn,
- goto cleanup;
-
- /* Log timestamp */
-- if ((timestamp = virTimestamp()) == NULL) {
-+ if ((timestamp = virTimeStringNow()) == NULL) {
- virReportOOMError();
- goto cleanup;
- }
-diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
-index 4023648..66c0de9 100644
---- a/src/qemu/qemu_domain.c
-+++ b/src/qemu/qemu_domain.c
-@@ -35,6 +35,7 @@
- #include "ignore-value.h"
- #include "uuid.h"
- #include "virfile.h"
-+#include "virtime.h"
-
- #include
- #include
-@@ -717,7 +718,7 @@ qemuDomainObjBeginJobInternal(struct qemud_driver *driver,
-
- priv->jobs_queued++;
-
-- if (virTimeMs(&now) < 0)
-+ if (virTimeMillisNow(&now) < 0)
- return -1;
- then = now + QEMU_JOB_WAIT_TIME;
-
-@@ -911,7 +912,7 @@ qemuDomainObjEnterMonitorInternal(struct qemud_driver *driver,
-
- qemuMonitorLock(priv->mon);
- qemuMonitorRef(priv->mon);
-- ignore_value(virTimeMs(&priv->monStart));
-+ ignore_value(virTimeMillisNow(&priv->monStart));
- virDomainObjUnlock(obj);
- if (driver_locked)
- qemuDriverUnlock(driver);
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index 0d0bea2..09e0eaa 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -89,6 +89,7 @@
- #include "locking/lock_manager.h"
- #include "locking/domain_lock.h"
- #include "virkeycode.h"
-+#include "virtime.h"
-
- #define VIR_FROM_THIS VIR_FROM_QEMU
-
-@@ -2130,12 +2131,12 @@ qemuDomainGetControlInfo(virDomainPtr dom,
- } else if (priv->job.active) {
- if (!priv->monStart) {
- info->state = VIR_DOMAIN_CONTROL_JOB;
-- if (virTimeMs(&info->stateTime) < 0)
-+ if (virTimeMillisNow(&info->stateTime) < 0)
- goto cleanup;
- info->stateTime -= priv->job.start;
- } else {
- info->state = VIR_DOMAIN_CONTROL_OCCUPIED;
-- if (virTimeMs(&info->stateTime) < 0)
-+ if (virTimeMillisNow(&info->stateTime) < 0)
- goto cleanup;
- info->stateTime -= priv->monStart;
- }
-@@ -8446,7 +8447,7 @@ static int qemuDomainGetJobInfo(virDomainPtr dom,
- * of incoming migration which we don't currently
- * monitor actively in the background thread
- */
-- if (virTimeMs(&info->timeElapsed) < 0)
-+ if (virTimeMillisNow(&info->timeElapsed) < 0)
- goto cleanup;
- info->timeElapsed -= priv->job.start;
- } else {
-diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
-index 4fd2e9f..8fbf7b4 100644
---- a/src/qemu/qemu_migration.c
-+++ b/src/qemu/qemu_migration.c
-@@ -42,6 +42,7 @@
- #include "datatypes.h"
- #include "fdstream.h"
- #include "uuid.h"
-+#include "virtime.h"
- #include "locking/domain_lock.h"
- #include "rpc/virnetsocket.h"
-
-@@ -790,7 +791,7 @@ qemuMigrationUpdateJobStatus(struct qemud_driver *driver,
- &memTotal);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-
-- if (ret < 0 || virTimeMs(&priv->job.info.timeElapsed) < 0) {
-+ if (ret < 0 || virTimeMillisNow(&priv->job.info.timeElapsed) < 0) {
- priv->job.info.type = VIR_DOMAIN_JOB_FAILED;
- return -1;
- }
-@@ -1003,7 +1004,7 @@ qemuMigrationPrepareAny(struct qemud_driver *driver,
- qemuMigrationCookiePtr mig = NULL;
- bool tunnel = !!st;
-
-- if (virTimeMs(&now) < 0)
-+ if (virTimeMillisNow(&now) < 0)
- return -1;
-
- if (!(def = virDomainDefParseString(driver->caps, dom_xml,
-diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
-index c8f22e2..1b895f6 100644
---- a/src/qemu/qemu_process.c
-+++ b/src/qemu/qemu_process.c
-@@ -60,6 +60,7 @@
- #include "locking/domain_lock.h"
- #include "network/bridge_driver.h"
- #include "uuid.h"
-+#include "virtime.h"
-
- #define VIR_FROM_THIS VIR_FROM_QEMU
-
-@@ -845,7 +846,7 @@ qemuConnectMonitor(struct qemud_driver *driver, virDomainObjPtr vm)
- * deleted while the monitor is active */
- virDomainObjRef(vm);
-
-- ignore_value(virTimeMs(&priv->monStart));
-+ ignore_value(virTimeMillisNow(&priv->monStart));
- virDomainObjUnlock(vm);
- qemuDriverUnlock(driver);
-
-@@ -3012,7 +3013,7 @@ int qemuProcessStart(virConnectPtr conn,
- goto cleanup;
- }
-
-- if ((timestamp = virTimestamp()) == NULL) {
-+ if ((timestamp = virTimeStringNow()) == NULL) {
- virReportOOMError();
- goto cleanup;
- } else {
-@@ -3290,7 +3291,7 @@ void qemuProcessStop(struct qemud_driver *driver,
- VIR_WARN("Unable to open logfile: %s",
- virStrerror(errno, ebuf, sizeof ebuf));
- } else {
-- if ((timestamp = virTimestamp()) == NULL) {
-+ if ((timestamp = virTimeStringNow()) == NULL) {
- virReportOOMError();
- } else {
- if (safewrite(logfile, timestamp, strlen(timestamp)) < 0 ||
-@@ -3560,7 +3561,7 @@ int qemuProcessAttach(virConnectPtr conn ATTRIBUTE_UNUSED,
- priv->persistentAddrs = 0;
- }
-
-- if ((timestamp = virTimestamp()) == NULL) {
-+ if ((timestamp = virTimeStringNow()) == NULL) {
- virReportOOMError();
- goto cleanup;
- } else {
-diff --git a/src/util/event_poll.c b/src/util/event_poll.c
-index e8679b8..97118d9 100644
---- a/src/util/event_poll.c
-+++ b/src/util/event_poll.c
-@@ -39,6 +39,7 @@
- #include "virfile.h"
- #include "ignore-value.h"
- #include "virterror_internal.h"
-+#include "virtime.h"
-
- #define EVENT_DEBUG(fmt, ...) VIR_DEBUG(fmt, __VA_ARGS__)
-
-@@ -206,8 +207,9 @@ int virEventPollAddTimeout(int frequency,
- {
- unsigned long long now;
- int ret;
-+
- EVENT_DEBUG("Adding timer %d with %d ms freq", nextTimer, frequency);
-- if (virTimeMs(&now) < 0) {
-+ if (virTimeMillisNow(&now) < 0) {
- return -1;
- }
-
-@@ -249,7 +251,7 @@ void virEventPollUpdateTimeout(int timer, int frequency)
- return;
- }
-
-- if (virTimeMs(&now) < 0) {
-+ if (virTimeMillisNow(&now) < 0) {
- return;
- }
-
-@@ -322,7 +324,7 @@ static int virEventPollCalculateTimeout(int *timeout) {
- if (then > 0) {
- unsigned long long now;
-
-- if (virTimeMs(&now) < 0)
-+ if (virTimeMillisNow(&now) < 0)
- return -1;
-
- *timeout = then - now;
-@@ -398,7 +400,7 @@ static int virEventPollDispatchTimeouts(void)
- int ntimeouts = eventLoop.timeoutsCount;
- VIR_DEBUG("Dispatch %d", ntimeouts);
-
-- if (virTimeMs(&now) < 0)
-+ if (virTimeMillisNow(&now) < 0)
- return -1;
-
- for (i = 0 ; i < ntimeouts ; i++) {
-diff --git a/src/util/util.c b/src/util/util.c
-index 1ff287d..9b30f1e 100644
---- a/src/util/util.c
-+++ b/src/util/util.c
-@@ -33,12 +33,10 @@
- #include
- #include
- #include
--#include
- #include
- #include
- #include
- #include
--#include
- #if HAVE_MMAP
- # include
- #endif
-@@ -2402,57 +2400,6 @@ int virBuildPathInternal(char **path, ...)
- return ret;
- }
-
--/**
-- * virTimestamp:
-- *
-- * Return an allocated string containing the current date and time,
-- * followed by ": ". Return NULL on allocation failure.
-- */
--char *
--virTimestamp(void)
--{
-- struct timeval cur_time;
-- struct tm time_info;
-- char timestr[100];
-- char *timestamp;
--
-- gettimeofday(&cur_time, NULL);
-- localtime_r(&cur_time.tv_sec, &time_info);
--
-- strftime(timestr, sizeof(timestr), "%Y-%m-%d %H:%M:%S", &time_info);
--
-- if (virAsprintf(×tamp, "%s.%03d",
-- timestr, (int) cur_time.tv_usec / 1000) < 0) {
-- return NULL;
-- }
--
-- return timestamp;
--}
--
--#define timeval_to_ms(tv) (((tv).tv_sec * 1000ull) + ((tv).tv_usec / 1000))
--
--/**
-- * virTimeMs:
-- *
-- * Get current time in milliseconds.
-- *
-- * Returns 0 on success, -1 on failure.
-- */
--int
--virTimeMs(unsigned long long *ms)
--{
-- struct timeval now;
--
-- if (gettimeofday(&now, NULL) < 0) {
-- virReportSystemError(errno, "%s",
-- _("cannot get time of day"));
-- return -1;
-- }
--
-- *ms = timeval_to_ms(now);
-- return 0;
--}
--
- #if HAVE_LIBDEVMAPPER_H
- bool
- virIsDevMapperDevice(const char *dev_name)
-diff --git a/src/util/util.h b/src/util/util.h
-index c55e852..afa2221 100644
---- a/src/util/util.h
-+++ b/src/util/util.h
-@@ -251,10 +251,6 @@ void virFileWaitForDevices(void);
- # define virBuildPath(path, ...) virBuildPathInternal(path, __VA_ARGS__, NULL)
- int virBuildPathInternal(char **path, ...) ATTRIBUTE_SENTINEL;
-
--char *virTimestamp(void);
--
--int virTimeMs(unsigned long long *ms) ATTRIBUTE_NONNULL(1);
--
- bool virIsDevMapperDevice(const char *dev_name) ATTRIBUTE_NONNULL(1);
-
- int virEmitXMLWarning(int fd,
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-logging-Add-date-to-log-timestamp.patch b/libvirt-0.9.6-logging-Add-date-to-log-timestamp.patch
deleted file mode 100644
index 0089fe0..0000000
--- a/libvirt-0.9.6-logging-Add-date-to-log-timestamp.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From 69b05e20e64836c3a1a125b17b0101f70492ffd7 Mon Sep 17 00:00:00 2001
-From: Jiri Denemark
-Date: Wed, 28 Sep 2011 16:44:50 +0200
-Subject: [PATCH 02/13] logging: Add date to log timestamp
-
-(prerequisite patch, direct cherry-pick of upstream 11c6e09, to
-resolve: https://bugzilla.redhat.com/show_bug.cgi?id=757382)
----
- src/util/logging.c | 4 +++-
- 1 files changed, 3 insertions(+), 1 deletions(-)
-
-diff --git a/src/util/logging.c b/src/util/logging.c
-index 4ffaf75..9df9003 100644
---- a/src/util/logging.c
-+++ b/src/util/logging.c
-@@ -627,8 +627,10 @@ virLogFormatTimestamp(void)
-
- gettimeofday(&cur_time, NULL);
- localtime_r(&cur_time.tv_sec, &time_info);
-+ time_info.tm_year += 1900;
-
-- if (virAsprintf(&str, "%02d:%02d:%02d.%03d",
-+ if (virAsprintf(&str, "%4d-%02d-%02d %02d:%02d:%02d.%03d",
-+ time_info.tm_year, time_info.tm_mon, time_info.tm_mday,
- time_info.tm_hour, time_info.tm_min, time_info.tm_sec,
- (int) (cur_time.tv_usec / 1000)) < 0)
- return NULL;
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-logging-Do-not-log-timestamp-through-syslog.patch b/libvirt-0.9.6-logging-Do-not-log-timestamp-through-syslog.patch
deleted file mode 100644
index 09831df..0000000
--- a/libvirt-0.9.6-logging-Do-not-log-timestamp-through-syslog.patch
+++ /dev/null
@@ -1,327 +0,0 @@
-From 978ca41b4bc59033e39cf8b1a69f3869d160e7d6 Mon Sep 17 00:00:00 2001
-From: Jiri Denemark
-Date: Wed, 28 Sep 2011 15:20:07 +0200
-Subject: [PATCH 01/13] logging: Do not log timestamp through syslog
-
-(prerequisite patch, direct cherry-pick of upstream 2a44954, to
-resolve: https://bugzilla.redhat.com/show_bug.cgi?id=757382)
-
-Syslog puts the timestamp to every message anyway so this removes
-redundant data.
----
- src/util/logging.c | 121 +++++++++++++++++++++++++++++++--------------------
- src/util/logging.h | 9 ++--
- tests/testutils.c | 8 ++-
- 3 files changed, 83 insertions(+), 55 deletions(-)
-
-diff --git a/src/util/logging.c b/src/util/logging.c
-index a638510..4ffaf75 100644
---- a/src/util/logging.c
-+++ b/src/util/logging.c
-@@ -98,7 +98,8 @@ static int virLogResetFilters(void);
- static int virLogResetOutputs(void);
- static int virLogOutputToFd(const char *category, int priority,
- const char *funcname, long long linenr,
-- const char *str, int len, void *data);
-+ const char *timestamp, const char *str,
-+ void *data);
-
- /*
- * Logs accesses must be serialized though a mutex
-@@ -282,16 +283,16 @@ void virLogShutdown(void) {
- /*
- * Store a string in the ring buffer
- */
--static void virLogStr(const char *str, int len) {
-+static void virLogStr(const char *str)
-+{
- int tmp;
-+ int len;
-
- if ((str == NULL) || (virLogBuffer == NULL) || (virLogSize <= 0))
- return;
-- if (len <= 0)
-- len = strlen(str);
-+ len = strlen(str);
- if (len >= virLogSize)
- return;
-- virLogLock();
-
- /*
- * copy the data and reset the end, we cycle over the end of the buffer
-@@ -317,7 +318,6 @@ static void virLogStr(const char *str, int len) {
- if (virLogStart >= virLogSize)
- virLogStart -= virLogSize;
- }
-- virLogUnlock();
- }
-
- static void virLogDumpAllFD(const char *msg, int len) {
-@@ -618,12 +618,28 @@ cleanup:
- return ret;
- }
-
-+static char *
-+virLogFormatTimestamp(void)
-+{
-+ struct timeval cur_time;
-+ struct tm time_info;
-+ char *str = NULL;
-+
-+ gettimeofday(&cur_time, NULL);
-+ localtime_r(&cur_time.tv_sec, &time_info);
-+
-+ if (virAsprintf(&str, "%02d:%02d:%02d.%03d",
-+ time_info.tm_hour, time_info.tm_min, time_info.tm_sec,
-+ (int) (cur_time.tv_usec / 1000)) < 0)
-+ return NULL;
-+
-+ return str;
-+}
-+
- static int
- virLogFormatString(char **msg,
- const char *funcname,
- long long linenr,
-- struct tm *time_info,
-- struct timeval *cur_time,
- int priority,
- const char *str)
- {
-@@ -637,25 +653,19 @@ virLogFormatString(char **msg,
- * to just grep for it to find the right place.
- */
- if ((funcname != NULL)) {
-- ret = virAsprintf(msg, "%02d:%02d:%02d.%03d: %d: %s : %s:%lld : %s\n",
-- time_info->tm_hour, time_info->tm_min,
-- time_info->tm_sec, (int) cur_time->tv_usec / 1000,
-- virThreadSelfID(),
-- virLogPriorityString(priority), funcname, linenr, str);
-+ ret = virAsprintf(msg, "%d: %s : %s:%lld : %s\n",
-+ virThreadSelfID(), virLogPriorityString(priority),
-+ funcname, linenr, str);
- } else {
-- ret = virAsprintf(msg, "%02d:%02d:%02d.%03d: %d: %s : %s\n",
-- time_info->tm_hour, time_info->tm_min,
-- time_info->tm_sec, (int) cur_time->tv_usec / 1000,
-- virThreadSelfID(),
-- virLogPriorityString(priority), str);
-+ ret = virAsprintf(msg, "%d: %s : %s\n",
-+ virThreadSelfID(), virLogPriorityString(priority),
-+ str);
- }
- return ret;
- }
-
- static int
--virLogVersionString(char **msg,
-- struct tm *time_info,
-- struct timeval *cur_time)
-+virLogVersionString(char **msg)
- {
- #ifdef PACKAGER_VERSION
- # ifdef PACKAGER
-@@ -670,9 +680,7 @@ virLogVersionString(char **msg,
- "libvirt version: " VERSION
- #endif
-
-- return virLogFormatString(msg, NULL, 0,
-- time_info, cur_time,
-- VIR_LOG_INFO, LOG_VERSION_STRING);
-+ return virLogFormatString(msg, NULL, 0, VIR_LOG_INFO, LOG_VERSION_STRING);
- }
-
- /**
-@@ -694,9 +702,8 @@ void virLogMessage(const char *category, int priority, const char *funcname,
- static bool logVersionStderr = true;
- char *str = NULL;
- char *msg = NULL;
-- struct timeval cur_time;
-- struct tm time_info;
-- int len, fprio, i, ret;
-+ char *timestamp = NULL;
-+ int fprio, i, ret;
- int saved_errno = errno;
- int emit = 1;
- va_list ap;
-@@ -730,16 +737,15 @@ void virLogMessage(const char *category, int priority, const char *funcname,
- goto cleanup;
- }
- va_end(ap);
-- gettimeofday(&cur_time, NULL);
-- localtime_r(&cur_time.tv_sec, &time_info);
-
-- ret = virLogFormatString(&msg, funcname, linenr,
-- &time_info, &cur_time,
-- priority, str);
-+ ret = virLogFormatString(&msg, funcname, linenr, priority, str);
- VIR_FREE(str);
- if (ret < 0)
- goto cleanup;
-
-+ if (!(timestamp = virLogFormatTimestamp()))
-+ goto cleanup;
-+
- /*
- * Log based on defaults, first store in the history buffer,
- * then if emit push the message on the outputs defined, if none
-@@ -748,42 +754,49 @@ void virLogMessage(const char *category, int priority, const char *funcname,
- * threads, but avoid intermixing. Maybe set up locks per output
- * to improve paralellism.
- */
-- len = strlen(msg);
-- virLogStr(msg, len);
-+ virLogLock();
-+ virLogStr(timestamp);
-+ virLogStr(msg);
-+ virLogUnlock();
- if (emit == 0)
- goto cleanup;
-
- virLogLock();
-- for (i = 0; i < virLogNbOutputs;i++) {
-+ for (i = 0; i < virLogNbOutputs; i++) {
- if (priority >= virLogOutputs[i].priority) {
- if (virLogOutputs[i].logVersion) {
- char *ver = NULL;
-- if (virLogVersionString(&ver, &time_info, &cur_time) >= 0)
-- virLogOutputs[i].f(category, VIR_LOG_INFO, __func__, __LINE__,
-- ver, strlen(ver),
-+ if (virLogVersionString(&ver) >= 0)
-+ virLogOutputs[i].f(category, VIR_LOG_INFO,
-+ __func__, __LINE__,
-+ timestamp, ver,
- virLogOutputs[i].data);
- VIR_FREE(ver);
- virLogOutputs[i].logVersion = false;
- }
- virLogOutputs[i].f(category, priority, funcname, linenr,
-- msg, len, virLogOutputs[i].data);
-+ timestamp, msg, virLogOutputs[i].data);
- }
- }
- if ((virLogNbOutputs == 0) && (flags != 1)) {
- if (logVersionStderr) {
- char *ver = NULL;
-- if (virLogVersionString(&ver, &time_info, &cur_time) >= 0)
-- ignore_value (safewrite(STDERR_FILENO,
-- ver, strlen(ver)));
-+ if (virLogVersionString(&ver) >= 0)
-+ virLogOutputToFd(category, VIR_LOG_INFO,
-+ __func__, __LINE__,
-+ timestamp, ver,
-+ (void *) STDERR_FILENO);
- VIR_FREE(ver);
- logVersionStderr = false;
- }
-- ignore_value (safewrite(STDERR_FILENO, msg, len));
-+ virLogOutputToFd(category, priority, funcname, linenr,
-+ timestamp, msg, (void *) STDERR_FILENO);
- }
- virLogUnlock();
-
- cleanup:
- VIR_FREE(msg);
-+ VIR_FREE(timestamp);
- errno = saved_errno;
- }
-
-@@ -791,13 +804,23 @@ static int virLogOutputToFd(const char *category ATTRIBUTE_UNUSED,
- int priority ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- long long linenr ATTRIBUTE_UNUSED,
-- const char *str, int len, void *data) {
-+ const char *timestamp,
-+ const char *str,
-+ void *data)
-+{
- int fd = (long) data;
- int ret;
-+ char *msg;
-
- if (fd < 0)
- return -1;
-- ret = safewrite(fd, str, len);
-+
-+ if (virAsprintf(&msg, "%s: %s", timestamp, str) < 0)
-+ return -1;
-+
-+ ret = safewrite(fd, msg, strlen(msg));
-+ VIR_FREE(msg);
-+
- return ret;
- }
-
-@@ -833,8 +856,10 @@ static int virLogOutputToSyslog(const char *category ATTRIBUTE_UNUSED,
- int priority,
- const char *funcname ATTRIBUTE_UNUSED,
- long long linenr ATTRIBUTE_UNUSED,
-- const char *str, int len ATTRIBUTE_UNUSED,
-- void *data ATTRIBUTE_UNUSED) {
-+ const char *timestamp ATTRIBUTE_UNUSED,
-+ const char *str,
-+ void *data ATTRIBUTE_UNUSED)
-+{
- int prio;
-
- switch (priority) {
-@@ -854,7 +879,7 @@ static int virLogOutputToSyslog(const char *category ATTRIBUTE_UNUSED,
- prio = LOG_ERR;
- }
- syslog(prio, "%s", str);
-- return len;
-+ return strlen(str);
- }
-
- static char *current_ident = NULL;
-diff --git a/src/util/logging.h b/src/util/logging.h
-index 20c8948..2343de0 100644
---- a/src/util/logging.h
-+++ b/src/util/logging.h
-@@ -78,8 +78,8 @@ typedef enum {
- * @priority: the priority for the message
- * @funcname: the function emitting the message
- * @linenr: line where the message was emitted
-- * @msg: the message to log, preformatted and zero terminated
-- * @len: the lenght of the message in bytes without the terminating zero
-+ * @timestamp: zero terminated string with timestamp of the message
-+ * @str: the message to log, preformatted and zero terminated
- * @data: extra output logging data
- *
- * Callback function used to output messages
-@@ -87,8 +87,9 @@ typedef enum {
- * Returns the number of bytes written or -1 in case of error
- */
- typedef int (*virLogOutputFunc) (const char *category, int priority,
-- const char *funcname, long long lineno,
-- const char *str, int len, void *data);
-+ const char *funcname, long long linenr,
-+ const char *timestamp, const char *str,
-+ void *data);
-
- /**
- * virLogCloseFunc:
-diff --git a/tests/testutils.c b/tests/testutils.c
-index d9582af..08db732 100644
---- a/tests/testutils.c
-+++ b/tests/testutils.c
-@@ -458,11 +458,13 @@ virtTestLogOutput(const char *category ATTRIBUTE_UNUSED,
- int priority ATTRIBUTE_UNUSED,
- const char *funcname ATTRIBUTE_UNUSED,
- long long lineno ATTRIBUTE_UNUSED,
-- const char *str, int len, void *data)
-+ const char *timestamp,
-+ const char *str,
-+ void *data)
- {
- struct virtTestLogData *log = data;
-- virBufferAdd(&log->buf, str, len);
-- return len;
-+ virBufferAsprintf(&log->buf, "%s: %s", timestamp, str);
-+ return strlen(timestamp) + 2 + strlen(str);
- }
-
- static void
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-network-don-t-add-iptables-rules-for-externally-mana.patch b/libvirt-0.9.6-network-don-t-add-iptables-rules-for-externally-mana.patch
deleted file mode 100644
index 87be2b3..0000000
--- a/libvirt-0.9.6-network-don-t-add-iptables-rules-for-externally-mana.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-From 5518346b4eb63a89d61f49f3ae9e58dd2ebfbd94 Mon Sep 17 00:00:00 2001
-From: Laine Stump
-Date: Tue, 6 Dec 2011 15:13:50 -0500
-Subject: [PATCH 11/13] network: don't add iptables rules for externally
- managed networks
-
-(direct cherry-pick of upstream commit ae1232b)
-
-This patch addresses https://bugzilla.redhat.com/show_bug.cgi?id=760442
-
-When a network has any forward type other than route, nat or none, the
-network configuration should be done completely external to libvirt -
-libvirt only uses these types to allow configuring guests in a manner
-that isn't tied to a specific host (all the host-specific information,
-in particular interface names, port profile data, and bandwidth
-configuration is in the network definition, and the guest
-configuration only references it).
-
-Due to a bug in the bridge network driver, libvirt was adding iptables
-rules for networks with forward type='bridge' etc. any time libvirtd
-was restarted while one of these networks was active.
-
-This patch eliminates that error by only "reloading" iptables rules if
-forward type is route, nat, or none.
----
- src/network/bridge_driver.c | 18 +++++++++++++-----
- 1 files changed, 13 insertions(+), 5 deletions(-)
-
-diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
-index 9960745..be725d9 100644
---- a/src/network/bridge_driver.c
-+++ b/src/network/bridge_driver.c
-@@ -1480,14 +1480,22 @@ networkReloadIptablesRules(struct network_driver *driver)
- VIR_INFO("Reloading iptables rules");
-
- for (i = 0 ; i < driver->networks.count ; i++) {
-- virNetworkObjLock(driver->networks.objs[i]);
-- if (virNetworkObjIsActive(driver->networks.objs[i])) {
-- networkRemoveIptablesRules(driver, driver->networks.objs[i]);
-- if (networkAddIptablesRules(driver, driver->networks.objs[i]) < 0) {
-+ virNetworkObjPtr network = driver->networks.objs[i];
-+
-+ virNetworkObjLock(network);
-+ if (virNetworkObjIsActive(network) &&
-+ ((network->def->forwardType == VIR_NETWORK_FORWARD_NONE) ||
-+ (network->def->forwardType == VIR_NETWORK_FORWARD_NAT) ||
-+ (network->def->forwardType == VIR_NETWORK_FORWARD_ROUTE))) {
-+ /* Only the three L3 network types that are configured by libvirt
-+ * need to have iptables rules reloaded.
-+ */
-+ networkRemoveIptablesRules(driver, network);
-+ if (networkAddIptablesRules(driver, network) < 0) {
- /* failed to add but already logged */
- }
- }
-- virNetworkObjUnlock(driver->networks.objs[i]);
-+ virNetworkObjUnlock(network);
- }
- }
-
---
-1.7.7.3
-
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.
-
-
-
-@@ -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.
-
-
-
-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-qemu-replace-deprecated-fedora-13-machine.patch b/libvirt-0.9.6-qemu-replace-deprecated-fedora-13-machine.patch
deleted file mode 100644
index 4562df7..0000000
--- a/libvirt-0.9.6-qemu-replace-deprecated-fedora-13-machine.patch
+++ /dev/null
@@ -1,156 +0,0 @@
-From eaf056bf995558ecf6620ce031287f3aa81b66de Mon Sep 17 00:00:00 2001
-From: Laine Stump
-Date: Tue, 6 Dec 2011 12:47:28 -0500
-Subject: [PATCH 1/2] qemu: replace deprecated fedora-13 machine type with
- pc-0.14
-
-This addresses https://bugzilla.redhat.com/show_bug.cgi?id=754772 .
-It should only be applied to Fedora builds of libvirt, F15 and
-later, so there is no upstream equivalent patch.
-
-Background:
-
-During the lifetime of Fedora 13, some features were backported into
-the F13 build of qemu-kvm from upstream. These features were part of
-the functionality of machine type "pc-0.13" in upstream qemu-kvm, so a
-special "fedora-13" machine type was created for the F13 qemu-kvm.
-Since "fedora-13" became the new "canonical machine type", all new
-domains created with F13 libvirt tools by default contained that
-machine type in their configuration file.
-
-In Fedora 14, a patch was made to qemu to treat the fedora-13 machine
-type as equivalent to "pc-0.13". When Fedora 15 was released, this was
-inadvertently changed to make it equivalent to "pc-0.14".
-
-With the release of Fedora 16, qemu-kvm initially removed support for
-this machine type, which caused failure of many guest configurations
-to start. qemu-kvm subsequently re-added the patch to support
-fedora-13 (as equivalent to pc-0.14), but with the promise that they
-could remove it with the release of Fedora 17. (see
-https://bugzilla.redhat.com/show_bug.cgi?id=748218 ).
-
-Solution:
-
-In order to create a repeat of the recent problems, prior to F17
-existing guest configurations need to be updated to change fedora-13
-to pc-0.14 (which has been determined to be equivalent for all
-practical purposes in both F15 and F16). That's what this patch does:
-
-1) Each time libvirtd is started, it calls virDomainLoadAllConfigs()
-which calls virDomainLoadConfig(); this function has been modified to
-check for os.machine == "fedora-13", and change it to "pc-0.14" then
-write the updated config back to disk.
-
-2) Also, any other time a domain definition is parsed, the parsed
-version in memory is changed to turn "fedora-13" into "pc-0.14". This
-handles domains that had been saved to disk prior to the upgrade, and
-are subsequently restarted.
-
-3) Finally, whenever a domain definition is formatted into a string,
-any occurrence of fedora-13 is replaced with pc-0.14 *directly in the
-virDomainDef* (to avoid multiple warning messages for the same object
-when it's formatted multiple times). This should deal with those cases
-where a domain was running at the time of upgrade, and is later
-saved/snapshotted.
-
-I had considered doing this with some sed commands in the specfile,
-but that wouldn't do anything to help the xml saved in image files.
-
-(Also, one of the xml tests was using the machine type "fedora-13",
-and since that machine type is treated specially by the rest of this
-patch, it was failing. That has been changed in a separate patch,
-which must be applied with this patch, and which *is* also upstream).
----
- src/conf/domain_conf.c | 62 +++++++++++++++++++++++++++++++++++++++++++++--
- 1 files changed, 59 insertions(+), 3 deletions(-)
-
-diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
-index 318f523..7906bb8 100644
---- a/src/conf/domain_conf.c
-+++ b/src/conf/domain_conf.c
-@@ -7500,7 +7500,25 @@ virDomainDefPtr virDomainDefParseString(virCapsPtr caps,
- unsigned int expectedVirtTypes,
- unsigned int flags)
- {
-- return virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags);
-+ virDomainDefPtr def
-+ = virDomainDefParse(xmlStr, NULL, caps, expectedVirtTypes, flags);
-+
-+ /* Fedora-specific HACK - treat fedora-13 and pc-0.14 as equivalent.
-+ * This handles the case of domains that had been saved to an image file
-+ * prior to upgrade (save or snapshot), then restarted/reverted.
-+ */
-+ if (def && STREQ_NULLABLE(def->os.machine, "fedora-13")) {
-+ VIR_FREE(def->os.machine);
-+ if (!(def->os.machine = strdup("pc-0.14"))) {
-+ virReportOOMError();
-+ virDomainDefFree(def);
-+ def = NULL;
-+ } else {
-+ VIR_WARN("Replacing deprecated 'fedora-13' machine type "
-+ "with equivalent 'pc-0.14' in domain %s xml", def->name);
-+ }
-+ }
-+ return def;
- }
-
- virDomainDefPtr virDomainDefParseFile(virCapsPtr caps,
-@@ -10648,8 +10666,30 @@ virDomainDefFormatInternal(virDomainDefPtr def,
- virBufferAddLit(buf, " os.arch)
- virBufferAsprintf(buf, " arch='%s'", def->os.arch);
-- if (def->os.machine)
-- virBufferAsprintf(buf, " machine='%s'", def->os.machine);
-+ if (def->os.machine) {
-+ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14"
-+ * (in the original DomainDef as well as in the xml output).
-+ * This will catch XML being written to save/migration images
-+ * of domains that were running when libvirtd was restarted at
-+ * the time of upgrade.
-+ */
-+ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) {
-+ virBufferAddLit(buf, " machine='pc-0.14'");
-+ VIR_WARN("substituting machine type 'fedora-13' with 'pc-0.14' "
-+ "in domain %s", def->name);
-+ /* It's not exactly nice to modify the source object,
-+ * but sometimes virDomainFormat is called > 100 times for the
-+ * same object, which would result in far too many warning logs.
-+ */
-+ VIR_FREE(def->os.machine);
-+ if (!(def->os.machine = strdup("pc-0.14"))) {
-+ virReportOOMError();
-+ goto cleanup;
-+ }
-+ } else {
-+ virBufferAsprintf(buf, " machine='%s'", def->os.machine);
-+ }
-+ }
- /*
- * HACK: For xen driver we previously used bogus 'linux' as the
- * os type for paravirt, whereas capabilities declare it to
-@@ -11100,6 +11140,22 @@ static virDomainObjPtr virDomainLoadConfig(virCapsPtr caps,
- VIR_DOMAIN_XML_INACTIVE)))
- goto error;
-
-+ /* Fedora-specific HACK - replace "fedora-13" with "pc-0.14".
-+ * This updates all config files at the first restart of libvirt
-+ * after upgrade.
-+ */
-+ if (STREQ_NULLABLE(def->os.machine, "fedora-13")) {
-+ VIR_FREE(def->os.machine);
-+ if (!(def->os.machine = strdup("pc-0.14"))) {
-+ virReportOOMError();
-+ goto error;
-+ }
-+ VIR_WARN("Replacing deprecated 'fedora-13' machine type "
-+ "with equivalent 'pc-0.14' in domain %s configuration file", name);
-+ if (virDomainSaveConfig(configDir, def) < 0)
-+ goto error;
-+ }
-+
- if ((autostartLink = virDomainConfigFile(autostartDir, name)) == NULL)
- goto error;
-
---
-1.7.7.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-0.9.6-spec-add-dmidecode-as-prereq.patch b/libvirt-0.9.6-spec-add-dmidecode-as-prereq.patch
deleted file mode 100644
index 26e9abb..0000000
--- a/libvirt-0.9.6-spec-add-dmidecode-as-prereq.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-From 72675eeaebc67857d0f1f62b5daeaa35506cd207 Mon Sep 17 00:00:00 2001
-From: Eric Blake
-Date: Mon, 5 Dec 2011 10:32:41 -0700
-Subject: [PATCH 08/13] spec: add dmidecode as prereq
-
-(cherry-pick of upstream e7dfa46 with extra requires for with_systemd
-removed, since the patch that adds that hasn't been backported)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=754909 complains that
-because libvirt didn't require dmidecode, that the logs are noisy
-and virConnectGetSysinfo needlessly fails. Even 'virt-what' requires
-dmidecode, so it's not that onerous of a dependency. We may be
-able to drop this in the future when we move to parsing sysfs data,
-but for now, listing the dependency will help matters.
-
-* libvirt.spec.in (Requires): Sort Requires before BuildRequires.
-Add dmidecode.
----
- libvirt.spec.in | 2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index 5cb87fb..ba950c6 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -326,6 +326,8 @@ Requires: device-mapper
- %if %{with_cgconfig}
- Requires: libcgroup
- %endif
-+# For virConnectGetSysinfo
-+Requires: dmidecode
-
- # All build-time requirements
- BuildRequires: python-devel
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-spec-don-t-use-chkconfig-list.patch b/libvirt-0.9.6-spec-don-t-use-chkconfig-list.patch
deleted file mode 100644
index f52e637..0000000
--- a/libvirt-0.9.6-spec-don-t-use-chkconfig-list.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 65a4c1782b197787bb960427cf0106c8d8225777 Mon Sep 17 00:00:00 2001
-From: Eric Blake
-Date: Tue, 6 Dec 2011 16:16:34 -0700
-Subject: [PATCH 09/13] spec: don't use chkconfig --list
-
-(direct cherry-pick of upstream commit fea83dd)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=694403 reports that
-the specfile is incorrectly checking for a running libvirt-guests
-service. For example,
-
-$ LC_ALL=es_ES chkconfig --list libvirt-guests
-libvirt-guests 0:desactivado 1:desactivado 2:desactivado 3:activo 4:activo 5:activo 6:desactivado
-
-will fail to find 5:on, even though it is active. But chkconfig
-already has a mode where you can silently use the exit status to
-check for an active service.
-
-* libvirt.spec.in (%post): Use simpler chkconfig options, to avoid
-issues with localization.
----
- libvirt.spec.in | 6 ++----
- 1 files changed, 2 insertions(+), 4 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index ba950c6..ad522bc 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -846,8 +846,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," \
-@@ -934,8 +933,7 @@ fi
- /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
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-spec-fix-logic-bug-in-deciding-to-turn-on-cgconfig.patch b/libvirt-0.9.6-spec-fix-logic-bug-in-deciding-to-turn-on-cgconfig.patch
deleted file mode 100644
index 13bcb4e..0000000
--- a/libvirt-0.9.6-spec-fix-logic-bug-in-deciding-to-turn-on-cgconfig.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 6b9e1293f940536fcdfba91b1aea776ad847e09c Mon Sep 17 00:00:00 2001
-From: Eric Blake
-Date: Thu, 8 Dec 2011 13:32:37 -0700
-Subject: [PATCH 10/13] spec: fix logic bug in deciding to turn on cgconfig
-
-(cirect cherry-pick of upstream commit 3b95f28)
-
-https://bugzilla.redhat.com/show_bug.cgi?id=738725
-
-Commit ecd8725 tried to silence a spurious warning on the initial
-libvirt install, and commit ba6cbb1 tried to fix up the logic to the
-correct Fedora version, but the warning was still present due to a
-logic bug: since %{fedora} and %{rhel} are never simulatanously
-set, then 0%{rhel} <= 6 made the %if always true. Checking for
-minimum versions (via >=) is okay, but checking for maximum versions
-(via <=) requires a prerequisite test that the platform being tested
-is non-zero.
-
-Also fix a bogus setting of with_libxl (although we previously
-hard-code with_libxl to 0 for rhel earlier in the file, so this
-was not as severe a bug).
-
-* libvirt.spec.in (with_cgconfig): Don't enable cgconfig on F16.
----
- libvirt.spec.in | 4 ++--
- 1 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index ad522bc..cfc3a43 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -135,7 +135,7 @@
- %endif
-
- # Fedora doesn't have new enough Xen for libxl until F16
--%if 0%{?fedora} < 16
-+%if 0%{?fedora} && 0%{?fedora} < 16
- %define with_libxl 0
- %endif
-
-@@ -899,7 +899,7 @@ done
- %if %{with_cgconfig}
- # Starting with Fedora 16, systemd automounts all cgroups, and cgconfig is
- # no longer a necessary service.
--%if 0%{?fedora} <= 15 || 0%{?rhel} <= 6
-+%if 0%{?rhel} || (0%{?fedora} && 0%{?fedora} < 16)
- if [ "$1" -eq "1" ]; then
- /sbin/chkconfig cgconfig on
- fi
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-spec-make-it-easier-to-autoreconf-when-building-rpm.patch b/libvirt-0.9.6-spec-make-it-easier-to-autoreconf-when-building-rpm.patch
deleted file mode 100644
index be78831..0000000
--- a/libvirt-0.9.6-spec-make-it-easier-to-autoreconf-when-building-rpm.patch
+++ /dev/null
@@ -1,109 +0,0 @@
-From 473e5ca36260011a330e1e3bf8f4f3b6865b5638 Mon Sep 17 00:00:00 2001
-From: Eric Blake
-Date: Mon, 5 Dec 2011 10:22:10 -0700
-Subject: [PATCH 2/2] spec: make it easier to autoreconf when building rpm
-
-Over time, Fedora and RHEL RPMs have often backported upstream
-patches that touched configure.ac and/or Makefile.am; this
-necessitates rerunning the autotools for the patch to be effective.
-Making this a one-liner spec tweak will make it easier for future
-backports to pull patches without having to find all the places
-to touch to properly use the autotools. Meanwhile, there have been
-historical instances where an update in the autotools caused FTBFS
-situations, so this is not on by default.
-
-* libvirt.spec.in (enable_autotools): New variable, default off.
-(BuildRequires): Conditionally add autotools.
-(%build): Conditionally use them before configure.
-* mingw32-libvirt.spec.in: Likewise.
-
-Conflicts:
-
- mingw32-libvirt.spec.in - caused by change in context
----
- libvirt.spec.in | 14 ++++++++++++++
- mingw32-libvirt.spec.in | 15 +++++++++++++++
- 2 files changed, 29 insertions(+), 0 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index cfc3a43..8579ba8 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -8,6 +8,11 @@
- sed -ne 's/^\.fc\?\([0-9]\+\).*/%%define fedora \1/p')}
- %endif
-
-+# Default to skipping autoreconf. Distros can change just this one line
-+# (or provide a command-line override) if they backport any patches that
-+# touch configure.ac or Makefile.am.
-+%{!?enable_autotools:%define enable_autotools 0}
-+
- # A client only build will create a libvirt.so only containing
- # the generic RPC driver, and test driver and no libvirtd
- # Default to a full server + client build
-@@ -330,6 +335,12 @@ Requires: libcgroup
- Requires: dmidecode
-
- # All build-time requirements
-+%if 0%{?enable_autotools}
-+BuildRequires: autoconf
-+BuildRequires: automake
-+BuildRequires: gettext-devel
-+BuildRequires: libtool
-+%endif
- BuildRequires: python-devel
-
- %if %{with_xen}
-@@ -700,6 +711,9 @@ of recent versions of Linux (and other OSes).
- %define with_packager_version --with-packager-version="%{release}"
-
-
-+%if 0%{?enable_autotools}
-+autoreconf -if
-+%endif
- %configure %{?_without_xen} \
- %{?_without_qemu} \
- %{?_without_openvz} \
-diff --git a/mingw32-libvirt.spec.in b/mingw32-libvirt.spec.in
-index f651d11..e071c38 100644
---- a/mingw32-libvirt.spec.in
-+++ b/mingw32-libvirt.spec.in
-@@ -5,6 +5,11 @@
- %define __find_provides %{_mingw32_findprovides}
- %define __debug_install_post %{_mingw32_debug_install_post}
-
-+# Default to skipping autoreconf. Distros can change just this one line
-+# (or provide a command-line override) if they backport any patches that
-+# touch configure.ac or Makefile.am.
-+%{!?enable_autotools:%define enable_autotools 0}
-+
- Name: mingw32-libvirt
- Version: @VERSION@
- Release: 3%{?dist}%{?extra_release}
-@@ -28,6 +33,12 @@ BuildRequires: mingw32-portablexdr
- BuildRequires: pkgconfig
- # Need native version for msgfmt
- BuildRequires: gettext
-+%if 0%{?enable_autotools}
-+BuildRequires: autoconf
-+BuildRequires: automake
-+BuildRequires: gettext-devel
-+BuildRequires: libtool
-+%endif
-
- BuildArch: noarch
-
-@@ -42,6 +53,10 @@ MinGW Windows libvirt virtualization library.
-
-
- %build
-+%if 0%{?enable_autotools}
-+autoreconf -if
-+%endif
-+
- # XXX enable SASL in future
- %{_mingw32_configure} \
- --without-sasl \
---
-1.7.7.4
-
diff --git a/libvirt-0.9.6-spec-mark-directories-in-var-run-as-ghosts.patch b/libvirt-0.9.6-spec-mark-directories-in-var-run-as-ghosts.patch
deleted file mode 100644
index 57756a5..0000000
--- a/libvirt-0.9.6-spec-mark-directories-in-var-run-as-ghosts.patch
+++ /dev/null
@@ -1,74 +0,0 @@
-From 15dbf094eb90a896ecb73c4c92bed649eb8b5f4c Mon Sep 17 00:00:00 2001
-From: Eric Blake
-Date: Wed, 30 Nov 2011 15:34:42 -0700
-Subject: [PATCH 06/13] spec: mark directories in /var/run as ghosts
-
-(direct cherry-pick of upstream 764574f to resolve
-https://bugzilla.redhat.com/show_bug.cgi?id=758896)
-
-We have several directories that are created on the fly, and which
-only contain state relevant to a running libvirtd process (all
-located in /var/run). Since the directories are created as needed,
-and make no sense without a running libvirtd, we want them deleted
-if libvirt is uninstalled. And in F15 and newer, /var/run is on
-tmpfs (forcing us to recreate on the fly); which means that someone
-trying to verify a complete rpm will fail if the directory does not
-currently exist because libvirtd has not been started since boot.
-The solution, then, is to mark the directories as %ghost, so that
-rpm knows that we own them and will clean it up if libvirt is
-uninstalled, but will no longer create the directory for us at
-install, nor complain at verify time if the directory does not exist.
-
-See https://bugzilla.redhat.com/show_bug.cgi?id=656611.
-
-* libvirt.spec.in (%files): Add %ghost to temporary directories
-that we don't install, but want cleaned up on libvirt removal.
----
- libvirt.spec.in | 12 ++++++------
- 1 files changed, 6 insertions(+), 6 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index b87e3f6..5cb87fb 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -992,31 +992,31 @@ fi
- %{_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/boot/
- %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
---
-1.7.7.3
-
diff --git a/libvirt-0.9.6-specfile-fix-typo-in-chkconfig-commandline.patch b/libvirt-0.9.6-specfile-fix-typo-in-chkconfig-commandline.patch
deleted file mode 100644
index b8a69a8..0000000
--- a/libvirt-0.9.6-specfile-fix-typo-in-chkconfig-commandline.patch
+++ /dev/null
@@ -1,40 +0,0 @@
-From b221be79d0682b12249cb4b408e1b649cb2bc974 Mon Sep 17 00:00:00 2001
-From: Laine Stump
-Date: Mon, 12 Mar 2012 14:03:38 -0400
-Subject: [PATCH] specfile: fix typo in chkconfig commandline
-
-This addresses https://bugzilla.redhat.com/show_bug.cgi?id=786890 in
-the simplest manner possible.
-
-The problem is that the chkconfig command is being called with
-"--levels", but the option name is actually "--level".
-
-Upstream libvirt has completely removed the offending code, but the
-patch that does that is more invasive than this patch, which simply
-corrects the misspelling.
-
-Note that this change really needs to be in the Fedora-git
-libvirt.spec file, *not* the specfile in the source RPM. This patch to
-the src.rpm copy is included purely to prevent potential regression in
-the event someone regenerates Fedora's libvirt.spec from sources.
----
- libvirt.spec.in | 2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/libvirt.spec.in b/libvirt.spec.in
-index 8579ba8..4b311b7 100644
---- a/libvirt.spec.in
-+++ b/libvirt.spec.in
-@@ -947,7 +947,7 @@ fi
- /sbin/chkconfig --add libvirt-guests
- if [ $1 -ge 1 ]; then
- level=$(/sbin/runlevel | /bin/cut -d ' ' -f 2)
-- if /sbin/chkconfig --levels $level libvirt-guests; then
-+ if /sbin/chkconfig --level $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
---
-1.7.7.6
-
-
diff --git a/libvirt-0.9.6-test-replace-deprecated-fedora-13-machine.patch b/libvirt-0.9.6-test-replace-deprecated-fedora-13-machine.patch
deleted file mode 100644
index d1ec284..0000000
--- a/libvirt-0.9.6-test-replace-deprecated-fedora-13-machine.patch
+++ /dev/null
@@ -1,52 +0,0 @@
-From 3ee5e12e58f876cf2ffc7d668e4ce9d461a9a7fd Mon Sep 17 00:00:00 2001
-From: Laine Stump
-Date: Fri, 9 Dec 2011 15:55:14 -0500
-Subject: [PATCH 12/13] test: replace deprecated "fedora-13" machine with
- "pc-0.13"
-
-This is a direct cherry-pick of upstream commit 7204a9f. This patch is a
-prerequisite for the following patch "qemu: replace deprecated
-fedora-13 machine type with pc-0.14", which resolves
-https://bugzilla.redhat.com/show_bug.cgi?id=754772 .
-
-One of the xml tests in the test suite was created using a
-now-deprecated qemu machine type ("fedora-13", which was only ever
-valid for Fedora builds of qemu). Although strictly speaking it's not
-necessary to replace it with an actual supported qemu machine type
-(since the xml in question is never actually sent to qemu), this patch
-changes it to the actually-supported "pc-0.13" just for general
-tidiness. (Also, on some Fedora builds which contain a special patch
-to rid the world of "fedora-13", having it mentioned in the test suite
-will cause make check to fail.)
----
- .../qemuxml2argv-encrypted-disk.args | 2 +-
- .../qemuxml2argv-encrypted-disk.xml | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args
-index 1da0073..c6634fd 100644
---- a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.args
-@@ -1,5 +1,5 @@
- LC_ALL=C PATH=/sbin:/usr/sbin:/bin:/usr/bin HOME=/root USER=root LOGNAME=root \
--/usr/bin/qemu -S -M fedora-13 -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name \
-+/usr/bin/qemu -S -M pc-0.13 -m 1024 -smp 1,sockets=1,cores=1,threads=1 -name \
- encryptdisk -uuid 496898a6-e6ff-f7c8-5dc2-3cf410945ee9 -nographic -nodefconfig \
- -nodefaults -chardev socket,id=monitor,\
- path=//var/lib/libvirt/qemu/encryptdisk.monitor,server,nowait -mon \
-diff --git a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.xml b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.xml
-index f5e5d74..fdcf624 100644
---- a/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.xml
-+++ b/tests/qemuxml2argvdata/qemuxml2argv-encrypted-disk.xml
-@@ -5,7 +5,7 @@
- 524288
- 1
-
-- hvm
-+ hvm
-
-
-
---
-1.7.7.3
-
diff --git a/libvirt-dmidecode-hang.patch b/libvirt-dmidecode-hang.patch
deleted file mode 100644
index 5d8f298..0000000
--- a/libvirt-dmidecode-hang.patch
+++ /dev/null
@@ -1,153 +0,0 @@
-commit 06b9c5b9231ef4dbd4b5ff69564305cd4f814879
-Author: Michal Privoznik
-Date: Tue Jan 3 18:40:55 2012 +0100
-
- virCommand: Properly handle POLLHUP
-
- It is a good practise to set revents to zero before doing any poll().
- Moreover, we should check if event we waited for really occurred or
- if any of fds we were polling on didn't encountered hangup.
-
-diff --git a/src/util/command.c b/src/util/command.c
-index f5effdf..bdaa88b 100644
---- a/src/util/command.c
-+++ b/src/util/command.c
-@@ -1620,16 +1620,19 @@ virCommandProcessIO(virCommandPtr cmd)
- if (infd != -1) {
- fds[nfds].fd = infd;
- fds[nfds].events = POLLOUT;
-+ fds[nfds].revents = 0;
- nfds++;
- }
- if (outfd != -1) {
- fds[nfds].fd = outfd;
- fds[nfds].events = POLLIN;
-+ fds[nfds].revents = 0;
- nfds++;
- }
- if (errfd != -1) {
- fds[nfds].fd = errfd;
- fds[nfds].events = POLLIN;
-+ fds[nfds].revents = 0;
- nfds++;
- }
-
-@@ -1645,8 +1648,8 @@ virCommandProcessIO(virCommandPtr cmd)
- }
-
- for (i = 0; i < nfds ; i++) {
-- if (fds[i].fd == errfd ||
-- fds[i].fd == outfd) {
-+ if (fds[i].revents & POLLIN &&
-+ (fds[i].fd == errfd || fds[i].fd == outfd)) {
- char data[1024];
- char **buf;
- size_t *len;
-@@ -1684,7 +1687,10 @@ virCommandProcessIO(virCommandPtr cmd)
- memcpy(*buf + *len, data, done);
- *len += done;
- }
-- } else {
-+ }
-+
-+ if (fds[i].revents & POLLOUT &&
-+ fds[i].fd == infd) {
- int done;
-
- /* Coverity 5.3.0 can't see that we only get here if
-@@ -1710,6 +1716,18 @@ virCommandProcessIO(virCommandPtr cmd)
- }
- }
-
-+ if (fds[i].revents & (POLLHUP | POLLERR)) {
-+ if (fds[i].fd == errfd) {
-+ VIR_DEBUG("hangup on stderr");
-+ errfd = -1;
-+ } else if (fds[i].fd == outfd) {
-+ VIR_DEBUG("hangup on stdout");
-+ outfd = -1;
-+ } else {
-+ VIR_DEBUG("hangup on stdin");
-+ infd = -1;
-+ }
-+ }
- }
- }
-
-commit d19149dda888d36cea58b6cdf7446f98bd1bf734
-Author: Laszlo Ersek
-Date: Tue Jan 24 15:55:19 2012 +0100
-
- virCommandProcessIO(): make poll() usage more robust
-
- POLLIN and POLLHUP are not mutually exclusive. Currently the following
- seems possible: the child writes 3K to its stdout or stderr pipe, and
- immediately closes it. We get POLLIN|POLLHUP (I'm not sure that's possible
- on Linux, but SUSv4 seems to allow it). We read 1K and throw away the
- rest.
-
- When poll() returns and we're about to check the /revents/ member in a
- given array element, let's map all the revents bits to two (independent)
- ideas: "let's attempt to read()", and "let's attempt to write()". This
- should cover all errors, EOFs, and normal conditions; the read()/write()
- call should report any pending error.
-
- Under this approach, both POLLHUP and POLLERR are mapped to "needs read()"
- if we're otherwise prepared for POLLIN. POLLERR also maps to "needs
- write()" if we're otherwise prepared for POLLOUT. The rest of the mappings
- (POLLPRI etc.) would be easy, but probably useless for pipes.
-
- Additionally, SUSv4 doesn't appear to forbid POLLIN|POLLERR (or
- POLLOUT|POLLERR) set simultaneously. One could argue that the read() or
- write() call would return without blocking in these cases (with an error),
- so POLLIN / POLLOUT would be justified beside POLLERR.
-
- The code now penalizes POLLIN|POLLERR differently from plain POLLERR. The
- former (ie. read() returning -1) is terminal and we jump to cleanup, while
- plain POLLERR masks only the affected file descriptor for the future.
- Let's unify those.
-
- Signed-off-by: Laszlo Ersek
-
-diff --git a/src/util/command.c b/src/util/command.c
-index f05493e..dc3cfc5 100644
---- a/src/util/command.c
-+++ b/src/util/command.c
-@@ -1710,7 +1710,7 @@ virCommandProcessIO(virCommandPtr cmd)
- }
-
- for (i = 0; i < nfds ; i++) {
-- if (fds[i].revents & POLLIN &&
-+ if (fds[i].revents & (POLLIN | POLLHUP | POLLERR) &&
- (fds[i].fd == errfd || fds[i].fd == outfd)) {
- char data[1024];
- char **buf;
-@@ -1751,7 +1751,7 @@ virCommandProcessIO(virCommandPtr cmd)
- }
- }
-
-- if (fds[i].revents & POLLOUT &&
-+ if (fds[i].revents & (POLLOUT | POLLERR) &&
- fds[i].fd == infd) {
- int done;
-
-@@ -1777,19 +1777,6 @@ virCommandProcessIO(virCommandPtr cmd)
- }
- }
- }
--
-- if (fds[i].revents & (POLLHUP | POLLERR)) {
-- if (fds[i].fd == errfd) {
-- VIR_DEBUG("hangup on stderr");
-- errfd = -1;
-- } else if (fds[i].fd == outfd) {
-- VIR_DEBUG("hangup on stdout");
-- outfd = -1;
-- } else {
-- VIR_DEBUG("hangup on stdin");
-- infd = -1;
-- }
-- }
- }
- }
-
diff --git a/libvirt-empty-lvm-hang.patch b/libvirt-empty-lvm-hang.patch
deleted file mode 100644
index ec3a081..0000000
--- a/libvirt-empty-lvm-hang.patch
+++ /dev/null
@@ -1,36 +0,0 @@
-commit 275155f664614fd32bcf5e963488e6f97b66dae4
-Author: Cole Robinson
-Date: Wed Jan 25 12:07:14 2012 -0500
-
- storage: Fix any VolLookupByPath if we have an empty logical pool
-
- On F16 at least, empty volume groups don't have a directory under /dev.
- The directory only appears once a logical volume is created.
-
- This tickles some behavior in BackendStablePath which ends with
- libvirt sleeping for 5 seconds while waiting for the directory to appear.
- This causes all sorts of problems for the virStorageVolLookupByPath API
- which virtinst uses, even if trying to resolve a path that is independent
- of the logical pool.
-
- In reality we don't even need to do that checking since logical pools
- always have a stable target path. Short circuit the polling in that
- case.
-
- Fixes bug 782261
-
-diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
-index d7394e0..306e487 100644
---- a/src/storage/storage_backend.c
-+++ b/src/storage/storage_backend.c
-@@ -1347,6 +1347,10 @@ virStorageBackendStablePath(virStoragePoolObjPtr pool,
- if (!STRPREFIX(pool->def->target.path, "/dev"))
- goto ret_strdup;
-
-+ /* Logical pools are under /dev but already have stable paths */
-+ if (pool->def->type == VIR_STORAGE_POOL_LOGICAL)
-+ goto ret_strdup;
-+
- /* We loop here because /dev/disk/by-{id,path} may not have existed
- * before we started this operation, so we have to give it some time to
- * get created.
diff --git a/libvirt-gnutls-test-failures.patch b/libvirt-gnutls-test-failures.patch
deleted file mode 100644
index ce740d0..0000000
--- a/libvirt-gnutls-test-failures.patch
+++ /dev/null
@@ -1,72 +0,0 @@
-commit 74ff57506c762f7c1f2bdbcce55f6d620687caab
-Author: Eric Blake
-Date: Fri Jan 6 14:07:23 2012 -0700
-
- tests: avoid test failure on rawhide gnutls
-
- I hit a VERY weird testsuite failure on rawhide, which included
- _binary_ output to stderr, followed by a hang waiting for me
- to type something! (Here, using ^@ for NUL):
-
- $ ./commandtest
- TEST: commandtest
- WARNING: gnome-keyring:: couldn't send data: Bad file descriptor
- .WARNING: gnome-keyring:: couldn't send data: Bad file descriptor
- .WARNING: gnome-keyring:: couldn't send data: Bad file descriptor
- WARNING: gnome-keyring:: couldn't send data: Bad file descriptor
- .8^@^@^@8^@^@^@^A^@^@^@^Bay^A^@^@^@)PRIVATE-GNOME-KEYRING-PKCS11-PROTOCOL-V-1
-
- I finally traced it to the fact that gnome-keyring, called via
- gnutls_global_init which is turn called by virNetTLSInit, opens
- an internal fd that it expects to communicate to via a
- pthread_atfork handler (never mind that it violates POSIX by
- using non-async-signal-safe functions in that handler:
- https://bugzilla.redhat.com/show_bug.cgi?id=772320).
-
- Our problem stems from the fact that we pulled the rug out from
- under the library's expectations by closing an fd that it had
- just opened. While we aren't responsible for fixing the bugs
- in that pthread_atfork handler, we can at least avoid the bugs
- by not closing the fd in the first place.
-
- * tests/commandtest.c (mymain): Avoid closing fds that were opened
- by virInitialize.
-
-diff --git a/tests/commandtest.c b/tests/commandtest.c
-index efc48fe..b4b6044 100644
---- a/tests/commandtest.c
-+++ b/tests/commandtest.c
-@@ -784,6 +784,22 @@ mymain(void)
- setpgid(0, 0);
- setsid();
-
-+ /* Our test expects particular fd values; to get that, we must not
-+ * leak fds that we inherited from a lazy parent. At the same
-+ * time, virInitialize may open some fds (perhaps via third-party
-+ * libraries that it uses), and we must not kill off an fd that
-+ * this process opens as it might break expectations of a
-+ * pthread_atfork handler, as well as interfering with our tests
-+ * trying to ensure we aren't leaking to our children. The
-+ * solution is to do things in two phases - reserve the fds we
-+ * want by overwriting any externally inherited fds, then
-+ * initialize, then clear the slots for testing. */
-+ if ((fd = open("/dev/null", O_RDONLY)) < 0 ||
-+ dup2(fd, 3) < 0 ||
-+ dup2(fd, 4) < 0 ||
-+ dup2(fd, 5) < 0 ||
-+ (fd > 5 && VIR_CLOSE(fd) < 0))
-+ return EXIT_FAILURE;
-
- /* Prime the debug/verbose settings from the env vars,
- * since we're about to reset 'environ' */
-@@ -791,8 +807,8 @@ mymain(void)
- virTestGetVerbose();
-
- virInitialize();
-- /* Kill off any inherited fds that might interfere with our
-- * testing. */
-+
-+ /* Phase two of killing interfering fds; see above. */
- fd = 3;
- VIR_FORCE_CLOSE(fd);
- fd = 4;
diff --git a/libvirt-large-migrate-crash.patch b/libvirt-large-migrate-crash.patch
deleted file mode 100644
index 5af41cd..0000000
--- a/libvirt-large-migrate-crash.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-commit 9bc9999b6eb815268798120d7fe8834d822f098d
-Author: Michal Privoznik
-Date: Tue Oct 11 10:40:36 2011 +0200
-
- qemu: Check for domain being active on successful job acquire
-
- As this is needed. Although some functions check for domain
- being active before obtaining job, we need to check it after,
- because obtaining job unlocks domain object, during which
- a state of domain can be changed.
-
-diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
-index a5be925..0e307e1 100644
---- a/src/qemu/qemu_driver.c
-+++ b/src/qemu/qemu_driver.c
-@@ -1948,9 +1948,18 @@ static int qemuDomainInjectNMI(virDomainPtr domain, unsigned int flags)
-
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
- goto cleanup;
-+
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- ret = qemuMonitorInjectNMI(priv->mon);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-+
-+endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0) {
- vm = NULL;
- goto cleanup;
-@@ -4397,7 +4406,7 @@ static char *qemuDomainGetXMLDesc(virDomainPtr dom,
- virDomainObjPtr vm;
- char *ret = NULL;
- unsigned long balloon;
-- int err;
-+ int err = 0;
-
- /* Flags checked by virDomainDefFormat */
-
-@@ -4423,9 +4432,17 @@ static char *qemuDomainGetXMLDesc(virDomainPtr dom,
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_QUERY) < 0)
- goto cleanup;
-
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- err = qemuMonitorGetBalloonInfo(priv->mon, &balloon);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-+
-+endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0) {
- vm = NULL;
- goto cleanup;
-@@ -7163,6 +7180,12 @@ qemudDomainBlockStatsFlags (virDomainPtr dom,
- if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
- goto cleanup;
-
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
- qemuDomainObjEnterMonitor(driver, vm);
- tmp = *nparams;
- ret = qemuMonitorGetBlockStatsParamsNumber(priv->mon, nparams);
-@@ -8682,6 +8705,12 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom,
- if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MIGRATION_OP) < 0)
- goto cleanup;
-
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
- VIR_DEBUG("Setting migration bandwidth to %luMbs", bandwidth);
- qemuDomainObjEnterMonitor(driver, vm);
- ret = qemuMonitorSetMigrationSpeed(priv->mon, bandwidth);
-@@ -8690,6 +8719,7 @@ qemuDomainMigrateSetMaxSpeed(virDomainPtr dom,
- if (ret == 0)
- priv->migMaxBandwidth = bandwidth;
-
-+endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0)
- vm = NULL;
- } else {
-@@ -8784,6 +8814,12 @@ qemuDomainSnapshotCreateActive(virConnectPtr conn,
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
- return -1;
-
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
- if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
- /* savevm monitor command pauses the domain emitting an event which
- * confuses libvirt since it's not notified when qemu resumes the
-@@ -8833,6 +8869,7 @@ cleanup:
- _("resuming after snapshot failed"));
- }
-
-+endjob:
- if (vm && qemuDomainObjEndJob(driver, vm) == 0) {
- /* Only possible if a transient vm quit while our locks were down,
- * in which case we don't want to save snapshot metadata. */
-@@ -9055,6 +9092,13 @@ qemuDomainSnapshotCreateDiskActive(virConnectPtr conn,
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
- return -1;
-
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID,
-+ "%s", _("domain is not running"));
-+ goto endjob;
-+ }
-+
-+
- if (virDomainObjGetState(vm, NULL) == VIR_DOMAIN_RUNNING) {
- /* In qemu, snapshot_blkdev on a single disk will pause cpus,
- * but this confuses libvirt since notifications are not given
-@@ -9137,12 +9181,14 @@ cleanup:
- (persist &&
- virDomainSaveConfig(driver->configDir, vm->newDef) < 0))
- ret = -1;
-- if (qemuDomainObjEndJob(driver, vm) == 0) {
-+ }
-+
-+endjob:
-+ if (vm && (qemuDomainObjEndJob(driver, vm) == 0)) {
- /* Only possible if a transient vm quit while our locks were down,
- * in which case we don't want to save snapshot metadata. */
- *vmptr = NULL;
- ret = -1;
-- }
- }
-
- return ret;
-@@ -10286,20 +10332,28 @@ static int qemuDomainMonitorCommand(virDomainPtr domain, const char *cmd,
- goto cleanup;
- }
-
-+ if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
-+ goto cleanup;
-+
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
-+ _("domain is not running"));
-+ goto endjob;
-+ }
-+
- priv = vm->privateData;
-
- qemuDomainObjTaint(driver, vm, VIR_DOMAIN_TAINT_CUSTOM_MONITOR, -1);
-
- hmp = !!(flags & VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP);
-
-- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
-- goto cleanup;
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- ret = qemuMonitorArbitraryCommand(priv->mon, cmd, result, hmp);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-+
-+endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0) {
- vm = NULL;
-- goto cleanup;
- }
-
- cleanup:
-@@ -10536,10 +10590,19 @@ qemuDomainBlockJobImpl(virDomainPtr dom, const char *path,
-
- if (qemuDomainObjBeginJobWithDriver(driver, vm, QEMU_JOB_MODIFY) < 0)
- goto cleanup;
-+
-+ if (!virDomainObjIsActive(vm)) {
-+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
-+ _("domain is not running"));
-+ goto endjob;
-+ }
-+
- qemuDomainObjEnterMonitorWithDriver(driver, vm);
- priv = vm->privateData;
- ret = qemuMonitorBlockJob(priv->mon, device, bandwidth, info, mode);
- qemuDomainObjExitMonitorWithDriver(driver, vm);
-+
-+endjob:
- if (qemuDomainObjEndJob(driver, vm) == 0) {
- vm = NULL;
- goto cleanup;
diff --git a/libvirt-no-init-hal-start.patch b/libvirt-no-init-hal-start.patch
deleted file mode 100644
index 521ca9a..0000000
--- a/libvirt-no-init-hal-start.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-commit 2dcca3ec0a28c6562ebfbe7a5eae4729fb5de904
-Author: Peter Krempa
-Date: Fri Mar 2 15:12:32 2012 +0100
-
- daemon: Remove deprecated HAL from init script dependencies
-
- The init script for the daemon requests to start HAL although it has
- been deprecated long time ago. This patch removes the dependency.
-
-diff --git a/daemon/libvirtd.init.in b/daemon/libvirtd.init.in
-index 3c49b1f..f66ddad 100644
---- a/daemon/libvirtd.init.in
-+++ b/daemon/libvirtd.init.in
-@@ -8,7 +8,6 @@
- # Required-Start: $network messagebus
- # Should-Start: $named
- # Should-Start: xend
--# Should-Start: hal
- # Should-Start: avahi-daemon
- # Required-Stop: $network messagebus
- # Should-Stop: $named