summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGuido Günther <agx@sigxcpu.org>2014-09-30 19:28:00 +0200
committerGuido Günther <agx@sigxcpu.org>2014-09-30 19:28:00 +0200
commit8707039d5fcb05230d3ad5b21de4113ccf86cf1c (patch)
tree7cf3e7847d0ff1ecbfdcc1d10a77406159a9ee84 /src
parent063cc84dcfb5112e1e1ead25123fe13a6f0ac201 (diff)
New upstream version 1.2.9~rc2
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am8
-rw-r--r--src/Makefile.in29
-rw-r--r--src/access/viraccessdriverpolkit.c20
-rw-r--r--src/conf/cpu_conf.c10
-rw-r--r--src/conf/domain_event.c2
-rw-r--r--src/libvirt.c1
-rw-r--r--src/lxc/lxc_driver.c2
-rw-r--r--src/lxc/lxc_monitor_protocol.c15
-rw-r--r--src/lxc/lxc_monitor_protocol.h15
-rw-r--r--src/lxc/lxc_monitor_protocol.x19
-rw-r--r--src/parallels/parallels_driver.c16
-rw-r--r--src/parallels/parallels_sdk.c241
-rw-r--r--src/parallels/parallels_sdk.h30
-rw-r--r--src/parallels/parallels_utils.h4
-rw-r--r--src/qemu/qemu_capabilities.c2
-rw-r--r--src/qemu/qemu_cgroup.c9
-rw-r--r--src/qemu/qemu_domain.c2
-rw-r--r--src/qemu/qemu_driver.c70
-rw-r--r--src/qemu/qemu_process.c3
-rw-r--r--src/remote/remote_driver.c4
-rw-r--r--src/rpc/virnetserver.c8
-rw-r--r--src/uml/uml_driver.c2
-rw-r--r--src/vbox/vbox_common.c2
23 files changed, 467 insertions, 47 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index 7680bae7d..e65177f1b 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -788,7 +788,9 @@ PARALLELS_DRIVER_SOURCES = \
parallels/parallels_utils.c \
parallels/parallels_utils.h \
parallels/parallels_storage.c \
- parallels/parallels_network.c
+ parallels/parallels_network.c \
+ parallels/parallels_sdk.h \
+ parallels/parallels_sdk.c
BHYVE_DRIVER_SOURCES = \
bhyve/bhyve_capabilities.c \
@@ -1390,7 +1392,9 @@ if WITH_PARALLELS
noinst_LTLIBRARIES += libvirt_driver_parallels.la
libvirt_la_BUILT_LIBADD += libvirt_driver_parallels.la
libvirt_driver_parallels_la_CFLAGS = \
- -I$(top_srcdir)/src/conf $(AM_CFLAGS)
+ -I$(top_srcdir)/src/conf $(AM_CFLAGS) \
+ $(PARALLELS_SDK_CFLAGS)
+libvirt_driver_parallels_la_LIBADD = $(PARALLELS_SDK_LIBS)
libvirt_driver_parallels_la_SOURCES = $(PARALLELS_DRIVER_SOURCES)
endif WITH_PARALLELS
diff --git a/src/Makefile.in b/src/Makefile.in
index 6c592ea73..870dab42e 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1148,16 +1148,19 @@ libvirt_driver_openvz_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(libvirt_driver_openvz_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
@WITH_OPENVZ_TRUE@am_libvirt_driver_openvz_la_rpath =
-libvirt_driver_parallels_la_LIBADD =
+@WITH_PARALLELS_TRUE@libvirt_driver_parallels_la_DEPENDENCIES = \
+@WITH_PARALLELS_TRUE@ $(am__DEPENDENCIES_1)
am__libvirt_driver_parallels_la_SOURCES_DIST = \
parallels/parallels_driver.h parallels/parallels_driver.c \
parallels/parallels_utils.c parallels/parallels_utils.h \
- parallels/parallels_storage.c parallels/parallels_network.c
+ parallels/parallels_storage.c parallels/parallels_network.c \
+ parallels/parallels_sdk.h parallels/parallels_sdk.c
am__objects_48 = \
parallels/libvirt_driver_parallels_la-parallels_driver.lo \
parallels/libvirt_driver_parallels_la-parallels_utils.lo \
parallels/libvirt_driver_parallels_la-parallels_storage.lo \
- parallels/libvirt_driver_parallels_la-parallels_network.lo
+ parallels/libvirt_driver_parallels_la-parallels_network.lo \
+ parallels/libvirt_driver_parallels_la-parallels_sdk.lo
@WITH_PARALLELS_TRUE@am_libvirt_driver_parallels_la_OBJECTS = \
@WITH_PARALLELS_TRUE@ $(am__objects_48)
libvirt_driver_parallels_la_OBJECTS = \
@@ -3135,6 +3138,8 @@ PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
+PARALLELS_SDK_CFLAGS = @PARALLELS_SDK_CFLAGS@
+PARALLELS_SDK_LIBS = @PARALLELS_SDK_LIBS@
PARTED = @PARTED@
PATH_SEPARATOR = @PATH_SEPARATOR@
PCIACCESS_CFLAGS = @PCIACCESS_CFLAGS@
@@ -4214,7 +4219,9 @@ PARALLELS_DRIVER_SOURCES = \
parallels/parallels_utils.c \
parallels/parallels_utils.h \
parallels/parallels_storage.c \
- parallels/parallels_network.c
+ parallels/parallels_network.c \
+ parallels/parallels_sdk.h \
+ parallels/parallels_sdk.c
BHYVE_DRIVER_SOURCES = \
bhyve/bhyve_capabilities.c \
@@ -4658,8 +4665,10 @@ HYPERV_GENERATED_STAMP = .hyperv_wmi_generator.stamp
@WITH_HYPERV_TRUE@libvirt_driver_hyperv_la_LIBADD = $(OPENWSMAN_LIBS)
@WITH_HYPERV_TRUE@libvirt_driver_hyperv_la_SOURCES = $(HYPERV_DRIVER_SOURCES)
@WITH_PARALLELS_TRUE@libvirt_driver_parallels_la_CFLAGS = \
-@WITH_PARALLELS_TRUE@ -I$(top_srcdir)/src/conf $(AM_CFLAGS)
+@WITH_PARALLELS_TRUE@ -I$(top_srcdir)/src/conf $(AM_CFLAGS) \
+@WITH_PARALLELS_TRUE@ $(PARALLELS_SDK_CFLAGS)
+@WITH_PARALLELS_TRUE@libvirt_driver_parallels_la_LIBADD = $(PARALLELS_SDK_LIBS)
@WITH_PARALLELS_TRUE@libvirt_driver_parallels_la_SOURCES = $(PARALLELS_DRIVER_SOURCES)
@WITH_BHYVE_TRUE@libvirt_driver_bhyve_la_SOURCES =
@WITH_BHYVE_TRUE@libvirt_driver_bhyve_la_LIBADD = \
@@ -5799,6 +5808,8 @@ parallels/libvirt_driver_parallels_la-parallels_storage.lo: \
parallels/$(am__dirstamp) parallels/$(DEPDIR)/$(am__dirstamp)
parallels/libvirt_driver_parallels_la-parallels_network.lo: \
parallels/$(am__dirstamp) parallels/$(DEPDIR)/$(am__dirstamp)
+parallels/libvirt_driver_parallels_la-parallels_sdk.lo: \
+ parallels/$(am__dirstamp) parallels/$(DEPDIR)/$(am__dirstamp)
libvirt_driver_parallels.la: $(libvirt_driver_parallels_la_OBJECTS) $(libvirt_driver_parallels_la_DEPENDENCIES) $(EXTRA_libvirt_driver_parallels_la_DEPENDENCIES)
$(AM_V_CCLD)$(libvirt_driver_parallels_la_LINK) $(am_libvirt_driver_parallels_la_rpath) $(libvirt_driver_parallels_la_OBJECTS) $(libvirt_driver_parallels_la_LIBADD) $(LIBS)
@@ -6678,6 +6689,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@openvz/$(DEPDIR)/libvirt_driver_openvz_la-openvz_util.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_driver.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_network.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_sdk.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_storage.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_utils.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@phyp/$(DEPDIR)/libvirt_driver_phyp_la-phyp_driver.Plo@am__quote@
@@ -8160,6 +8172,13 @@ parallels/libvirt_driver_parallels_la-parallels_network.lo: parallels/parallels_
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libvirt_driver_parallels_la_CFLAGS) $(CFLAGS) -c -o parallels/libvirt_driver_parallels_la-parallels_network.lo `test -f 'parallels/parallels_network.c' || echo '$(srcdir)/'`parallels/parallels_network.c
+parallels/libvirt_driver_parallels_la-parallels_sdk.lo: parallels/parallels_sdk.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libvirt_driver_parallels_la_CFLAGS) $(CFLAGS) -MT parallels/libvirt_driver_parallels_la-parallels_sdk.lo -MD -MP -MF parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_sdk.Tpo -c -o parallels/libvirt_driver_parallels_la-parallels_sdk.lo `test -f 'parallels/parallels_sdk.c' || echo '$(srcdir)/'`parallels/parallels_sdk.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_sdk.Tpo parallels/$(DEPDIR)/libvirt_driver_parallels_la-parallels_sdk.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parallels/parallels_sdk.c' object='parallels/libvirt_driver_parallels_la-parallels_sdk.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libvirt_driver_parallels_la_CFLAGS) $(CFLAGS) -c -o parallels/libvirt_driver_parallels_la-parallels_sdk.lo `test -f 'parallels/parallels_sdk.c' || echo '$(srcdir)/'`parallels/parallels_sdk.c
+
phyp/libvirt_driver_phyp_la-phyp_driver.lo: phyp/phyp_driver.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libvirt_driver_phyp_la_CFLAGS) $(CFLAGS) -MT phyp/libvirt_driver_phyp_la-phyp_driver.lo -MD -MP -MF phyp/$(DEPDIR)/libvirt_driver_phyp_la-phyp_driver.Tpo -c -o phyp/libvirt_driver_phyp_la-phyp_driver.lo `test -f 'phyp/phyp_driver.c' || echo '$(srcdir)/'`phyp/phyp_driver.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) phyp/$(DEPDIR)/libvirt_driver_phyp_la-phyp_driver.Tpo phyp/$(DEPDIR)/libvirt_driver_phyp_la-phyp_driver.Plo
diff --git a/src/access/viraccessdriverpolkit.c b/src/access/viraccessdriverpolkit.c
index 2bc18429d..3136be7ea 100644
--- a/src/access/viraccessdriverpolkit.c
+++ b/src/access/viraccessdriverpolkit.c
@@ -87,24 +87,22 @@ virAccessDriverPolkitGetCaller(const char *actionid,
actionid);
return -1;
}
- if (virIdentityGetUNIXProcessID(identity, pid) < 0)
- goto cleanup;
- if (virIdentityGetUNIXProcessTime(identity, startTime) < 0)
- goto cleanup;
- if (virIdentityGetUNIXUserID(identity, uid) < 0)
- goto cleanup;
- if (!pid) {
+ if (virIdentityGetUNIXProcessID(identity, pid) < 0) {
virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
_("No UNIX process ID available"));
goto cleanup;
}
-
- if (virIdentityGetUNIXProcessTime(identity, startTime) < 0)
+ if (virIdentityGetUNIXProcessTime(identity, startTime) < 0) {
+ virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No UNIX process start time available"));
goto cleanup;
-
- if (virIdentityGetUNIXUserID(identity, uid) < 0)
+ }
+ if (virIdentityGetUNIXUserID(identity, uid) < 0) {
+ virAccessError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No UNIX caller UID available"));
goto cleanup;
+ }
ret = 0;
diff --git a/src/conf/cpu_conf.c b/src/conf/cpu_conf.c
index 116aa58e3..9b7fbb080 100644
--- a/src/conf/cpu_conf.c
+++ b/src/conf/cpu_conf.c
@@ -507,17 +507,19 @@ virCPUDefParseXML(xmlNodePtr node,
memAccessStr = virXMLPropString(nodes[i], "memAccess");
if (memAccessStr) {
- def->cells[cur_cell].memAccess =
- virMemAccessTypeFromString(memAccessStr);
+ int rc = virMemAccessTypeFromString(memAccessStr);
- if (def->cells[cur_cell].memAccess <= 0) {
+ if (rc <= 0) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Invalid 'memAccess' attribute "
"value '%s'"),
memAccessStr);
VIR_FREE(memAccessStr);
- goto cleanup;
+ goto error;
}
+
+ def->cells[cur_cell].memAccess = rc;
+
VIR_FREE(memAccessStr);
}
}
diff --git a/src/conf/domain_event.c b/src/conf/domain_event.c
index bf187cd36..3504b34ab 100644
--- a/src/conf/domain_event.c
+++ b/src/conf/domain_event.c
@@ -1798,7 +1798,7 @@ virDomainQemuMonitorEventStateRegisterID(virConnectPtr conn,
if (VIR_ALLOC(data) < 0)
return -1;
data->flags = flags;
- if (flags != -1) {
+ if (event && flags != -1) {
int rflags = REG_NOSUB;
if (flags & VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_NOCASE)
diff --git a/src/libvirt.c b/src/libvirt.c
index 388c040c6..245c373bc 100644
--- a/src/libvirt.c
+++ b/src/libvirt.c
@@ -21893,6 +21893,7 @@ virNodeAllocPages(virConnectPtr conn,
virResetLastError();
virCheckConnectReturn(conn, -1);
+ virCheckReadOnlyGoto(conn->flags, error);
virCheckNonZeroArgGoto(npages, error);
virCheckNonNullArgGoto(pageSizes, error);
virCheckNonNullArgGoto(pageCounts, error);
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 38763de1c..b3e506f9a 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -5797,7 +5797,7 @@ static virDriver lxcDriver = {
.domainReboot = lxcDomainReboot, /* 1.0.1 */
.domainLxcOpenNamespace = lxcDomainLxcOpenNamespace, /* 1.0.2 */
.nodeGetFreePages = lxcNodeGetFreePages, /* 1.2.6 */
- .nodeAllocPages = lxcNodeAllocPages, /* 1.2.8 */
+ .nodeAllocPages = lxcNodeAllocPages, /* 1.2.9 */
};
static virStateDriver lxcStateDriver = {
diff --git a/src/lxc/lxc_monitor_protocol.c b/src/lxc/lxc_monitor_protocol.c
index 69df5c860..594765ee7 100644
--- a/src/lxc/lxc_monitor_protocol.c
+++ b/src/lxc/lxc_monitor_protocol.c
@@ -5,6 +5,21 @@
*/
#include "lxc_monitor_protocol.h"
+#ifdef HAVE_XDR_U_INT64_T
+# define xdr_uint64_t xdr_u_int64_t
+#endif
+#ifndef IXDR_PUT_INT32
+# define IXDR_PUT_INT32 IXDR_PUT_LONG
+#endif
+#ifndef IXDR_GET_INT32
+# define IXDR_GET_INT32 IXDR_GET_LONG
+#endif
+#ifndef IXDR_PUT_U_INT32
+# define IXDR_PUT_U_INT32 IXDR_PUT_U_LONG
+#endif
+#ifndef IXDR_GET_U_INT32
+# define IXDR_GET_U_INT32 IXDR_GET_U_LONG
+#endif
bool_t
xdr_virLXCMonitorExitStatus (XDR *xdrs, virLXCMonitorExitStatus *objp)
diff --git a/src/lxc/lxc_monitor_protocol.h b/src/lxc/lxc_monitor_protocol.h
index dd7b3111e..000349c5e 100644
--- a/src/lxc/lxc_monitor_protocol.h
+++ b/src/lxc/lxc_monitor_protocol.h
@@ -13,6 +13,21 @@
extern "C" {
#endif
+#ifdef HAVE_XDR_U_INT64_T
+# define xdr_uint64_t xdr_u_int64_t
+#endif
+#ifndef IXDR_PUT_INT32
+# define IXDR_PUT_INT32 IXDR_PUT_LONG
+#endif
+#ifndef IXDR_GET_INT32
+# define IXDR_GET_INT32 IXDR_GET_LONG
+#endif
+#ifndef IXDR_PUT_U_INT32
+# define IXDR_PUT_U_INT32 IXDR_PUT_U_LONG
+#endif
+#ifndef IXDR_GET_U_INT32
+# define IXDR_GET_U_INT32 IXDR_GET_U_LONG
+#endif
enum virLXCMonitorExitStatus {
VIR_LXC_MONITOR_EXIT_STATUS_ERROR = 0,
diff --git a/src/lxc/lxc_monitor_protocol.x b/src/lxc/lxc_monitor_protocol.x
index 0926e26f6..3b66af5d8 100644
--- a/src/lxc/lxc_monitor_protocol.x
+++ b/src/lxc/lxc_monitor_protocol.x
@@ -4,6 +4,25 @@
* the libvirt_lxc helper program.
*/
+/* cygwin's xdr implementation defines xdr_u_int64_t instead of xdr_uint64_t
+ * and lacks IXDR_PUT_INT32 and IXDR_GET_INT32
+ */
+%#ifdef HAVE_XDR_U_INT64_T
+%# define xdr_uint64_t xdr_u_int64_t
+%#endif
+%#ifndef IXDR_PUT_INT32
+%# define IXDR_PUT_INT32 IXDR_PUT_LONG
+%#endif
+%#ifndef IXDR_GET_INT32
+%# define IXDR_GET_INT32 IXDR_GET_LONG
+%#endif
+%#ifndef IXDR_PUT_U_INT32
+%# define IXDR_PUT_U_INT32 IXDR_PUT_U_LONG
+%#endif
+%#ifndef IXDR_GET_U_INT32
+%# define IXDR_GET_U_INT32 IXDR_GET_U_LONG
+%#endif
+
enum virLXCMonitorExitStatus {
VIR_LXC_MONITOR_EXIT_STATUS_ERROR,
VIR_LXC_MONITOR_EXIT_STATUS_SHUTDOWN,
diff --git a/src/parallels/parallels_driver.c b/src/parallels/parallels_driver.c
index 13a7d95d7..516a296eb 100644
--- a/src/parallels/parallels_driver.c
+++ b/src/parallels/parallels_driver.c
@@ -55,6 +55,7 @@
#include "parallels_driver.h"
#include "parallels_utils.h"
+#include "parallels_sdk.h"
#define VIR_FROM_THIS VIR_FROM_PARALLELS
@@ -929,9 +930,17 @@ parallelsOpenDefault(virConnectPtr conn)
if (virMutexInit(&privconn->lock) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("cannot initialize mutex"));
- goto error;
+ goto err_free;
+ }
+
+ if (prlsdkInit(privconn)) {
+ VIR_DEBUG("%s", _("Can't initialize Parallels SDK"));
+ goto err_free;
}
+ if (prlsdkConnect(privconn) < 0)
+ goto err_free;
+
if (!(privconn->caps = parallelsBuildCapabilities()))
goto error;
@@ -953,6 +962,9 @@ parallelsOpenDefault(virConnectPtr conn)
virObjectUnref(privconn->domains);
virObjectUnref(privconn->caps);
virStoragePoolObjListFree(&privconn->pools);
+ prlsdkDisconnect(privconn);
+ prlsdkDeinit();
+ err_free:
VIR_FREE(privconn);
return VIR_DRV_OPEN_ERROR;
}
@@ -999,7 +1011,9 @@ parallelsConnectClose(virConnectPtr conn)
virObjectUnref(privconn->caps);
virObjectUnref(privconn->xmlopt);
virObjectUnref(privconn->domains);
+ prlsdkDisconnect(privconn);
conn->privateData = NULL;
+ prlsdkDeinit();
parallelsDriverUnlock(privconn);
virMutexDestroy(&privconn->lock);
diff --git a/src/parallels/parallels_sdk.c b/src/parallels/parallels_sdk.c
new file mode 100644
index 000000000..1c77d2769
--- /dev/null
+++ b/src/parallels/parallels_sdk.c
@@ -0,0 +1,241 @@
+/*
+ * parallels_sdk.c: core driver functions for managing
+ * Parallels Cloud Server hosts
+ *
+ * Copyright (C) 2014 Parallels, 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <config.h>
+
+#include "virerror.h"
+#include "viralloc.h"
+
+#include "parallels_sdk.h"
+
+#define VIR_FROM_THIS VIR_FROM_PARALLELS
+#define JOB_INFINIT_WAIT_TIMEOUT UINT_MAX
+
+PRL_UINT32 defaultJobTimeout = JOB_INFINIT_WAIT_TIMEOUT;
+
+/*
+ * Log error description
+ */
+static void
+logPrlErrorHelper(PRL_RESULT err, const char *filename,
+ const char *funcname, size_t linenr)
+{
+ char *msg1 = NULL, *msg2 = NULL;
+ PRL_UINT32 len = 0;
+
+ /* Get required buffer length */
+ PrlApi_GetResultDescription(err, PRL_TRUE, PRL_FALSE, NULL, &len);
+
+ if (VIR_ALLOC_N(msg1, len) < 0)
+ goto cleanup;
+
+ /* get short error description */
+ PrlApi_GetResultDescription(err, PRL_TRUE, PRL_FALSE, msg1, &len);
+
+ PrlApi_GetResultDescription(err, PRL_FALSE, PRL_FALSE, NULL, &len);
+
+ if (VIR_ALLOC_N(msg2, len) < 0)
+ goto cleanup;
+
+ /* get long error description */
+ PrlApi_GetResultDescription(err, PRL_FALSE, PRL_FALSE, msg2, &len);
+
+ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR,
+ filename, funcname, linenr,
+ _("%s %s"), msg1, msg2);
+
+ cleanup:
+ VIR_FREE(msg1);
+ VIR_FREE(msg2);
+}
+
+#define logPrlError(code) \
+ logPrlErrorHelper(code, __FILE__, \
+ __FUNCTION__, __LINE__)
+
+static PRL_RESULT
+logPrlEventErrorHelper(PRL_HANDLE event, const char *filename,
+ const char *funcname, size_t linenr)
+{
+ PRL_RESULT ret, retCode;
+ char *msg1 = NULL, *msg2 = NULL;
+ PRL_UINT32 len = 0;
+ int err = -1;
+
+ if ((ret = PrlEvent_GetErrCode(event, &retCode))) {
+ logPrlError(ret);
+ return ret;
+ }
+
+ PrlEvent_GetErrString(event, PRL_TRUE, PRL_FALSE, NULL, &len);
+
+ if (VIR_ALLOC_N(msg1, len) < 0)
+ goto cleanup;
+
+ PrlEvent_GetErrString(event, PRL_TRUE, PRL_FALSE, msg1, &len);
+
+ PrlEvent_GetErrString(event, PRL_FALSE, PRL_FALSE, NULL, &len);
+
+ if (VIR_ALLOC_N(msg2, len) < 0)
+ goto cleanup;
+
+ PrlEvent_GetErrString(event, PRL_FALSE, PRL_FALSE, msg2, &len);
+
+ virReportErrorHelper(VIR_FROM_THIS, VIR_ERR_INTERNAL_ERROR,
+ filename, funcname, linenr,
+ _("%s %s"), msg1, msg2);
+ err = 0;
+
+ cleanup:
+ VIR_FREE(msg1);
+ VIR_FREE(msg2);
+
+ return err;
+}
+
+#define logPrlEventError(event) \
+ logPrlEventErrorHelper(event, __FILE__, \
+ __FUNCTION__, __LINE__)
+
+static PRL_HANDLE
+getJobResultHelper(PRL_HANDLE job, unsigned int timeout,
+ const char *filename, const char *funcname,
+ size_t linenr)
+{
+ PRL_RESULT ret, retCode;
+ PRL_HANDLE result = NULL;
+
+ if ((ret = PrlJob_Wait(job, timeout))) {
+ logPrlErrorHelper(ret, filename, funcname, linenr);
+ goto cleanup;
+ }
+
+ if ((ret = PrlJob_GetRetCode(job, &retCode))) {
+ logPrlErrorHelper(ret, filename, funcname, linenr);
+ goto cleanup;
+ }
+
+ if (retCode) {
+ PRL_HANDLE err_handle;
+
+ /* Sometimes it's possible to get additional error info. */
+ if ((ret = PrlJob_GetError(job, &err_handle))) {
+ logPrlErrorHelper(ret, filename, funcname, linenr);
+ goto cleanup;
+ }
+
+ if (logPrlEventErrorHelper(err_handle, filename, funcname, linenr))
+ logPrlErrorHelper(retCode, filename, funcname, linenr);
+
+ PrlHandle_Free(err_handle);
+ } else {
+ ret = PrlJob_GetResult(job, &result);
+ if (PRL_FAILED(ret)) {
+ logPrlErrorHelper(ret, filename, funcname, linenr);
+ PrlHandle_Free(result);
+ result = NULL;
+ goto cleanup;
+ }
+ }
+
+ cleanup:
+ PrlHandle_Free(job);
+ return result;
+}
+
+#define getJobResult(job, timeout) \
+ getJobResultHelper(job, timeout, __FILE__, \
+ __FUNCTION__, __LINE__)
+
+static int
+waitJobHelper(PRL_HANDLE job, unsigned int timeout,
+ const char *filename, const char *funcname,
+ size_t linenr)
+{
+ PRL_HANDLE result = NULL;
+
+ result = getJobResultHelper(job, timeout, filename, funcname, linenr);
+ if (result)
+ PrlHandle_Free(result);
+
+ return result ? 0 : -1;
+}
+
+#define waitJob(job, timeout) \
+ waitJobHelper(job, timeout, __FILE__, \
+ __FUNCTION__, __LINE__)
+
+int
+prlsdkInit(parallelsConnPtr privconn)
+{
+ PRL_RESULT ret;
+
+ ret = PrlApi_InitEx(PARALLELS_API_VER, PAM_SERVER, 0, 0);
+ if (PRL_FAILED(ret)) {
+ logPrlError(ret);
+ return -1;
+ }
+
+ privconn->jobTimeout = JOB_INFINIT_WAIT_TIMEOUT;
+
+ return 0;
+};
+
+void
+prlsdkDeinit(void)
+{
+ PrlApi_Deinit();
+};
+
+int
+prlsdkConnect(parallelsConnPtr privconn)
+{
+ PRL_RESULT ret;
+ PRL_HANDLE job = PRL_INVALID_HANDLE;
+
+ ret = PrlSrv_Create(&privconn->server);
+ if (PRL_FAILED(ret)) {
+ logPrlError(ret);
+ return -1;
+ }
+
+ job = PrlSrv_LoginLocalEx(privconn->server, NULL, 0,
+ PSL_HIGH_SECURITY, PACF_NON_INTERACTIVE_MODE);
+
+ if (waitJob(job, privconn->jobTimeout)) {
+ PrlHandle_Free(privconn->server);
+ return -1;
+ }
+
+ return 0;
+}
+
+void
+prlsdkDisconnect(parallelsConnPtr privconn)
+{
+ PRL_HANDLE job;
+
+ job = PrlSrv_Logoff(privconn->server);
+ waitJob(job, privconn->jobTimeout);
+
+ PrlHandle_Free(privconn->server);
+}
diff --git a/src/parallels/parallels_sdk.h b/src/parallels/parallels_sdk.h
new file mode 100644
index 000000000..cefe67d14
--- /dev/null
+++ b/src/parallels/parallels_sdk.h
@@ -0,0 +1,30 @@
+/*
+ * parallels_sdk.h: core driver functions for managing
+ * Parallels Cloud Server hosts
+ *
+ * Copyright (C) 2014 Parallels, 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, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include <Parallels.h>
+
+#include "parallels_utils.h"
+
+int prlsdkInit(parallelsConnPtr privconn);
+void prlsdkDeinit(void);
+int prlsdkConnect(parallelsConnPtr privconn);
+void prlsdkDisconnect(parallelsConnPtr privconn);
diff --git a/src/parallels/parallels_utils.h b/src/parallels/parallels_utils.h
index 599e2c525..aef590ff1 100644
--- a/src/parallels/parallels_utils.h
+++ b/src/parallels/parallels_utils.h
@@ -23,6 +23,8 @@
#ifndef PARALLELS_UTILS_H
# define PARALLELS_UTILS_H
+# include <Parallels.h>
+
# include "driver.h"
# include "conf/domain_conf.h"
# include "conf/storage_conf.h"
@@ -40,6 +42,8 @@
struct _parallelsConn {
virMutex lock;
virDomainObjListPtr domains;
+ PRL_HANDLE server;
+ PRL_UINT32 jobTimeout;
virStoragePoolObjList pools;
virNetworkObjList networks;
virCapsPtr caps;
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 49f5f7502..a409aafaa 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -3306,6 +3306,8 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
virCommandAbort(cmd);
virCommandFree(cmd);
VIR_FREE(monarg);
+ if (monpath)
+ ignore_value(unlink(monpath));
VIR_FREE(monpath);
virObjectUnref(vm);
virObjectUnref(xmlopt);
diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c
index 300946a6f..bd22b7fbd 100644
--- a/src/qemu/qemu_cgroup.c
+++ b/src/qemu/qemu_cgroup.c
@@ -674,7 +674,8 @@ qemuSetupCpusetCgroup(virDomainObjPtr vm,
static int
-qemuSetupCpuCgroup(virDomainObjPtr vm)
+qemuSetupCpuCgroup(virQEMUDriverPtr driver,
+ virDomainObjPtr vm)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
virObjectEventPtr event = NULL;
@@ -703,7 +704,7 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
vm->def->cputune.shares = val;
if (virTypedParamsAddULLong(&eventParams, &eventNparams,
&eventMaxparams,
- VIR_DOMAIN_EVENT_CPUTUNE_CPU_SHARES,
+ VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
val) < 0)
return -1;
@@ -711,7 +712,7 @@ qemuSetupCpuCgroup(virDomainObjPtr vm)
}
if (event)
- qemuDomainEventQueue(vm->privateData, event);
+ qemuDomainEventQueue(driver, event);
}
return 0;
@@ -845,7 +846,7 @@ qemuSetupCgroup(virQEMUDriverPtr driver,
if (qemuSetupMemoryCgroup(vm) < 0)
goto cleanup;
- if (qemuSetupCpuCgroup(vm) < 0)
+ if (qemuSetupCpuCgroup(driver, vm) < 0)
goto cleanup;
if (qemuSetupCpusetCgroup(vm, nodemask, caps) < 0)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 11145d199..76fcccec9 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -2540,7 +2540,7 @@ qemuDomainCheckDiskPresence(virQEMUDriverPtr driver,
virFileExists(virDomainDiskGetSource(disk)))
continue;
- if (qemuDomainDetermineDiskChain(driver, vm, disk, false, true) >= 0)
+ if (qemuDomainDetermineDiskChain(driver, vm, disk, true, true) >= 0)
continue;
if (disk->startupPolicy &&
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 4afd06620..6606154eb 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4653,7 +4653,7 @@ qemuDomainPinVcpuFlags(virDomainPtr dom,
goto cleanup;
if (snprintf(paramField, VIR_TYPED_PARAM_FIELD_LENGTH,
- VIR_DOMAIN_EVENT_CPUTUNE_VCPUPIN, vcpu) < 0) {
+ VIR_DOMAIN_TUNABLE_CPU_VCPUPIN, vcpu) < 0) {
goto cleanup;
}
@@ -4940,7 +4940,7 @@ qemuDomainPinEmulator(virDomainPtr dom,
str = virBitmapFormat(pcpumap);
if (virTypedParamsAddString(&eventParams, &eventNparams,
&eventMaxparams,
- VIR_DOMAIN_EVENT_CPUTUNE_EMULATORIN,
+ VIR_DOMAIN_TUNABLE_CPU_EMULATORPIN,
str) < 0)
goto cleanup;
@@ -9318,7 +9318,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (virTypedParamsAddULLong(&eventParams, &eventNparams,
&eventMaxNparams,
- VIR_DOMAIN_EVENT_CPUTUNE_CPU_SHARES,
+ VIR_DOMAIN_TUNABLE_CPU_CPU_SHARES,
val) < 0)
goto cleanup;
}
@@ -9341,7 +9341,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (virTypedParamsAddULLong(&eventParams, &eventNparams,
&eventMaxNparams,
- VIR_DOMAIN_EVENT_CPUTUNE_VCPU_PERIOD,
+ VIR_DOMAIN_TUNABLE_CPU_VCPU_PERIOD,
value_ul) < 0)
goto cleanup;
}
@@ -9361,7 +9361,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (virTypedParamsAddLLong(&eventParams, &eventNparams,
&eventMaxNparams,
- VIR_DOMAIN_EVENT_CPUTUNE_VCPU_QUOTA,
+ VIR_DOMAIN_TUNABLE_CPU_VCPU_QUOTA,
value_l) < 0)
goto cleanup;
}
@@ -9382,7 +9382,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (virTypedParamsAddULLong(&eventParams, &eventNparams,
&eventMaxNparams,
- VIR_DOMAIN_EVENT_CPUTUNE_EMULATOR_PERIOD,
+ VIR_DOMAIN_TUNABLE_CPU_EMULATOR_PERIOD,
value_ul) < 0)
goto cleanup;
}
@@ -9403,7 +9403,7 @@ qemuDomainSetSchedulerParametersFlags(virDomainPtr dom,
if (virTypedParamsAddLLong(&eventParams, &eventNparams,
&eventMaxNparams,
- VIR_DOMAIN_EVENT_CPUTUNE_EMULATOR_QUOTA,
+ VIR_DOMAIN_TUNABLE_CPU_EMULATOR_QUOTA,
value_l) < 0)
goto cleanup;
}
@@ -16275,6 +16275,10 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
bool set_iops = false;
virQEMUDriverConfigPtr cfg = NULL;
virCapsPtr caps = NULL;
+ virObjectEventPtr event = NULL;
+ virTypedParameterPtr eventParams = NULL;
+ int eventNparams = 0;
+ int eventMaxparams = 0;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
VIR_DOMAIN_AFFECT_CONFIG, -1);
@@ -16316,6 +16320,10 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
&persistentDef) < 0)
goto endjob;
+ if (virTypedParamsAddString(&eventParams, &eventNparams, &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_DISK, disk) < 0)
+ goto endjob;
+
for (i = 0; i < nparams; i++) {
virTypedParameterPtr param = &params[i];
@@ -16329,26 +16337,56 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
if (STREQ(param->field, VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_BYTES_SEC)) {
info.total_bytes_sec = param->value.ul;
set_bytes = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_BYTES_SEC,
+ param->value.ul) < 0)
+ goto endjob;
} else if (STREQ(param->field,
VIR_DOMAIN_BLOCK_IOTUNE_READ_BYTES_SEC)) {
info.read_bytes_sec = param->value.ul;
set_bytes = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_READ_BYTES_SEC,
+ param->value.ul) < 0)
+ goto endjob;
} else if (STREQ(param->field,
VIR_DOMAIN_BLOCK_IOTUNE_WRITE_BYTES_SEC)) {
info.write_bytes_sec = param->value.ul;
set_bytes = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_BYTES_SEC,
+ param->value.ul) < 0)
+ goto endjob;
} else if (STREQ(param->field,
VIR_DOMAIN_BLOCK_IOTUNE_TOTAL_IOPS_SEC)) {
info.total_iops_sec = param->value.ul;
set_iops = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_TOTAL_IOPS_SEC,
+ param->value.ul) < 0)
+ goto endjob;
} else if (STREQ(param->field,
VIR_DOMAIN_BLOCK_IOTUNE_READ_IOPS_SEC)) {
info.read_iops_sec = param->value.ul;
set_iops = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_READ_IOPS_SEC,
+ param->value.ul) < 0)
+ goto endjob;
} else if (STREQ(param->field,
VIR_DOMAIN_BLOCK_IOTUNE_WRITE_IOPS_SEC)) {
info.write_iops_sec = param->value.ul;
set_iops = true;
+ if (virTypedParamsAddULLong(&eventParams, &eventNparams,
+ &eventMaxparams,
+ VIR_DOMAIN_TUNABLE_BLKDEV_WRITE_IOPS_SEC,
+ param->value.ul) < 0)
+ goto endjob;
}
}
@@ -16406,6 +16444,20 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
if (ret < 0)
goto endjob;
vm->def->disks[idx]->blkdeviotune = info;
+
+ ret = virDomainSaveStatus(driver->xmlopt, cfg->stateDir, vm);
+ if (ret < 0) {
+ virReportError(VIR_ERR_OPERATION_FAILED, "%s",
+ _("Saving live XML config failed"));
+ goto endjob;
+ }
+
+ if (eventNparams) {
+ event = virDomainEventTunableNewFromDom(dom, eventParams, eventNparams);
+ eventNparams = 0;
+ if (event)
+ qemuDomainEventQueue(driver, event);
+ }
}
if (flags & VIR_DOMAIN_AFFECT_CONFIG) {
@@ -16438,6 +16490,8 @@ qemuDomainSetBlockIoTune(virDomainPtr dom,
VIR_FREE(device);
if (vm)
virObjectUnlock(vm);
+ if (eventNparams)
+ virTypedParamsFree(eventParams, eventNparams);
virObjectUnref(caps);
virObjectUnref(cfg);
return ret;
@@ -18362,7 +18416,7 @@ static virDriver qemuDriver = {
.nodeGetFreePages = qemuNodeGetFreePages, /* 1.2.6 */
.connectGetDomainCapabilities = qemuConnectGetDomainCapabilities, /* 1.2.7 */
.connectGetAllDomainStats = qemuConnectGetAllDomainStats, /* 1.2.8 */
- .nodeAllocPages = qemuNodeAllocPages, /* 1.2.8 */
+ .nodeAllocPages = qemuNodeAllocPages, /* 1.2.9 */
};
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index dddca3583..1b8931ea2 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -3876,6 +3876,9 @@ qemuPrepareNVRAM(virQEMUDriverConfigPtr cfg,
goto cleanup;
generated = true;
+
+ if (virDomainSaveConfig(cfg->configDir, def) < 0)
+ goto cleanup;
}
if (!virFileExists(loader->nvram)) {
diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index dc2d2fb64..6c49e49c1 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -7622,9 +7622,7 @@ remoteNodeGetFreePages(virConnectPtr conn,
goto done;
}
- if (VIR_ALLOC_N(args.pages.pages_val, npages) < 0)
- goto done;
- memcpy(args.pages.pages_val, pages, npages * sizeof(*pages));
+ args.pages.pages_val = (u_int *) pages;
args.pages.pages_len = npages;
args.startCell = startCell;
args.cellCount = cellCount;
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index 7e3fc0a11..762c1855f 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -285,14 +285,14 @@ static int virNetServerAddClient(virNetServerPtr srv,
if (srv->nclients_unauth_max &&
srv->nclients_unauth == srv->nclients_unauth_max) {
/* Temporarily stop accepting new clients */
- VIR_DEBUG("Temporarily suspending services "
- "due to max_anonymous_clients");
+ VIR_INFO("Temporarily suspending services "
+ "due to max_anonymous_clients");
virNetServerUpdateServicesLocked(srv, false);
}
if (srv->nclients == srv->nclients_max) {
/* Temporarily stop accepting new clients */
- VIR_DEBUG("Temporarily suspending services due to max_clients");
+ VIR_INFO("Temporarily suspending services due to max_clients");
virNetServerUpdateServicesLocked(srv, false);
}
@@ -1080,7 +1080,7 @@ virNetServerCheckLimits(virNetServerPtr srv)
(!srv->nclients_unauth_max ||
srv->nclients_unauth < srv->nclients_unauth_max)) {
/* Now it makes sense to accept() a new client. */
- VIR_DEBUG("Re-enabling services");
+ VIR_INFO("Re-enabling services");
virNetServerUpdateServicesLocked(srv, true);
}
}
diff --git a/src/uml/uml_driver.c b/src/uml/uml_driver.c
index c255c07c1..2a401497b 100644
--- a/src/uml/uml_driver.c
+++ b/src/uml/uml_driver.c
@@ -2980,7 +2980,7 @@ static virDriver umlDriver = {
.nodeGetMemoryParameters = umlNodeGetMemoryParameters, /* 0.10.2 */
.nodeSetMemoryParameters = umlNodeSetMemoryParameters, /* 0.10.2 */
.nodeGetFreePages = umlNodeGetFreePages, /* 1.2.6 */
- .nodeAllocPages = umlNodeAllocPages, /* 1.2.8 */
+ .nodeAllocPages = umlNodeAllocPages, /* 1.2.9 */
};
static virStateDriver umlStateDriver = {
diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c
index e831255b0..7d75478ee 100644
--- a/src/vbox/vbox_common.c
+++ b/src/vbox/vbox_common.c
@@ -7551,7 +7551,7 @@ virDriver vboxCommonDriver = {
.domainSnapshotDelete = vboxDomainSnapshotDelete, /* 0.8.0 */
.connectIsAlive = vboxConnectIsAlive, /* 0.9.8 */
.nodeGetFreePages = vboxNodeGetFreePages, /* 1.2.6 */
- .nodeAllocPages = vboxNodeAllocPages, /* 1.2.8 */
+ .nodeAllocPages = vboxNodeAllocPages, /* 1.2.9 */
};
static void updateDriver(void)