forked from pool/libvirt
update to libvirt 0.9.6
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=162
This commit is contained in:
parent
7a29c1d3d8
commit
5a72ff014a
@ -1,50 +0,0 @@
|
|||||||
commit 0257ba8f9f4bf522a106aa2bbb4756e391a3dd42
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:27 2011 -0600
|
|
||||||
|
|
||||||
Use max bandwidth from qemuDomainObjPrivate struct when migrating
|
|
||||||
|
|
||||||
Adjust qemuMigrationRun() to use migMaxBandwidth in qemuDomainObjPrivate
|
|
||||||
structure when setting qemu migration speed. Caller-specified 'resource'
|
|
||||||
parameter overrides migMaxBandwidth.
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_migration.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_migration.c
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_migration.c
|
|
||||||
@@ -1284,6 +1284,7 @@ static int doNativeMigrate(struct qemud_
|
|
||||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
|
||||||
unsigned int background_flags = QEMU_MONITOR_MIGRATE_BACKGROUND;
|
|
||||||
qemuMigrationCookiePtr mig = NULL;
|
|
||||||
+ unsigned long migrate_speed = resource ? resource : priv->migMaxBandwidth;
|
|
||||||
VIR_DEBUG("driver=%p, vm=%p, uri=%s, cookiein=%s, cookieinlen=%d, "
|
|
||||||
"cookieout=%p, cookieoutlen=%p, flags=%x, dname=%s, resource=%lu",
|
|
||||||
driver, vm, uri, NULLSTR(cookiein), cookieinlen,
|
|
||||||
@@ -1334,8 +1335,7 @@ static int doNativeMigrate(struct qemud_
|
|
||||||
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- if (resource > 0 &&
|
|
||||||
- qemuMonitorSetMigrationSpeed(priv->mon, resource) < 0) {
|
|
||||||
+ if (qemuMonitorSetMigrationSpeed(priv->mon, migrate_speed) < 0) {
|
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
@@ -1506,6 +1506,7 @@ static int doTunnelMigrate(struct qemud_
|
|
||||||
int ret = -1;
|
|
||||||
qemuMigrationCookiePtr mig = NULL;
|
|
||||||
qemuMigrationIOThreadPtr iothread = NULL;
|
|
||||||
+ unsigned long migrate_speed = resource ? resource : priv->migMaxBandwidth;
|
|
||||||
VIR_DEBUG("driver=%p, vm=%p, st=%p, cookiein=%s, cookieinlen=%d, "
|
|
||||||
"cookieout=%p, cookieoutlen=%p, flags=%lx, resource=%lu",
|
|
||||||
driver, vm, st, NULLSTR(cookiein), cookieinlen,
|
|
||||||
@@ -1597,8 +1598,7 @@ static int doTunnelMigrate(struct qemud_
|
|
||||||
QEMU_ASYNC_JOB_MIGRATION_OUT) < 0)
|
|
||||||
goto cleanup;
|
|
||||||
|
|
||||||
- if (resource > 0 &&
|
|
||||||
- qemuMonitorSetMigrationSpeed(priv->mon, resource) < 0) {
|
|
||||||
+ if (qemuMonitorSetMigrationSpeed(priv->mon, migrate_speed) < 0) {
|
|
||||||
qemuDomainObjExitMonitorWithDriver(driver, vm);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
commit 1282bd80f752b1b11e031881b7b64dea214a2461
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:24 2011 -0600
|
|
||||||
|
|
||||||
virsh: Expose virDomainMigrateGetMaxSpeed API
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/tools/virsh.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/tools/virsh.c
|
|
||||||
+++ libvirt-0.9.4/tools/virsh.c
|
|
||||||
@@ -5200,6 +5200,45 @@ done:
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
+/*
|
|
||||||
+ * "migrate-getspeed" command
|
|
||||||
+ */
|
|
||||||
+static const vshCmdInfo info_migrate_getspeed[] = {
|
|
||||||
+ {"help", N_("Get the maximum migration bandwidth")},
|
|
||||||
+ {"desc", N_("Get the maximum migration bandwidth (in Mbps) for a domain.")},
|
|
||||||
+ {NULL, NULL}
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static const vshCmdOptDef opts_migrate_getspeed[] = {
|
|
||||||
+ {"domain", VSH_OT_DATA, VSH_OFLAG_REQ, N_("domain name, id or uuid")},
|
|
||||||
+ {NULL, 0, 0, NULL}
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+static bool
|
|
||||||
+cmdMigrateGetMaxSpeed(vshControl *ctl, const vshCmd *cmd)
|
|
||||||
+{
|
|
||||||
+ virDomainPtr dom = NULL;
|
|
||||||
+ unsigned long bandwidth;
|
|
||||||
+ bool ret = false;
|
|
||||||
+
|
|
||||||
+ if (!vshConnectionUsability(ctl, ctl->conn))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ if (!(dom = vshCommandOptDomain(ctl, cmd, NULL)))
|
|
||||||
+ return false;
|
|
||||||
+
|
|
||||||
+ if (virDomainMigrateGetMaxSpeed(dom, &bandwidth, 0) < 0)
|
|
||||||
+ goto done;
|
|
||||||
+
|
|
||||||
+ vshPrint(ctl, "%lu\n", bandwidth);
|
|
||||||
+
|
|
||||||
+ ret = true;
|
|
||||||
+
|
|
||||||
+done:
|
|
||||||
+ virDomainFree(dom);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
typedef enum {
|
|
||||||
VSH_CMD_BLOCK_JOB_ABORT = 0,
|
|
||||||
VSH_CMD_BLOCK_JOB_INFO = 1,
|
|
||||||
@@ -12519,6 +12558,8 @@ static const vshCmdDef domManagementCmds
|
|
||||||
opts_migrate_setmaxdowntime, info_migrate_setmaxdowntime, 0},
|
|
||||||
{"migrate-setspeed", cmdMigrateSetMaxSpeed,
|
|
||||||
opts_migrate_setspeed, info_migrate_setspeed, 0},
|
|
||||||
+ {"migrate-getspeed", cmdMigrateGetMaxSpeed,
|
|
||||||
+ opts_migrate_getspeed, info_migrate_getspeed, 0},
|
|
||||||
{"reboot", cmdReboot, opts_reboot, info_reboot, 0},
|
|
||||||
{"restore", cmdRestore, opts_restore, info_restore, 0},
|
|
||||||
{"resume", cmdResume, opts_resume, info_resume, 0},
|
|
||||||
Index: libvirt-0.9.4/tools/virsh.pod
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/tools/virsh.pod
|
|
||||||
+++ libvirt-0.9.4/tools/virsh.pod
|
|
||||||
@@ -619,6 +619,10 @@ to be down at the end of live migration.
|
|
||||||
Set the maximum migration bandwidth (in Mbps) for a domain which is being
|
|
||||||
migrated to another host.
|
|
||||||
|
|
||||||
+=item B<migrate-getspeed> I<domain-id>
|
|
||||||
+
|
|
||||||
+Get the maximum migration bandwidth (in Mbps) for a domain.
|
|
||||||
+
|
|
||||||
=item B<reboot> I<domain-id>
|
|
||||||
|
|
||||||
Reboot a domain. This acts just as if the domain had the B<reboot>
|
|
@ -1,47 +0,0 @@
|
|||||||
commit 32620dabb12df70e14a645c20797b7658cd89e02
|
|
||||||
Author: Jim Fehlig <jfehlig@suse.com>
|
|
||||||
Date: Thu Sep 1 16:22:38 2011 -0600
|
|
||||||
|
|
||||||
Don't overwrite errors from xend_{get,req}
|
|
||||||
|
|
||||||
xenDaemonDomainFetch() was overwriting errors reported by
|
|
||||||
xend_get() and xend_req(). E.g. without patch
|
|
||||||
|
|
||||||
error: failed Xen syscall xenDaemonDomainFetch failed to find this domain
|
|
||||||
|
|
||||||
with patch
|
|
||||||
|
|
||||||
error: internal error Xend returned HTTP Content-Length of 73817, which exceeds
|
|
||||||
maximum of 65536
|
|
||||||
|
|
||||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
|
||||||
index f44d674..957cd17 100644
|
|
||||||
--- a/src/xen/xend_internal.c
|
|
||||||
+++ b/src/xen/xend_internal.c
|
|
||||||
@@ -359,8 +359,10 @@ xend_get(virConnectPtr xend, const char *path,
|
|
||||||
ret = xend_req(s, content);
|
|
||||||
VIR_FORCE_CLOSE(s);
|
|
||||||
|
|
||||||
- if (((ret < 0) || (ret >= 300)) &&
|
|
||||||
- ((ret != 404) || (!STRPREFIX(path, "/xend/domain/")))) {
|
|
||||||
+ if (ret < 0)
|
|
||||||
+ return ret;
|
|
||||||
+
|
|
||||||
+ if ((ret >= 300) && ((ret != 404) || (!STRPREFIX(path, "/xend/domain/")))) {
|
|
||||||
virXendError(VIR_ERR_GET_FAILED,
|
|
||||||
_("%d status from xen daemon: %s:%s"),
|
|
||||||
ret, path, NULLSTR(*content));
|
|
||||||
@@ -1810,12 +1812,8 @@ xenDaemonDomainFetch(virConnectPtr conn,
|
|
||||||
root = sexpr_get(conn, "/xend/domain/%s?detail=1", name);
|
|
||||||
else
|
|
||||||
root = sexpr_get(conn, "/xend/domain/%d?detail=1", domid);
|
|
||||||
- if (root == NULL) {
|
|
||||||
- virXendError(VIR_ERR_XEN_CALL,
|
|
||||||
- "%s", _("xenDaemonDomainFetch failed to"
|
|
||||||
- " find this domain"));
|
|
||||||
+ if (root == NULL)
|
|
||||||
return (NULL);
|
|
||||||
- }
|
|
||||||
|
|
||||||
priv = (xenUnifiedPrivatePtr) conn->privateData;
|
|
||||||
|
|
@ -1,24 +0,0 @@
|
|||||||
commit 57c95175e271ca63b3f1be44efef8997f20ffe13
|
|
||||||
Author: Jim Fehlig <jfehlig@suse.com>
|
|
||||||
Date: Thu Sep 1 16:40:46 2011 -0600
|
|
||||||
|
|
||||||
Increase size of buffer for xend response
|
|
||||||
|
|
||||||
On systems with many pcpus, the sexpr returned by xend can be quite
|
|
||||||
large for dom0 when it is configured to have #vcpus = #pcpus (default).
|
|
||||||
E.g. on a 80 pcpu system, where dom0 had 80 vcpus, the sexpr details
|
|
||||||
for dom0 was 73817 bytes! Increase maximum buffer size to 256k.
|
|
||||||
|
|
||||||
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
|
|
||||||
index 957cd17..0a7fb48 100644
|
|
||||||
--- a/src/xen/xend_internal.c
|
|
||||||
+++ b/src/xen/xend_internal.c
|
|
||||||
@@ -56,7 +56,7 @@
|
|
||||||
* The number of Xen scheduler parameters
|
|
||||||
*/
|
|
||||||
|
|
||||||
-#define XEND_RCV_BUF_MAX_LEN 65536
|
|
||||||
+#define XEND_RCV_BUF_MAX_LEN (256 * 1024)
|
|
||||||
|
|
||||||
static int
|
|
||||||
virDomainXMLDevID(virDomainPtr domain,
|
|
@ -1,47 +0,0 @@
|
|||||||
commit 6f84e110d61e6e99ee80809f1d3c2c6dde352965
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:22 2011 -0600
|
|
||||||
|
|
||||||
Store max migration bandwidth in qemuDomainObjPrivate struct
|
|
||||||
|
|
||||||
The maximum bandwidth that can be consumed when migrating a domain
|
|
||||||
is better classified as an operational vs configuration parameter of
|
|
||||||
the dommain. As such, store this parameter in qemuDomainObjPrivate
|
|
||||||
structure.
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_domain.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_domain.c
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_domain.c
|
|
||||||
@@ -215,6 +215,8 @@ static void *qemuDomainObjPrivateAlloc(v
|
|
||||||
if (qemuDomainObjInitJob(priv) < 0)
|
|
||||||
VIR_FREE(priv);
|
|
||||||
|
|
||||||
+ priv->migMaxBandwidth = QEMU_DOMAIN_DEFAULT_MIG_BANDWIDTH_MAX;
|
|
||||||
+
|
|
||||||
return priv;
|
|
||||||
}
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_domain.h
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_domain.h
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_domain.h
|
|
||||||
@@ -36,6 +36,9 @@
|
|
||||||
(1 << VIR_DOMAIN_VIRT_KVM) | \
|
|
||||||
(1 << VIR_DOMAIN_VIRT_XEN))
|
|
||||||
|
|
||||||
+# define QEMU_DOMAIN_DEFAULT_MIG_BANDWIDTH_MAX (32 << 20)
|
|
||||||
+# define QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX (INT64_MAX / (1024 * 1024))
|
|
||||||
+
|
|
||||||
# define JOB_MASK(job) (1 << (job - 1))
|
|
||||||
# define DEFAULT_JOB_MASK \
|
|
||||||
(JOB_MASK(QEMU_JOB_QUERY) | \
|
|
||||||
@@ -113,6 +116,8 @@ struct _qemuDomainObjPrivate {
|
|
||||||
char *lockState;
|
|
||||||
|
|
||||||
bool fakeReboot;
|
|
||||||
+
|
|
||||||
+ unsigned long migMaxBandwidth;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct qemuDomainWatchdogEvent
|
|
@ -1,41 +0,0 @@
|
|||||||
commit 6ff9fc26d3672cd6e822a20a70d9d36ee3e0c173
|
|
||||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
|
||||||
Date: Wed Aug 31 16:53:09 2011 +0100
|
|
||||||
|
|
||||||
Stop libxl driver polluting logs on non-Xen hosts
|
|
||||||
|
|
||||||
If the libxl driver is compiled in, then everytime libvirtd
|
|
||||||
starts up on a non-Xen Dom0 host, it logs a error message.
|
|
||||||
Since this is an expected condition, we should not log at
|
|
||||||
'error' level, only 'info'.
|
|
||||||
|
|
||||||
* src/libxl/libxl_driver.c: Lower log level for certain
|
|
||||||
expected errors during driver init
|
|
||||||
|
|
||||||
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
|
|
||||||
index d6e0c28..91da438 100644
|
|
||||||
--- a/src/libxl/libxl_driver.c
|
|
||||||
+++ b/src/libxl/libxl_driver.c
|
|
||||||
@@ -963,19 +963,19 @@ libxlStartup(int privileged) {
|
|
||||||
libxl_driver->logger =
|
|
||||||
(xentoollog_logger *)xtl_createlogger_stdiostream(libxl_driver->logger_file, XTL_DEBUG, 0);
|
|
||||||
if (!libxl_driver->logger) {
|
|
||||||
- VIR_ERROR(_("cannot create logger for libxenlight"));
|
|
||||||
+ VIR_INFO("cannot create logger for libxenlight, disabling driver");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (libxl_ctx_init(&libxl_driver->ctx,
|
|
||||||
LIBXL_VERSION,
|
|
||||||
libxl_driver->logger)) {
|
|
||||||
- VIR_ERROR(_("cannot initialize libxenlight context"));
|
|
||||||
+ VIR_INFO("cannot initialize libxenlight context, probably not running in a Xen Dom0, disabling driver");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ver_info = libxl_get_version_info(&libxl_driver->ctx)) == NULL) {
|
|
||||||
- VIR_ERROR(_("cannot version information from libxenlight"));
|
|
||||||
+ VIR_INFO("cannot version information from libxenlight, disabling driver");
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
libxl_driver->version = (ver_info->xen_version_major * 1000000) +
|
|
@ -1,73 +0,0 @@
|
|||||||
commit 7e5f6a516c1b0066206364655be31276056da147
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 11:46:41 2011 -0600
|
|
||||||
|
|
||||||
Fix generator to cope with call-by-ref long types
|
|
||||||
|
|
||||||
From: Matthias Bolte <matthias.bolte@googlemail.com>
|
|
||||||
Tested-by: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
|
|
||||||
Matthias provided this patch to fix an issue I encountered in the
|
|
||||||
generator with APIs containing call-by-ref long type, e.g.
|
|
||||||
|
|
||||||
int virDomainMigrateGetMaxSpeed(virDomainPtr domain,
|
|
||||||
unsigned long *bandwidth,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
|
|
||||||
index 0d344e8..f671ff0 100755
|
|
||||||
--- a/src/rpc/gendispatch.pl
|
|
||||||
+++ b/src/rpc/gendispatch.pl
|
|
||||||
@@ -640,10 +640,11 @@ elsif ($opt_b) {
|
|
||||||
} elsif ($ret_member =~ m/^(?:unsigned )?hyper (\S+)<\S+>;/) {
|
|
||||||
# error out on unannotated arrays
|
|
||||||
die "hyper array without insert@<offset> annotation: $ret_member";
|
|
||||||
- } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);/) {
|
|
||||||
+ } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);(?:\s*\/\*\s*insert@(\d+)\s*\*\/)?/) {
|
|
||||||
my $type_name = $1;
|
|
||||||
my $ret_name = $2;
|
|
||||||
my $ret_assign;
|
|
||||||
+ my $insert = $3;
|
|
||||||
|
|
||||||
if (hyper_to_long($call->{ProcName}, "ret", $ret_name)) {
|
|
||||||
my $sign = ""; $sign = "U" if ($1);
|
|
||||||
@@ -657,7 +658,13 @@ elsif ($opt_b) {
|
|
||||||
|
|
||||||
push(@vars_list, "$type_name $ret_name");
|
|
||||||
push(@ret_list, $ret_assign);
|
|
||||||
- $single_ret_var = $ret_name;
|
|
||||||
+
|
|
||||||
+ if ($insert) {
|
|
||||||
+ splice(@args_list, int($insert), 0, "&$ret_name");
|
|
||||||
+ $single_ret_var = undef;
|
|
||||||
+ } else {
|
|
||||||
+ $single_ret_var = $ret_name;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if ($call->{ProcName} eq "DomainGetMaxMemory" or
|
|
||||||
$call->{ProcName} eq "NodeGetFreeMemory") {
|
|
||||||
@@ -1285,6 +1292,24 @@ elsif ($opt_k) {
|
|
||||||
|
|
||||||
$single_ret_var = "int rv = -1";
|
|
||||||
$single_ret_type = "int";
|
|
||||||
+ } elsif ($ret_member =~ m/^(unsigned )?hyper (\S+);\s*\/\*\s*insert@(\d+)\s*\*\//) {
|
|
||||||
+ my $type_name = $1;
|
|
||||||
+ my $sign = ""; $sign = "U" if ($1);
|
|
||||||
+ my $ret_name = $2;
|
|
||||||
+ my $insert = $3;
|
|
||||||
+
|
|
||||||
+ if (hyper_to_long($call->{ProcName}, "ret", $ret_name)) {
|
|
||||||
+ $type_name .= "long";
|
|
||||||
+ push(@ret_list, "if ($ret_name) HYPER_TO_${sign}LONG(*$ret_name, ret.$ret_name);");
|
|
||||||
+ } else {
|
|
||||||
+ $type_name .= "long long";
|
|
||||||
+ push(@ret_list, "if ($ret_name) *$ret_name = ret.$ret_name;");
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ splice(@args_list, int($insert), 0, ("$type_name *$ret_name"));
|
|
||||||
+ push(@ret_list, "rv = 0;");
|
|
||||||
+ $single_ret_var = "int rv = -1";
|
|
||||||
+ $single_ret_type = "int";
|
|
||||||
} elsif ($ret_member =~ m/^unsigned hyper (\S+);/) {
|
|
||||||
my $ret_name = $1;
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
commit 7f2498efe45505135ed75c6548c21a89674cb6ba
|
|
||||||
Author: Daniel Veillard <veillard@redhat.com>
|
|
||||||
Date: Tue Sep 13 18:24:13 2011 +0800
|
|
||||||
|
|
||||||
Do not log invalid operations in libvirtd logs
|
|
||||||
|
|
||||||
This is a bit painful for example when starting virt-manager
|
|
||||||
it tends to clutter libvirtd.log with invalid operation on cpu pinning
|
|
||||||
for defined but not running domains. A priori those kind of errors
|
|
||||||
don't indicate an error when executing the command but on a precondition
|
|
||||||
for running the API, and honnestly while the application should report
|
|
||||||
it, logging it as an error in libvirtd.log is not really useful,
|
|
||||||
|
|
||||||
Related bug: https://bugzilla.redhat.com/show_bug.cgi?id=590807
|
|
||||||
|
|
||||||
* daemon/libvirtd.c: extend daemonErrorLogFilter() to filter out
|
|
||||||
errors of type VIR_ERR_OPERATION_INVALID
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/daemon/libvirtd.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/daemon/libvirtd.c
|
|
||||||
+++ libvirt-0.9.4/daemon/libvirtd.c
|
|
||||||
@@ -392,6 +392,7 @@ static int daemonErrorLogFilter(virError
|
|
||||||
case VIR_ERR_NO_NWFILTER:
|
|
||||||
case VIR_ERR_NO_SECRET:
|
|
||||||
case VIR_ERR_NO_DOMAIN_SNAPSHOT:
|
|
||||||
+ case VIR_ERR_OPERATION_INVALID:
|
|
||||||
return VIR_LOG_DEBUG;
|
|
||||||
}
|
|
||||||
|
|
@ -1,59 +0,0 @@
|
|||||||
commit 829bce174c8a958dee4eb5b1fea63e0f5f914af8
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:23 2011 -0600
|
|
||||||
|
|
||||||
Impl virDomainMigrateGetMaxSpeed in qemu driver
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_driver.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_driver.c
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_driver.c
|
|
||||||
@@ -8329,6 +8329,40 @@ static int qemuDomainSnapshotSetCurrentI
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
+static int
|
|
||||||
+qemuDomainMigrateGetMaxSpeed(virDomainPtr dom,
|
|
||||||
+ unsigned long *bandwidth,
|
|
||||||
+ unsigned int flags)
|
|
||||||
+{
|
|
||||||
+ struct qemud_driver *driver = dom->conn->privateData;
|
|
||||||
+ virDomainObjPtr vm;
|
|
||||||
+ qemuDomainObjPrivatePtr priv;
|
|
||||||
+ int ret = -1;
|
|
||||||
+
|
|
||||||
+ virCheckFlags(0, -1);
|
|
||||||
+
|
|
||||||
+ qemuDriverLock(driver);
|
|
||||||
+ vm = virDomainFindByUUID(&driver->domains, dom->uuid);
|
|
||||||
+ qemuDriverUnlock(driver);
|
|
||||||
+
|
|
||||||
+ if (!vm) {
|
|
||||||
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
|
|
||||||
+ virUUIDFormat(dom->uuid, uuidstr);
|
|
||||||
+ qemuReportError(VIR_ERR_NO_DOMAIN,
|
|
||||||
+ _("no domain with matching uuid '%s'"), uuidstr);
|
|
||||||
+ goto cleanup;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ priv = vm->privateData;
|
|
||||||
+ *bandwidth = priv->migMaxBandwidth;
|
|
||||||
+ ret = 0;
|
|
||||||
+
|
|
||||||
+cleanup:
|
|
||||||
+ if (vm)
|
|
||||||
+ virDomainObjUnlock(vm);
|
|
||||||
+ return ret;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int qemuDomainSnapshotIsAllowed(virDomainObjPtr vm)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
@@ -9494,6 +9528,7 @@ static virDriver qemuDriver = {
|
|
||||||
.domainAbortJob = qemuDomainAbortJob, /* 0.7.7 */
|
|
||||||
.domainMigrateSetMaxDowntime = qemuDomainMigrateSetMaxDowntime, /* 0.8.0 */
|
|
||||||
.domainMigrateSetMaxSpeed = qemuDomainMigrateSetMaxSpeed, /* 0.9.0 */
|
|
||||||
+ .domainMigrateGetMaxSpeed = qemuDomainMigrateGetMaxSpeed, /* 0.9.5 */
|
|
||||||
.domainEventRegisterAny = qemuDomainEventRegisterAny, /* 0.8.0 */
|
|
||||||
.domainEventDeregisterAny = qemuDomainEventDeregisterAny, /* 0.8.0 */
|
|
||||||
.domainManagedSave = qemuDomainManagedSave, /* 0.8.0 */
|
|
@ -1,65 +0,0 @@
|
|||||||
commit 8fc40c511c08143cb64ff0d212942dde8e81c279
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:25 2011 -0600
|
|
||||||
|
|
||||||
Save migration speed in qemuDomainMigrateSetMaxSpeed
|
|
||||||
|
|
||||||
Now that migration speed is stored in qemuDomainObjPrivate structure,
|
|
||||||
save the new value when invoking qemuDomainMigrateSetMaxSpeed().
|
|
||||||
|
|
||||||
Allow setting migration speed on inactive domain too.
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_driver.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_driver.c
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_driver.c
|
|
||||||
@@ -8202,32 +8202,26 @@ qemuDomainMigrateSetMaxSpeed(virDomainPt
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
- 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;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
priv = vm->privateData;
|
|
||||||
-
|
|
||||||
- if (priv->job.asyncJob != QEMU_ASYNC_JOB_MIGRATION_OUT) {
|
|
||||||
- qemuReportError(VIR_ERR_OPERATION_INVALID,
|
|
||||||
- "%s", _("domain is not being migrated"));
|
|
||||||
- goto endjob;
|
|
||||||
+ if (virDomainObjIsActive(vm)) {
|
|
||||||
+ if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MIGRATION_OP) < 0)
|
|
||||||
+ goto cleanup;
|
|
||||||
+
|
|
||||||
+ VIR_DEBUG("Setting migration bandwidth to %luMbs", bandwidth);
|
|
||||||
+ qemuDomainObjEnterMonitor(driver, vm);
|
|
||||||
+ ret = qemuMonitorSetMigrationSpeed(priv->mon, bandwidth);
|
|
||||||
+ qemuDomainObjExitMonitor(driver, vm);
|
|
||||||
+
|
|
||||||
+ if (ret == 0)
|
|
||||||
+ priv->migMaxBandwidth = bandwidth;
|
|
||||||
+
|
|
||||||
+ if (qemuDomainObjEndJob(driver, vm) == 0)
|
|
||||||
+ vm = NULL;
|
|
||||||
+ } else {
|
|
||||||
+ priv->migMaxBandwidth = bandwidth;
|
|
||||||
+ ret = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
- VIR_DEBUG("Setting migration bandwidth to %luMbs", bandwidth);
|
|
||||||
- qemuDomainObjEnterMonitor(driver, vm);
|
|
||||||
- ret = qemuMonitorSetMigrationSpeed(priv->mon, bandwidth);
|
|
||||||
- qemuDomainObjExitMonitor(driver, vm);
|
|
||||||
-
|
|
||||||
-endjob:
|
|
||||||
- if (qemuDomainObjEndJob(driver, vm) == 0)
|
|
||||||
- vm = NULL;
|
|
||||||
-
|
|
||||||
cleanup:
|
|
||||||
if (vm)
|
|
||||||
virDomainObjUnlock(vm);
|
|
@ -1,46 +0,0 @@
|
|||||||
commit 9e093f0b4cc5a5fc455a4893d73dc0f2c5355161
|
|
||||||
Author: Osier Yang <jyang@redhat.com>
|
|
||||||
Date: Mon Aug 15 15:40:46 2011 +0800
|
|
||||||
|
|
||||||
daemon: Fix regression of libvirtd reloading support
|
|
||||||
|
|
||||||
This is introduced by commit df0b57a95a, which forgot to
|
|
||||||
add signal handler for SIGHUP.
|
|
||||||
|
|
||||||
A simple reproduce method:
|
|
||||||
|
|
||||||
1) Create a domain XML under /etc/libvirt/qemu
|
|
||||||
2) % kill -SIGHUP $(pidof libvirtd)
|
|
||||||
3) % virsh list --all (the new created domain XML is not listed)
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/daemon/libvirtd.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/daemon/libvirtd.c
|
|
||||||
+++ libvirt-0.9.4/daemon/libvirtd.c
|
|
||||||
@@ -1139,6 +1139,17 @@ static void daemonShutdownHandler(virNet
|
|
||||||
virNetServerQuit(srv);
|
|
||||||
}
|
|
||||||
|
|
||||||
+static void daemonReloadHandler(virNetServerPtr srv ATTRIBUTE_UNUSED,
|
|
||||||
+ siginfo_t *sig ATTRIBUTE_UNUSED,
|
|
||||||
+ void *opaque ATTRIBUTE_UNUSED)
|
|
||||||
+{
|
|
||||||
+ VIR_INFO("Reloading configuration on SIGHUP");
|
|
||||||
+ virHookCall(VIR_HOOK_DRIVER_DAEMON, "-",
|
|
||||||
+ VIR_HOOK_DAEMON_OP_RELOAD, SIGHUP, "SIGHUP", NULL);
|
|
||||||
+ if (virStateReload() < 0)
|
|
||||||
+ VIR_WARN("Error while reloading drivers");
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int daemonSetupSignals(virNetServerPtr srv)
|
|
||||||
{
|
|
||||||
if (virNetServerAddSignalHandler(srv, SIGINT, daemonShutdownHandler, NULL) < 0)
|
|
||||||
@@ -1147,6 +1158,8 @@ static int daemonSetupSignals(virNetServ
|
|
||||||
return -1;
|
|
||||||
if (virNetServerAddSignalHandler(srv, SIGTERM, daemonShutdownHandler, NULL) < 0)
|
|
||||||
return -1;
|
|
||||||
+ if (virNetServerAddSignalHandler(srv, SIGHUP, daemonReloadHandler, NULL) < 0)
|
|
||||||
+ return -1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -1,292 +0,0 @@
|
|||||||
commit b12354befee9f8e88d3d5d96390856af8f05eb2f
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:21 2011 -0600
|
|
||||||
|
|
||||||
Add public API for getting migration speed
|
|
||||||
|
|
||||||
Includes impl of python binding since the generator was not
|
|
||||||
able to cope.
|
|
||||||
|
|
||||||
Note: Requires gendispatch.pl patch from Matthias Bolte
|
|
||||||
|
|
||||||
https://www.redhat.com/archives/libvir-list/2011-August/msg01367.html
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/docs/apibuild.py
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/docs/apibuild.py
|
|
||||||
+++ libvirt-0.9.4/docs/apibuild.py
|
|
||||||
@@ -1643,7 +1643,8 @@ class CParser:
|
|
||||||
"virDomainSetMemory" : (False, ("memory")),
|
|
||||||
"virDomainSetMemoryFlags" : (False, ("memory")),
|
|
||||||
"virDomainBlockJobSetSpeed" : (False, ("bandwidth")),
|
|
||||||
- "virDomainBlockPull" : (False, ("bandwidth")) }
|
|
||||||
+ "virDomainBlockPull" : (False, ("bandwidth")),
|
|
||||||
+ "virDomainMigrateGetMaxSpeed" : (False, ("bandwidth")) }
|
|
||||||
|
|
||||||
def checkLongLegacyFunction(self, name, return_type, signature):
|
|
||||||
if "long" in return_type and "long long" not in return_type:
|
|
||||||
Index: libvirt-0.9.4/include/libvirt/libvirt.h.in
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/include/libvirt/libvirt.h.in
|
|
||||||
+++ libvirt-0.9.4/include/libvirt/libvirt.h.in
|
|
||||||
@@ -711,6 +711,10 @@ int virDomainMigrateSetMaxSpeed(virDomai
|
|
||||||
unsigned long bandwidth,
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
+int virDomainMigrateGetMaxSpeed(virDomainPtr domain,
|
|
||||||
+ unsigned long *bandwidth,
|
|
||||||
+ unsigned int flags);
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* VIR_NODEINFO_MAXCPUS:
|
|
||||||
* @nodeinfo: virNodeInfo instance
|
|
||||||
Index: libvirt-0.9.4/python/generator.py
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/python/generator.py
|
|
||||||
+++ libvirt-0.9.4/python/generator.py
|
|
||||||
@@ -372,6 +372,7 @@ skip_impl = (
|
|
||||||
'virNodeGetCPUStats',
|
|
||||||
'virNodeGetMemoryStats',
|
|
||||||
'virDomainGetBlockJobInfo',
|
|
||||||
+ 'virDomainMigrateGetMaxSpeed',
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/python/libvirt-override-api.xml
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/python/libvirt-override-api.xml
|
|
||||||
+++ libvirt-0.9.4/python/libvirt-override-api.xml
|
|
||||||
@@ -356,5 +356,11 @@
|
|
||||||
<arg name='flags' type='unsigned int' info='fine-tuning flags, currently unused, pass 0.'/>
|
|
||||||
<return type='virDomainBlockJobInfo' info='A dictionary containing job information.' />
|
|
||||||
</function>
|
|
||||||
+ <function name='virDomainMigrateGetMaxSpeed' file='python'>
|
|
||||||
+ <info>Get currently configured maximum migration speed for a domain</info>
|
|
||||||
+ <arg name='domain' type='virDomainPtr' info='a domain object'/>
|
|
||||||
+ <arg name='flags' type='unsigned int' info='flags, currently unused, pass 0.'/>
|
|
||||||
+ <return type='unsigned long' info='current max migration speed, or None in case of error'/>
|
|
||||||
+ </function>
|
|
||||||
</symbols>
|
|
||||||
</api>
|
|
||||||
Index: libvirt-0.9.4/python/libvirt-override.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/python/libvirt-override.c
|
|
||||||
+++ libvirt-0.9.4/python/libvirt-override.c
|
|
||||||
@@ -4543,6 +4543,29 @@ libvirt_virDomainSendKey(PyObject *self
|
|
||||||
return py_retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static PyObject *
|
|
||||||
+libvirt_virDomainMigrateGetMaxSpeed(PyObject *self ATTRIBUTE_UNUSED, PyObject *args) {
|
|
||||||
+ PyObject *py_retval;
|
|
||||||
+ int c_retval;
|
|
||||||
+ unsigned long bandwidth;
|
|
||||||
+ virDomainPtr domain;
|
|
||||||
+ PyObject *pyobj_domain;
|
|
||||||
+
|
|
||||||
+ if (!PyArg_ParseTuple(args, (char *)"O:virDomainMigrateGetMaxSpeed", &pyobj_domain))
|
|
||||||
+ return(NULL);
|
|
||||||
+
|
|
||||||
+ domain = (virDomainPtr) PyvirDomain_Get(pyobj_domain);
|
|
||||||
+
|
|
||||||
+ LIBVIRT_BEGIN_ALLOW_THREADS;
|
|
||||||
+ c_retval = virDomainMigrateGetMaxSpeed(domain, &bandwidth, 0);
|
|
||||||
+ LIBVIRT_END_ALLOW_THREADS;
|
|
||||||
+
|
|
||||||
+ if (c_retval < 0)
|
|
||||||
+ return VIR_PY_INT_FAIL;
|
|
||||||
+ py_retval = libvirt_ulongWrap(bandwidth);
|
|
||||||
+ return(py_retval);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
/************************************************************************
|
|
||||||
* *
|
|
||||||
* The registration stuff *
|
|
||||||
@@ -4632,6 +4655,7 @@ static PyMethodDef libvirtMethods[] = {
|
|
||||||
{(char *) "virDomainRevertToSnapshot", libvirt_virDomainRevertToSnapshot, METH_VARARGS, NULL},
|
|
||||||
{(char *) "virDomainGetBlockJobInfo", libvirt_virDomainGetBlockJobInfo, METH_VARARGS, NULL},
|
|
||||||
{(char *) "virDomainSendKey", libvirt_virDomainSendKey, METH_VARARGS, NULL},
|
|
||||||
+ {(char *) "virDomainMigrateGetMaxSpeed", libvirt_virDomainMigrateGetMaxSpeed, METH_VARARGS, NULL},
|
|
||||||
{NULL, NULL, 0, NULL}
|
|
||||||
};
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/driver.h
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/driver.h
|
|
||||||
+++ libvirt-0.9.4/src/driver.h
|
|
||||||
@@ -531,6 +531,11 @@ typedef int
|
|
||||||
unsigned int flags);
|
|
||||||
|
|
||||||
typedef int
|
|
||||||
+ (*virDrvDomainMigrateGetMaxSpeed)(virDomainPtr domain,
|
|
||||||
+ unsigned long *bandwidth,
|
|
||||||
+ unsigned int flags);
|
|
||||||
+
|
|
||||||
+typedef int
|
|
||||||
(*virDrvDomainEventRegisterAny)(virConnectPtr conn,
|
|
||||||
virDomainPtr dom,
|
|
||||||
int eventID,
|
|
||||||
@@ -827,6 +832,7 @@ struct _virDriver {
|
|
||||||
virDrvDomainGetJobInfo domainGetJobInfo;
|
|
||||||
virDrvDomainAbortJob domainAbortJob;
|
|
||||||
virDrvDomainMigrateSetMaxDowntime domainMigrateSetMaxDowntime;
|
|
||||||
+ virDrvDomainMigrateGetMaxSpeed domainMigrateGetMaxSpeed;
|
|
||||||
virDrvDomainMigrateSetMaxSpeed domainMigrateSetMaxSpeed;
|
|
||||||
virDrvDomainEventRegisterAny domainEventRegisterAny;
|
|
||||||
virDrvDomainEventDeregisterAny domainEventDeregisterAny;
|
|
||||||
Index: libvirt-0.9.4/src/libvirt.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/libvirt.c
|
|
||||||
+++ libvirt-0.9.4/src/libvirt.c
|
|
||||||
@@ -15157,6 +15157,57 @@ error:
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
+ * virDomainMigrateGetMaxSpeed:
|
|
||||||
+ * @domain: a domain object
|
|
||||||
+ * @bandwidth: return value of current migration bandwidth limit in Mbps
|
|
||||||
+ * @flags: fine-tuning flags, currently unused, use 0
|
|
||||||
+ *
|
|
||||||
+ * Get the current maximum bandwidth (in Mbps) that will be used if the
|
|
||||||
+ * domain is migrated. Not all hypervisors will support a bandwidth limit.
|
|
||||||
+ *
|
|
||||||
+ * Returns 0 in case of success, -1 otherwise.
|
|
||||||
+ */
|
|
||||||
+int
|
|
||||||
+virDomainMigrateGetMaxSpeed(virDomainPtr domain,
|
|
||||||
+ unsigned long *bandwidth,
|
|
||||||
+ unsigned int flags)
|
|
||||||
+{
|
|
||||||
+ virConnectPtr conn;
|
|
||||||
+
|
|
||||||
+ VIR_DOMAIN_DEBUG(domain, "bandwidth = %p, flags=%x", bandwidth, flags);
|
|
||||||
+
|
|
||||||
+ virResetLastError();
|
|
||||||
+
|
|
||||||
+ if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
|
||||||
+ virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
|
||||||
+ virDispatchError(NULL);
|
|
||||||
+ return -1;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (!bandwidth) {
|
|
||||||
+ virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
|
|
||||||
+ goto error;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ conn = domain->conn;
|
|
||||||
+ if (conn->flags & VIR_CONNECT_RO) {
|
|
||||||
+ virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
|
||||||
+ goto error;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (conn->driver->domainMigrateGetMaxSpeed) {
|
|
||||||
+ if (conn->driver->domainMigrateGetMaxSpeed(domain, bandwidth, flags) < 0)
|
|
||||||
+ goto error;
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
|
||||||
+error:
|
|
||||||
+ virDispatchError(conn);
|
|
||||||
+ return -1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+/**
|
|
||||||
* virConnectDomainEventRegisterAny:
|
|
||||||
* @conn: pointer to the connection
|
|
||||||
* @dom: pointer to the domain
|
|
||||||
Index: libvirt-0.9.4/src/libvirt_public.syms
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/libvirt_public.syms
|
|
||||||
+++ libvirt-0.9.4/src/libvirt_public.syms
|
|
||||||
@@ -480,4 +480,9 @@ LIBVIRT_0.9.4 {
|
|
||||||
virDomainBlockPull;
|
|
||||||
} LIBVIRT_0.9.3;
|
|
||||||
|
|
||||||
+LIBVIRT_0.9.5 {
|
|
||||||
+ global:
|
|
||||||
+ virDomainMigrateGetMaxSpeed;
|
|
||||||
+} LIBVIRT_0.9.4;
|
|
||||||
+
|
|
||||||
# .... define new API here using predicted next version number ....
|
|
||||||
Index: libvirt-0.9.4/src/remote/remote_driver.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/remote/remote_driver.c
|
|
||||||
+++ libvirt-0.9.4/src/remote/remote_driver.c
|
|
||||||
@@ -4327,6 +4327,7 @@ static virDriver remote_driver = {
|
|
||||||
.domainAbortJob = remoteDomainAbortJob, /* 0.7.7 */
|
|
||||||
.domainMigrateSetMaxDowntime = remoteDomainMigrateSetMaxDowntime, /* 0.8.0 */
|
|
||||||
.domainMigrateSetMaxSpeed = remoteDomainMigrateSetMaxSpeed, /* 0.9.0 */
|
|
||||||
+ .domainMigrateGetMaxSpeed = remoteDomainMigrateGetMaxSpeed, /* 0.9.5 */
|
|
||||||
.domainEventRegisterAny = remoteDomainEventRegisterAny, /* 0.8.0 */
|
|
||||||
.domainEventDeregisterAny = remoteDomainEventDeregisterAny, /* 0.8.0 */
|
|
||||||
.domainManagedSave = remoteDomainManagedSave, /* 0.8.0 */
|
|
||||||
Index: libvirt-0.9.4/src/remote/remote_protocol.x
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/remote/remote_protocol.x
|
|
||||||
+++ libvirt-0.9.4/src/remote/remote_protocol.x
|
|
||||||
@@ -1913,6 +1913,16 @@ struct remote_domain_migrate_set_max_spe
|
|
||||||
unsigned int flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
+struct remote_domain_migrate_get_max_speed_args {
|
|
||||||
+ remote_nonnull_domain dom;
|
|
||||||
+ unsigned int flags;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+struct remote_domain_migrate_get_max_speed_ret {
|
|
||||||
+ unsigned hyper bandwidth; /* insert@1 */
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
+
|
|
||||||
struct remote_domain_events_register_any_args {
|
|
||||||
int eventID;
|
|
||||||
};
|
|
||||||
@@ -2475,7 +2485,8 @@ enum remote_procedure {
|
|
||||||
REMOTE_PROC_DOMAIN_BLOCK_JOB_SET_SPEED = 239, /* autogen autogen */
|
|
||||||
REMOTE_PROC_DOMAIN_BLOCK_PULL = 240, /* autogen autogen */
|
|
||||||
|
|
||||||
- REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB = 241 /* skipgen skipgen */
|
|
||||||
+ REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB = 241, /* skipgen skipgen */
|
|
||||||
+ REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_SPEED = 242 /* autogen autogen */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Notice how the entries are grouped in sets of 10 ?
|
|
||||||
Index: libvirt-0.9.4/src/remote_protocol-structs
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/remote_protocol-structs
|
|
||||||
+++ libvirt-0.9.4/src/remote_protocol-structs
|
|
||||||
@@ -1429,6 +1429,14 @@ struct remote_domain_migrate_set_max_spe
|
|
||||||
uint64_t bandwidth;
|
|
||||||
u_int flags;
|
|
||||||
};
|
|
||||||
+struct remote_domain_migrate_get_max_speed_args {
|
|
||||||
+ remote_nonnull_domain dom;
|
|
||||||
+ u_int flags;
|
|
||||||
+};
|
|
||||||
+struct remote_domain_migrate_get_max_speed_ret {
|
|
||||||
+ uint64_t bandwidth;
|
|
||||||
+};
|
|
||||||
+
|
|
||||||
struct remote_domain_events_register_any_args {
|
|
||||||
int eventID;
|
|
||||||
};
|
|
||||||
@@ -1936,4 +1944,5 @@ enum remote_procedure {
|
|
||||||
REMOTE_PROC_DOMAIN_BLOCK_JOB_SET_SPEED = 239,
|
|
||||||
REMOTE_PROC_DOMAIN_BLOCK_PULL = 240,
|
|
||||||
REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB = 241,
|
|
||||||
+ REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_SPEED = 242,
|
|
||||||
};
|
|
||||||
Index: libvirt-0.9.4/src/rpc/gendispatch.pl
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/rpc/gendispatch.pl
|
|
||||||
+++ libvirt-0.9.4/src/rpc/gendispatch.pl
|
|
||||||
@@ -222,6 +222,7 @@ my $long_legacy = {
|
|
||||||
NodeGetInfo => { ret => { memory => 1 } },
|
|
||||||
DomainBlockPull => { arg => { bandwidth => 1 } },
|
|
||||||
DomainBlockJobSetSpeed => { arg => { bandwidth => 1 } },
|
|
||||||
+ DomainMigrateGetMaxSpeed => { ret => { bandwidth => 1 } },
|
|
||||||
};
|
|
||||||
|
|
||||||
sub hyper_to_long
|
|
@ -2,7 +2,7 @@ Index: src/lxc/lxc_container.c
|
|||||||
===================================================================
|
===================================================================
|
||||||
--- src/lxc/lxc_container.c.orig
|
--- src/lxc/lxc_container.c.orig
|
||||||
+++ src/lxc/lxc_container.c
|
+++ src/lxc/lxc_container.c
|
||||||
@@ -991,6 +991,9 @@ int lxcContainerStart(virDomainDefPtr de
|
@@ -1183,6 +1183,9 @@ int lxcContainerStart(virDomainDefPtr de
|
||||||
handshakefd};
|
handshakefd};
|
||||||
|
|
||||||
/* allocate a stack for the container */
|
/* allocate a stack for the container */
|
||||||
@ -12,7 +12,7 @@ Index: src/lxc/lxc_container.c
|
|||||||
if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
return -1;
|
return -1;
|
||||||
@@ -1009,7 +1012,11 @@ int lxcContainerStart(virDomainDefPtr de
|
@@ -1201,7 +1204,11 @@ int lxcContainerStart(virDomainDefPtr de
|
||||||
cflags |= CLONE_NEWNET;
|
cflags |= CLONE_NEWNET;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,7 +24,7 @@ Index: src/lxc/lxc_container.c
|
|||||||
VIR_FREE(stack);
|
VIR_FREE(stack);
|
||||||
VIR_DEBUG("clone() completed, new container PID is %d", pid);
|
VIR_DEBUG("clone() completed, new container PID is %d", pid);
|
||||||
|
|
||||||
@@ -1036,6 +1043,7 @@ int lxcContainerAvailable(int features)
|
@@ -1228,6 +1235,7 @@ int lxcContainerAvailable(int features)
|
||||||
char *childStack;
|
char *childStack;
|
||||||
char *stack;
|
char *stack;
|
||||||
int childStatus;
|
int childStatus;
|
||||||
@ -32,7 +32,7 @@ Index: src/lxc/lxc_container.c
|
|||||||
|
|
||||||
if (features & LXC_CONTAINER_FEATURE_USER)
|
if (features & LXC_CONTAINER_FEATURE_USER)
|
||||||
flags |= CLONE_NEWUSER;
|
flags |= CLONE_NEWUSER;
|
||||||
@@ -1043,14 +1051,21 @@ int lxcContainerAvailable(int features)
|
@@ -1235,14 +1243,21 @@ int lxcContainerAvailable(int features)
|
||||||
if (features & LXC_CONTAINER_FEATURE_NET)
|
if (features & LXC_CONTAINER_FEATURE_NET)
|
||||||
flags |= CLONE_NEWNET;
|
flags |= CLONE_NEWNET;
|
||||||
|
|
||||||
|
@ -1,55 +0,0 @@
|
|||||||
commit ef1065cf5acad13767c054758cbe7f4e8af5d241
|
|
||||||
Author: Jim Fehlig <jfehlig@novell.com>
|
|
||||||
Date: Fri Aug 26 12:10:26 2011 -0600
|
|
||||||
|
|
||||||
Set qemu migration speed unlimited when migrating to file
|
|
||||||
|
|
||||||
The qemu migration speed default is 32MiB/s as defined in migration.c
|
|
||||||
|
|
||||||
/* Migration speed throttling */
|
|
||||||
static int64_t max_throttle = (32 << 20);
|
|
||||||
|
|
||||||
There's no need to throttle migration when targeting a file, so set migration
|
|
||||||
speed to unlimited prior to migration, and restore to libvirt default value
|
|
||||||
after migration.
|
|
||||||
|
|
||||||
Default units is MB for migrate_set_speed monitor command, so
|
|
||||||
(INT64_MAX / (1024 * 1024)) is used for unlimited migration speed.
|
|
||||||
|
|
||||||
Tested with both json and text monitors.
|
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/qemu/qemu_migration.c
|
|
||||||
===================================================================
|
|
||||||
--- libvirt-0.9.4.orig/src/qemu/qemu_migration.c
|
|
||||||
+++ libvirt-0.9.4/src/qemu/qemu_migration.c
|
|
||||||
@@ -2675,6 +2675,16 @@ qemuMigrationToFile(struct qemud_driver
|
|
||||||
bool restoreLabel = false;
|
|
||||||
virCommandPtr cmd = NULL;
|
|
||||||
int pipeFD[2] = { -1, -1 };
|
|
||||||
+ unsigned long saveMigBandwidth = priv->migMaxBandwidth;
|
|
||||||
+
|
|
||||||
+ /* Increase migration bandwidth to unlimited since target is a file.
|
|
||||||
+ * Failure to change migration speed is not fatal. */
|
|
||||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
|
||||||
+ qemuMonitorSetMigrationSpeed(priv->mon,
|
|
||||||
+ QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX);
|
|
||||||
+ priv->migMaxBandwidth = QEMU_DOMAIN_FILE_MIG_BANDWIDTH_MAX;
|
|
||||||
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
|
|
||||||
+ }
|
|
||||||
|
|
||||||
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MIGRATE_QEMU_FD) &&
|
|
||||||
(!compressor || pipe(pipeFD) == 0)) {
|
|
||||||
@@ -2783,6 +2793,13 @@ qemuMigrationToFile(struct qemud_driver
|
|
||||||
ret = 0;
|
|
||||||
|
|
||||||
cleanup:
|
|
||||||
+ /* Restore max migration bandwidth */
|
|
||||||
+ if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) == 0) {
|
|
||||||
+ qemuMonitorSetMigrationSpeed(priv->mon, saveMigBandwidth);
|
|
||||||
+ priv->migMaxBandwidth = saveMigBandwidth;
|
|
||||||
+ qemuDomainObjExitMonitorWithDriver(driver, vm);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
VIR_FORCE_CLOSE(pipeFD[0]);
|
|
||||||
VIR_FORCE_CLOSE(pipeFD[1]);
|
|
||||||
virCommandFree(cmd);
|
|
277
f84aedad-revert.patch
Normal file
277
f84aedad-revert.patch
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
commit f887b0c4913b81c33a7d0a8cce3da09caf88ecbb
|
||||||
|
Author: Jim Fehlig <jfehlig@novell.com>
|
||||||
|
Date: Thu Sep 22 20:48:07 2011 -0600
|
||||||
|
|
||||||
|
Revert "qemu: Fix shutdown regression with buggy qemu"
|
||||||
|
|
||||||
|
This reverts commit f84aedad090da1e05ccc5651815febba013eb3ad.
|
||||||
|
|
||||||
|
The commit is not needed since the affected SUSE kvm packages
|
||||||
|
have the necessary qemu patch
|
||||||
|
|
||||||
|
http://lists.nongnu.org/archive/html/qemu-devel/2011-09/msg01757.html
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
|
||||||
|
index 850d46e..36f47a9 100644
|
||||||
|
--- a/src/qemu/qemu_capabilities.c
|
||||||
|
+++ b/src/qemu/qemu_capabilities.c
|
||||||
|
@@ -136,7 +136,6 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
|
||||||
|
"pci-ohci",
|
||||||
|
"usb-redir",
|
||||||
|
"usb-hub",
|
||||||
|
- "no-shutdown",
|
||||||
|
);
|
||||||
|
|
||||||
|
struct qemu_feature_flags {
|
||||||
|
@@ -1009,13 +1008,6 @@ qemuCapsComputeCmdFlags(const char *help,
|
||||||
|
qemuCapsSet(flags, QEMU_CAPS_VHOST_NET);
|
||||||
|
}
|
||||||
|
|
||||||
|
- /* Do not use -no-shutdown if qemu doesn't support it or SIGTERM handling
|
||||||
|
- * is most likely buggy when used with -no-shutdown (which applies for qemu
|
||||||
|
- * 0.14.* and 0.15.*)
|
||||||
|
- */
|
||||||
|
- if (strstr(help, "-no-shutdown") && (version < 14000 || version > 15999))
|
||||||
|
- qemuCapsSet(flags, QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
-
|
||||||
|
/*
|
||||||
|
* Handling of -incoming arg with varying features
|
||||||
|
* -incoming tcp (kvm >= 79, qemu >= 0.10.0)
|
||||||
|
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
|
||||||
|
index 74d3ab2..96b7a3b 100644
|
||||||
|
--- a/src/qemu/qemu_capabilities.h
|
||||||
|
+++ b/src/qemu/qemu_capabilities.h
|
||||||
|
@@ -110,7 +110,6 @@ enum qemuCapsFlags {
|
||||||
|
QEMU_CAPS_PCI_OHCI = 71, /* -device pci-ohci */
|
||||||
|
QEMU_CAPS_USB_REDIR = 72, /* -device usb-redir */
|
||||||
|
QEMU_CAPS_USB_HUB = 73, /* -device usb-hub */
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN = 74, /* usable -no-shutdown */
|
||||||
|
|
||||||
|
QEMU_CAPS_LAST, /* this must always be the last item */
|
||||||
|
};
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 0adc56a..ee4b52b 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -3574,7 +3574,7 @@ qemuBuildCommandLine(virConnectPtr conn,
|
||||||
|
* when QEMU stops. If we use no-shutdown, then we can
|
||||||
|
* watch for this event and do a soft/warm reboot.
|
||||||
|
*/
|
||||||
|
- if (monitor_json && qemuCapsGet(qemuCaps, QEMU_CAPS_NO_SHUTDOWN))
|
||||||
|
+ if (monitor_json)
|
||||||
|
virCommandAddArg(cmd, "-no-shutdown");
|
||||||
|
|
||||||
|
if (!(def->features & (1 << VIR_DOMAIN_FEATURE_ACPI)))
|
||||||
|
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
|
||||||
|
index 0d0bea2..f87af06 100644
|
||||||
|
--- a/src/qemu/qemu_driver.c
|
||||||
|
+++ b/src/qemu/qemu_driver.c
|
||||||
|
@@ -1556,12 +1556,6 @@ static int qemuDomainReboot(virDomainPtr dom, unsigned int flags) {
|
||||||
|
priv = vm->privateData;
|
||||||
|
|
||||||
|
if (qemuCapsGet(priv->qemuCaps, QEMU_CAPS_MONITOR_JSON)) {
|
||||||
|
- if (!qemuCapsGet(priv->qemuCaps, QEMU_CAPS_NO_SHUTDOWN)) {
|
||||||
|
- qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
|
- _("Reboot is not supported with this QEMU binary"));
|
||||||
|
- goto cleanup;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
|
||||||
|
index 933d556..f0b0879 100644
|
||||||
|
--- a/tests/qemuhelptest.c
|
||||||
|
+++ b/tests/qemuhelptest.c
|
||||||
|
@@ -152,8 +152,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_KVM,
|
||||||
|
QEMU_CAPS_DRIVE_FORMAT,
|
||||||
|
QEMU_CAPS_MEM_PATH,
|
||||||
|
- QEMU_CAPS_TDF,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_TDF);
|
||||||
|
DO_TEST("kvm-83-rhel56", 9001, 1, 83,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -178,8 +177,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_TDF,
|
||||||
|
QEMU_CAPS_DRIVE_READONLY,
|
||||||
|
QEMU_CAPS_SMBIOS_TYPE,
|
||||||
|
- QEMU_CAPS_SPICE,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_SPICE);
|
||||||
|
DO_TEST("qemu-0.10.5", 10005, 0, 0,
|
||||||
|
QEMU_CAPS_KQEMU,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
@@ -198,8 +196,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_SDL,
|
||||||
|
QEMU_CAPS_RTC_TD_HACK,
|
||||||
|
QEMU_CAPS_NO_HPET,
|
||||||
|
- QEMU_CAPS_VGA_NONE,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_VGA_NONE);
|
||||||
|
DO_TEST("qemu-kvm-0.10.5", 10005, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -224,8 +221,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_NO_KVM_PIT,
|
||||||
|
QEMU_CAPS_TDF,
|
||||||
|
QEMU_CAPS_NESTING,
|
||||||
|
- QEMU_CAPS_VGA_NONE,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_VGA_NONE);
|
||||||
|
DO_TEST("kvm-86", 10050, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -250,8 +246,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_TDF,
|
||||||
|
QEMU_CAPS_NESTING,
|
||||||
|
QEMU_CAPS_SMBIOS_TYPE,
|
||||||
|
- QEMU_CAPS_VGA_NONE,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_VGA_NONE);
|
||||||
|
DO_TEST("qemu-kvm-0.11.0-rc2", 10092, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -281,8 +276,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_NESTING,
|
||||||
|
QEMU_CAPS_NAME_PROCESS,
|
||||||
|
QEMU_CAPS_SMBIOS_TYPE,
|
||||||
|
- QEMU_CAPS_VGA_NONE,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_VGA_NONE);
|
||||||
|
DO_TEST("qemu-0.12.1", 12001, 0, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -312,8 +306,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_SMBIOS_TYPE,
|
||||||
|
QEMU_CAPS_VGA_NONE,
|
||||||
|
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||||
|
- QEMU_CAPS_DRIVE_AIO,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_DRIVE_AIO);
|
||||||
|
DO_TEST("qemu-kvm-0.12.1.2-rhel60", 12001, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -357,8 +350,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_DEVICE_SPICEVMC,
|
||||||
|
QEMU_CAPS_PIIX3_USB_UHCI,
|
||||||
|
QEMU_CAPS_PIIX4_USB_UHCI,
|
||||||
|
- QEMU_CAPS_USB_HUB,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_USB_HUB);
|
||||||
|
DO_TEST("qemu-kvm-0.12.3", 12003, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -395,8 +387,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_SMBIOS_TYPE,
|
||||||
|
QEMU_CAPS_VGA_NONE,
|
||||||
|
QEMU_CAPS_MIGRATE_QEMU_FD,
|
||||||
|
- QEMU_CAPS_DRIVE_AIO,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_DRIVE_AIO);
|
||||||
|
DO_TEST("qemu-kvm-0.13.0", 13000, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -448,8 +439,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_PIIX4_USB_UHCI,
|
||||||
|
QEMU_CAPS_VT82C686B_USB_UHCI,
|
||||||
|
QEMU_CAPS_PCI_OHCI,
|
||||||
|
- QEMU_CAPS_USB_HUB,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_USB_HUB);
|
||||||
|
DO_TEST("qemu-kvm-0.12.1.2-rhel61", 12001, 1, 0,
|
||||||
|
QEMU_CAPS_VNC_COLON,
|
||||||
|
QEMU_CAPS_NO_REBOOT,
|
||||||
|
@@ -497,8 +487,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_VIRTIO_IOEVENTFD,
|
||||||
|
QEMU_CAPS_PIIX3_USB_UHCI,
|
||||||
|
QEMU_CAPS_PIIX4_USB_UHCI,
|
||||||
|
- QEMU_CAPS_USB_HUB,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
+ QEMU_CAPS_USB_HUB);
|
||||||
|
|
||||||
|
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args b/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args
|
||||||
|
index e04cdec..8d8e43e 100644
|
||||||
|
--- a/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args
|
||||||
|
+++ b/tests/qemuxml2argvdata/qemuxml2argv-monitor-json.args
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
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=control -no-acpi -boot c -hda /dev/hda1 -usb -device \
|
||||||
|
+id=monitor,mode=control -no-shutdown -no-acpi -boot c -hda /dev/hda1 -usb -device \
|
||||||
|
virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
||||||
|
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args b/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args
|
||||||
|
deleted file mode 100644
|
||||||
|
index 1464d09..0000000
|
||||||
|
--- a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.args
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,21 +0,0 @@
|
||||||
|
-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=control \
|
||||||
|
--no-shutdown \
|
||||||
|
--no-acpi \
|
||||||
|
--boot c \
|
||||||
|
--hda /dev/hda1 \
|
||||||
|
--usb \
|
||||||
|
--device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
||||||
|
diff --git a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.xml b/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.xml
|
||||||
|
deleted file mode 100644
|
||||||
|
index 1901715..0000000
|
||||||
|
--- a/tests/qemuxml2argvdata/qemuxml2argv-no-shutdown.xml
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,24 +0,0 @@
|
||||||
|
-<domain type='qemu'>
|
||||||
|
- <name>encryptdisk</name>
|
||||||
|
- <uuid>496898a6-e6ff-f7c8-5dc2-3cf410945ee9</uuid>
|
||||||
|
- <memory>219100</memory>
|
||||||
|
- <currentMemory>219100</currentMemory>
|
||||||
|
- <vcpu>1</vcpu>
|
||||||
|
- <os>
|
||||||
|
- <type arch='i686' machine='pc'>hvm</type>
|
||||||
|
- <boot dev='hd'/>
|
||||||
|
- </os>
|
||||||
|
- <clock offset='utc'/>
|
||||||
|
- <on_poweroff>destroy</on_poweroff>
|
||||||
|
- <on_reboot>restart</on_reboot>
|
||||||
|
- <on_crash>destroy</on_crash>
|
||||||
|
- <devices>
|
||||||
|
- <emulator>/usr/bin/qemu</emulator>
|
||||||
|
- <disk type='file' device='disk'>
|
||||||
|
- <driver name='qemu' type='qcow2'/>
|
||||||
|
- <source file='/dev/hda1'/>
|
||||||
|
- <target dev='hda'/>
|
||||||
|
- </disk>
|
||||||
|
- <memballoon model='virtio'/>
|
||||||
|
- </devices>
|
||||||
|
-</domain>
|
||||||
|
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||||
|
index 1dc6a01..fcb20bb 100644
|
||||||
|
--- a/tests/qemuxml2argvtest.c
|
||||||
|
+++ b/tests/qemuxml2argvtest.c
|
||||||
|
@@ -578,9 +578,6 @@ mymain(void)
|
||||||
|
json = true;
|
||||||
|
DO_TEST("monitor-json", false, QEMU_CAPS_DEVICE,
|
||||||
|
QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG);
|
||||||
|
- DO_TEST("no-shutdown", false, QEMU_CAPS_DEVICE,
|
||||||
|
- QEMU_CAPS_CHARDEV, QEMU_CAPS_MONITOR_JSON, QEMU_CAPS_NODEFCONFIG,
|
||||||
|
- QEMU_CAPS_NO_SHUTDOWN);
|
||||||
|
json = false;
|
||||||
|
|
||||||
|
free(driver.stateDir);
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:d0da7dedb7d36ddb452ec33ed24203fcdb3ca6b7284524190ac0b70c96a505ad
|
|
||||||
size 11518513
|
|
3
libvirt-0.9.6.tar.bz2
Normal file
3
libvirt-0.9.6.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:44196cc4445f141b5f7f5f45b16ac476e7a2e0c994248714da6818e277f90495
|
||||||
|
size 12058512
|
@ -1,7 +1,7 @@
|
|||||||
Index: libvirt-0.9.4/configure.ac
|
Index: libvirt-0.9.5/configure.ac
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/configure.ac
|
--- libvirt-0.9.5.orig/configure.ac
|
||||||
+++ libvirt-0.9.4/configure.ac
|
+++ libvirt-0.9.5/configure.ac
|
||||||
@@ -63,6 +63,7 @@ AVAHI_REQUIRED="0.6.0"
|
@@ -63,6 +63,7 @@ AVAHI_REQUIRED="0.6.0"
|
||||||
POLKIT_REQUIRED="0.6"
|
POLKIT_REQUIRED="0.6"
|
||||||
PARTED_REQUIRED="1.8.0"
|
PARTED_REQUIRED="1.8.0"
|
||||||
@ -10,7 +10,7 @@ Index: libvirt-0.9.4/configure.ac
|
|||||||
UDEV_REQUIRED=145
|
UDEV_REQUIRED=145
|
||||||
PCIACCESS_REQUIRED=0.10.0
|
PCIACCESS_REQUIRED=0.10.0
|
||||||
XMLRPC_REQUIRED=1.14.0
|
XMLRPC_REQUIRED=1.14.0
|
||||||
@@ -1591,6 +1592,38 @@ AM_CONDITIONAL([WITH_NETCF], [test "$wit
|
@@ -1593,6 +1594,38 @@ AM_CONDITIONAL([WITH_NETCF], [test "$wit
|
||||||
AC_SUBST([NETCF_CFLAGS])
|
AC_SUBST([NETCF_CFLAGS])
|
||||||
AC_SUBST([NETCF_LIBS])
|
AC_SUBST([NETCF_LIBS])
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ Index: libvirt-0.9.4/configure.ac
|
|||||||
|
|
||||||
AC_ARG_WITH([secrets],
|
AC_ARG_WITH([secrets],
|
||||||
AC_HELP_STRING([--with-secrets], [with local secrets management driver @<:@default=yes@:>@]),[],[with_secrets=yes])
|
AC_HELP_STRING([--with-secrets], [with local secrets management driver @<:@default=yes@:>@]),[],[with_secrets=yes])
|
||||||
@@ -2460,6 +2493,7 @@ AC_MSG_NOTICE([ Remote: $with_remote])
|
@@ -2517,6 +2550,7 @@ AC_MSG_NOTICE([ Remote: $with_remote])
|
||||||
AC_MSG_NOTICE([ Network: $with_network])
|
AC_MSG_NOTICE([ Network: $with_network])
|
||||||
AC_MSG_NOTICE([Libvirtd: $with_libvirtd])
|
AC_MSG_NOTICE([Libvirtd: $with_libvirtd])
|
||||||
AC_MSG_NOTICE([ netcf: $with_netcf])
|
AC_MSG_NOTICE([ netcf: $with_netcf])
|
||||||
@ -57,7 +57,7 @@ Index: libvirt-0.9.4/configure.ac
|
|||||||
AC_MSG_NOTICE([ macvtap: $with_macvtap])
|
AC_MSG_NOTICE([ macvtap: $with_macvtap])
|
||||||
AC_MSG_NOTICE([virtport: $with_virtualport])
|
AC_MSG_NOTICE([virtport: $with_virtualport])
|
||||||
AC_MSG_NOTICE([])
|
AC_MSG_NOTICE([])
|
||||||
@@ -2586,6 +2620,11 @@ AC_MSG_NOTICE([ netcf: $NETCF_CFLAGS $
|
@@ -2648,6 +2682,11 @@ AC_MSG_NOTICE([ netcf: $NETCF_CFLAGS $
|
||||||
else
|
else
|
||||||
AC_MSG_NOTICE([ netcf: no])
|
AC_MSG_NOTICE([ netcf: no])
|
||||||
fi
|
fi
|
||||||
@ -69,10 +69,10 @@ Index: libvirt-0.9.4/configure.ac
|
|||||||
if test "$with_qemu" = "yes" && test "$LIBPCAP_FOUND" != "no"; then
|
if test "$with_qemu" = "yes" && test "$LIBPCAP_FOUND" != "no"; then
|
||||||
AC_MSG_NOTICE([ pcap: $LIBPCAP_CFLAGS $LIBPCAP_LIBS])
|
AC_MSG_NOTICE([ pcap: $LIBPCAP_CFLAGS $LIBPCAP_LIBS])
|
||||||
else
|
else
|
||||||
Index: libvirt-0.9.4/daemon/Makefile.am
|
Index: libvirt-0.9.5/daemon/Makefile.am
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/daemon/Makefile.am
|
--- libvirt-0.9.5.orig/daemon/Makefile.am
|
||||||
+++ libvirt-0.9.4/daemon/Makefile.am
|
+++ libvirt-0.9.5/daemon/Makefile.am
|
||||||
@@ -141,6 +141,10 @@ endif
|
@@ -141,6 +141,10 @@ endif
|
||||||
|
|
||||||
if WITH_NETCF
|
if WITH_NETCF
|
||||||
@ -84,11 +84,11 @@ Index: libvirt-0.9.4/daemon/Makefile.am
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_NODE_DEVICES
|
if WITH_NODE_DEVICES
|
||||||
Index: libvirt-0.9.4/daemon/libvirtd.c
|
Index: libvirt-0.9.5/daemon/libvirtd.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/daemon/libvirtd.c
|
--- libvirt-0.9.5.orig/daemon/libvirtd.c
|
||||||
+++ libvirt-0.9.4/daemon/libvirtd.c
|
+++ libvirt-0.9.5/daemon/libvirtd.c
|
||||||
@@ -74,6 +74,10 @@
|
@@ -75,6 +75,10 @@
|
||||||
# endif
|
# endif
|
||||||
# ifdef WITH_NETCF
|
# ifdef WITH_NETCF
|
||||||
# include "interface/netcf_driver.h"
|
# include "interface/netcf_driver.h"
|
||||||
@ -99,7 +99,7 @@ Index: libvirt-0.9.4/daemon/libvirtd.c
|
|||||||
# endif
|
# endif
|
||||||
# ifdef WITH_STORAGE_DIR
|
# ifdef WITH_STORAGE_DIR
|
||||||
# include "storage/storage_driver.h"
|
# include "storage/storage_driver.h"
|
||||||
@@ -428,6 +432,10 @@ static void daemonInitialize(void)
|
@@ -393,6 +397,10 @@ static void daemonInitialize(void)
|
||||||
# endif
|
# endif
|
||||||
# ifdef WITH_NETCF
|
# ifdef WITH_NETCF
|
||||||
interfaceRegister();
|
interfaceRegister();
|
||||||
@ -110,11 +110,11 @@ Index: libvirt-0.9.4/daemon/libvirtd.c
|
|||||||
# endif
|
# endif
|
||||||
# ifdef WITH_STORAGE_DIR
|
# ifdef WITH_STORAGE_DIR
|
||||||
storageRegister();
|
storageRegister();
|
||||||
Index: libvirt-0.9.4/src/Makefile.am
|
Index: libvirt-0.9.5/src/Makefile.am
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/src/Makefile.am
|
--- libvirt-0.9.5.orig/src/Makefile.am
|
||||||
+++ libvirt-0.9.4/src/Makefile.am
|
+++ libvirt-0.9.5/src/Makefile.am
|
||||||
@@ -870,6 +870,24 @@ libvirt_driver_interface_la_LIBADD += ..
|
@@ -923,6 +923,24 @@ libvirt_driver_interface_la_LIBADD += ..
|
||||||
libvirt_driver_interface_la_LDFLAGS += -module -avoid-version
|
libvirt_driver_interface_la_LDFLAGS += -module -avoid-version
|
||||||
endif
|
endif
|
||||||
libvirt_driver_interface_la_SOURCES = $(INTERFACE_DRIVER_SOURCES)
|
libvirt_driver_interface_la_SOURCES = $(INTERFACE_DRIVER_SOURCES)
|
||||||
@ -139,10 +139,10 @@ Index: libvirt-0.9.4/src/Makefile.am
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if WITH_SECRETS
|
if WITH_SECRETS
|
||||||
Index: libvirt-0.9.4/src/interface/netcf_driver.c
|
Index: libvirt-0.9.5/src/interface/netcf_driver.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/src/interface/netcf_driver.c
|
--- libvirt-0.9.5.orig/src/interface/netcf_driver.c
|
||||||
+++ libvirt-0.9.4/src/interface/netcf_driver.c
|
+++ libvirt-0.9.5/src/interface/netcf_driver.c
|
||||||
@@ -23,7 +23,13 @@
|
@@ -23,7 +23,13 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
@ -208,11 +208,11 @@ Index: libvirt-0.9.4/src/interface/netcf_driver.c
|
|||||||
/* open netcf */
|
/* open netcf */
|
||||||
if (ncf_init(&driverState->netcf, NULL) != 0)
|
if (ncf_init(&driverState->netcf, NULL) != 0)
|
||||||
{
|
{
|
||||||
Index: libvirt-0.9.4/tools/virsh.c
|
Index: libvirt-0.9.5/tools/virsh.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/tools/virsh.c
|
--- libvirt-0.9.5.orig/tools/virsh.c
|
||||||
+++ libvirt-0.9.4/tools/virsh.c
|
+++ libvirt-0.9.5/tools/virsh.c
|
||||||
@@ -14904,6 +14904,10 @@ vshShowVersion(vshControl *ctl ATTRIBUTE
|
@@ -16001,6 +16001,10 @@ vshShowVersion(vshControl *ctl ATTRIBUTE
|
||||||
#endif
|
#endif
|
||||||
#ifdef WITH_NETCF
|
#ifdef WITH_NETCF
|
||||||
vshPrint(ctl, " Netcf");
|
vshPrint(ctl, " Netcf");
|
||||||
|
@ -1,8 +1,33 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 22 21:08:11 MDT 2011 - jfehlig@suse.com
|
||||||
|
|
||||||
|
- Revert upstream commit f84aedad, which is not needed since
|
||||||
|
affected SUSE kvm packages have the necessary qemu fix
|
||||||
|
f84aedad-revert.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Sep 22 20:43:51 MDT 2011 - jfehlig@suse.com
|
||||||
|
|
||||||
|
- Update to libvirt 0.9.6
|
||||||
|
- Fix shutdown regression with buggy qemu
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed Sep 21 20:12:16 UTC 2011 - andrea.turrini@gmail.com
|
Wed Sep 21 20:12:16 UTC 2011 - andrea.turrini@gmail.com
|
||||||
|
|
||||||
- Fixed typos in libvirt.spec
|
- Fixed typos in libvirt.spec
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Sep 20 11:51:44 MDT 2011 - jfehlig@suse.com
|
||||||
|
|
||||||
|
- Update to libvirt 0.9.5
|
||||||
|
- many snapshot improvements
|
||||||
|
- latency: Define new public API and structure
|
||||||
|
- USB2 and various USB improvements
|
||||||
|
- storage: Add fs pool formatting
|
||||||
|
- Add public API for getting migration speed
|
||||||
|
- Add basic driver for Microsoft Hyper-V
|
||||||
|
- Many bug fixes and improvements
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Sep 16 12:50:51 MDT 2011 - jfehlig@suse.com
|
Fri Sep 16 12:50:51 MDT 2011 - jfehlig@suse.com
|
||||||
|
|
||||||
|
65
libvirt.spec
65
libvirt.spec
@ -48,6 +48,7 @@
|
|||||||
%define with_phyp 0%{!?_without_phyp:0}
|
%define with_phyp 0%{!?_without_phyp:0}
|
||||||
%define with_esx 0%{!?_without_esx:1}
|
%define with_esx 0%{!?_without_esx:1}
|
||||||
%define with_xenapi 0%{!?_without_xenapi:1}
|
%define with_xenapi 0%{!?_without_xenapi:1}
|
||||||
|
%define with_hyperv 0%{!?_without_hyperv:0}
|
||||||
|
|
||||||
# Then the secondary host drivers
|
# Then the secondary host drivers
|
||||||
%define with_network 0%{!?_without_network:%{server_drivers}}
|
%define with_network 0%{!?_without_network:%{server_drivers}}
|
||||||
@ -246,6 +247,9 @@ BuildRequires: libyajl-devel
|
|||||||
%if %{with_esx}
|
%if %{with_esx}
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
%endif
|
%endif
|
||||||
|
%if %{with_hyperv}
|
||||||
|
BuildRequires: libwsman-devel >= 2.2.3
|
||||||
|
%endif
|
||||||
%if %{with_capng}
|
%if %{with_capng}
|
||||||
BuildRequires: libcap-ng-devel >= 0.5.0
|
BuildRequires: libcap-ng-devel >= 0.5.0
|
||||||
%endif
|
%endif
|
||||||
@ -302,8 +306,8 @@ Url: http://libvirt.org/
|
|||||||
License: LGPLv2.1+
|
License: LGPLv2.1+
|
||||||
Group: Development/Libraries/C and C++
|
Group: Development/Libraries/C and C++
|
||||||
AutoReqProv: yes
|
AutoReqProv: yes
|
||||||
Version: 0.9.4
|
Version: 0.9.6
|
||||||
Release: 3
|
Release: 1
|
||||||
Summary: A C toolkit to interact with the virtualization capabilities of Linux
|
Summary: A C toolkit to interact with the virtualization capabilities of Linux
|
||||||
Conflicts: kvm < 0.14.1
|
Conflicts: kvm < 0.14.1
|
||||||
|
|
||||||
@ -370,19 +374,6 @@ Source1: libvirtd.init
|
|||||||
Source2: libvirtd-relocation-server.fw
|
Source2: libvirtd-relocation-server.fw
|
||||||
Source99: baselibs.conf
|
Source99: baselibs.conf
|
||||||
# Upstream patches
|
# Upstream patches
|
||||||
Patch0: 9e093f0b-libvirtd-sighup.patch
|
|
||||||
Patch1: 32620dab-fix-xen-err-msg.patch
|
|
||||||
Patch2: 57c95175-xend-buff-size.patch
|
|
||||||
Patch3: 6ff9fc26-quiet-libxl-logging.patch
|
|
||||||
Patch4: 7f2498ef-no-log-invalid.patch
|
|
||||||
Patch5: 7e5f6a51-rpc-generator.patch
|
|
||||||
Patch6: b12354be-mig-speed-1.patch
|
|
||||||
Patch7: 1282bd80-mig-speed-2.patch
|
|
||||||
Patch8: 6f84e110-mig-speed-3.patch
|
|
||||||
Patch9: 829bce17-mig-speed-4.patch
|
|
||||||
Patch10: 8fc40c51-mig-speed-5.patch
|
|
||||||
Patch11: ef1065cf-mig-speed-6.patch
|
|
||||||
Patch12: 0257ba8f-mig-speed-7.patch
|
|
||||||
# Need to go upstream
|
# Need to go upstream
|
||||||
Patch100: xen-name-for-devid.patch
|
Patch100: xen-name-for-devid.patch
|
||||||
Patch101: clone.patch
|
Patch101: clone.patch
|
||||||
@ -391,6 +382,9 @@ Patch103: xend-disk-order.patch
|
|||||||
# Our patches
|
# Our patches
|
||||||
Patch200: libvirtd-defaults.patch
|
Patch200: libvirtd-defaults.patch
|
||||||
Patch201: use-init-script-redhat.patch
|
Patch201: use-init-script-redhat.patch
|
||||||
|
# This patch reverts commit f84aedad, which is not needed since
|
||||||
|
# affected SUSE kvm packages have the necessary qemu fix.
|
||||||
|
Patch202: f84aedad-revert.patch
|
||||||
%if %{with_apparmor}
|
%if %{with_apparmor}
|
||||||
Patch250: install-apparmor-profiles.patch
|
Patch250: install-apparmor-profiles.patch
|
||||||
%endif
|
%endif
|
||||||
@ -482,6 +476,7 @@ Authors:
|
|||||||
Karel Zak <kzak@redhat.com>
|
Karel Zak <kzak@redhat.com>
|
||||||
|
|
||||||
%if %{with_python}
|
%if %{with_python}
|
||||||
|
|
||||||
%package python
|
%package python
|
||||||
License: LGPLv2.1+
|
License: LGPLv2.1+
|
||||||
Summary: A C toolkit to interact with the virtualization capabilities of Linux
|
Summary: A C toolkit to interact with the virtualization capabilities of Linux
|
||||||
@ -504,25 +499,13 @@ Authors:
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p1
|
|
||||||
%patch1 -p1
|
|
||||||
%patch2 -p1
|
|
||||||
%patch3 -p1
|
|
||||||
%patch4 -p1
|
|
||||||
%patch5 -p1
|
|
||||||
%patch6 -p1
|
|
||||||
%patch7 -p1
|
|
||||||
%patch8 -p1
|
|
||||||
%patch9 -p1
|
|
||||||
%patch10 -p1
|
|
||||||
%patch11 -p1
|
|
||||||
%patch12 -p1
|
|
||||||
%patch100 -p1
|
%patch100 -p1
|
||||||
%patch101
|
%patch101
|
||||||
%patch102 -p1
|
%patch102 -p1
|
||||||
%patch103 -p1
|
%patch103 -p1
|
||||||
%patch200 -p1
|
%patch200 -p1
|
||||||
%patch201 -p1
|
%patch201 -p1
|
||||||
|
%patch202 -p1
|
||||||
%if %{with_apparmor}
|
%if %{with_apparmor}
|
||||||
%patch250 -p1
|
%patch250 -p1
|
||||||
%endif
|
%endif
|
||||||
@ -561,6 +544,9 @@ Authors:
|
|||||||
%if ! %{with_vmware}
|
%if ! %{with_vmware}
|
||||||
%define _without_vmware --without-vmware
|
%define _without_vmware --without-vmware
|
||||||
%endif
|
%endif
|
||||||
|
%if ! %{with_hyperv}
|
||||||
|
%define _without_hyperv --without-hyperv
|
||||||
|
%endif
|
||||||
%if ! %{with_libxl}
|
%if ! %{with_libxl}
|
||||||
%define _without_libxl --without-libxl
|
%define _without_libxl --without-libxl
|
||||||
%endif
|
%endif
|
||||||
@ -644,6 +630,7 @@ export CFLAGS="$RPM_OPT_FLAGS"
|
|||||||
%{?_without_phyp} \
|
%{?_without_phyp} \
|
||||||
%{?_without_esx} \
|
%{?_without_esx} \
|
||||||
%{?_without_vmware} \
|
%{?_without_vmware} \
|
||||||
|
%{?_without_hyperv} \
|
||||||
%{?_without_libxl} \
|
%{?_without_libxl} \
|
||||||
%{?_without_libvirtd} \
|
%{?_without_libvirtd} \
|
||||||
%{?_without_storage_fs} \
|
%{?_without_storage_fs} \
|
||||||
@ -794,6 +781,7 @@ fi
|
|||||||
%postun client -p /sbin/ldconfig
|
%postun client -p /sbin/ldconfig
|
||||||
|
|
||||||
%if %{with_libvirtd}
|
%if %{with_libvirtd}
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
%{_sbindir}/libvirtd
|
%{_sbindir}/libvirtd
|
||||||
@ -889,19 +877,20 @@ fi
|
|||||||
%dir %{_datadir}/libvirt/
|
%dir %{_datadir}/libvirt/
|
||||||
%dir %{_datadir}/libvirt/schemas/
|
%dir %{_datadir}/libvirt/schemas/
|
||||||
|
|
||||||
%{_datadir}/libvirt/schemas/domain.rng
|
%{_datadir}/libvirt/schemas/basictypes.rng
|
||||||
%{_datadir}/libvirt/schemas/network.rng
|
|
||||||
%{_datadir}/libvirt/schemas/storagepool.rng
|
|
||||||
%{_datadir}/libvirt/schemas/storagevol.rng
|
|
||||||
%{_datadir}/libvirt/schemas/nodedev.rng
|
|
||||||
%{_datadir}/libvirt/schemas/capability.rng
|
%{_datadir}/libvirt/schemas/capability.rng
|
||||||
|
%{_datadir}/libvirt/schemas/domain.rng
|
||||||
|
%{_datadir}/libvirt/schemas/domaincommon.rng
|
||||||
|
%{_datadir}/libvirt/schemas/domainsnapshot.rng
|
||||||
%{_datadir}/libvirt/schemas/interface.rng
|
%{_datadir}/libvirt/schemas/interface.rng
|
||||||
|
%{_datadir}/libvirt/schemas/network.rng
|
||||||
|
%{_datadir}/libvirt/schemas/networkcommon.rng
|
||||||
|
%{_datadir}/libvirt/schemas/nodedev.rng
|
||||||
|
%{_datadir}/libvirt/schemas/nwfilter.rng
|
||||||
%{_datadir}/libvirt/schemas/secret.rng
|
%{_datadir}/libvirt/schemas/secret.rng
|
||||||
%{_datadir}/libvirt/schemas/storageencryption.rng
|
%{_datadir}/libvirt/schemas/storageencryption.rng
|
||||||
%{_datadir}/libvirt/schemas/nwfilter.rng
|
%{_datadir}/libvirt/schemas/storagepool.rng
|
||||||
%{_datadir}/libvirt/schemas/domainsnapshot.rng
|
%{_datadir}/libvirt/schemas/storagevol.rng
|
||||||
%{_datadir}/libvirt/schemas/basictypes.rng
|
|
||||||
%{_datadir}/libvirt/schemas/networkcommon.rng
|
|
||||||
%{_datadir}/libvirt/cpu_map.xml
|
%{_datadir}/libvirt/cpu_map.xml
|
||||||
%if %{with_sasl}
|
%if %{with_sasl}
|
||||||
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
|
%config(noreplace) %{_sysconfdir}/sasl2/libvirt.conf
|
||||||
@ -923,10 +912,12 @@ fi
|
|||||||
%doc %{_docdir}/%{name}/html
|
%doc %{_docdir}/%{name}/html
|
||||||
|
|
||||||
%if %{with_python}
|
%if %{with_python}
|
||||||
|
|
||||||
%files python
|
%files python
|
||||||
%defattr(-, root, root)
|
%defattr(-, root, root)
|
||||||
%doc %{_docdir}/%{name}-python
|
%doc %{_docdir}/%{name}-python
|
||||||
%{py_sitedir}/libvirt.py*
|
%{py_sitedir}/libvirt.py*
|
||||||
|
%{_libdir}/python*/site-packages/libvirt_qemu.py*
|
||||||
%{py_sitedir}/libvirtmod*
|
%{py_sitedir}/libvirtmod*
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
Index: libvirt-0.9.4/daemon/libvirtd.conf
|
Index: libvirt-0.9.5/daemon/libvirtd.conf
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/daemon/libvirtd.conf
|
--- libvirt-0.9.5.orig/daemon/libvirtd.conf
|
||||||
+++ libvirt-0.9.4/daemon/libvirtd.conf
|
+++ libvirt-0.9.5/daemon/libvirtd.conf
|
||||||
@@ -18,8 +18,8 @@
|
@@ -18,8 +18,8 @@
|
||||||
# It is necessary to setup a CA and issue server certificates before
|
# It is necessary to setup a CA and issue server certificates before
|
||||||
# using this capability.
|
# using this capability.
|
||||||
@ -28,11 +28,11 @@ Index: libvirt-0.9.4/daemon/libvirtd.conf
|
|||||||
|
|
||||||
# Override the default mDNS advertizement name. This must be
|
# Override the default mDNS advertizement name. This must be
|
||||||
# unique on the immediate broadcast network.
|
# unique on the immediate broadcast network.
|
||||||
Index: libvirt-0.9.4/daemon/libvirtd.c
|
Index: libvirt-0.9.5/daemon/libvirtd.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/daemon/libvirtd.c
|
--- libvirt-0.9.5.orig/daemon/libvirtd.c
|
||||||
+++ libvirt-0.9.4/daemon/libvirtd.c
|
+++ libvirt-0.9.5/daemon/libvirtd.c
|
||||||
@@ -881,7 +881,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
@@ -846,7 +846,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +41,7 @@ Index: libvirt-0.9.4/daemon/libvirtd.c
|
|||||||
data->listen_tcp = 0;
|
data->listen_tcp = 0;
|
||||||
|
|
||||||
if (!(data->tls_port = strdup(LIBVIRTD_TLS_PORT)))
|
if (!(data->tls_port = strdup(LIBVIRTD_TLS_PORT)))
|
||||||
@@ -918,7 +918,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
@@ -883,7 +883,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||||
#endif
|
#endif
|
||||||
data->auth_tls = REMOTE_AUTH_NONE;
|
data->auth_tls = REMOTE_AUTH_NONE;
|
||||||
|
|
||||||
|
@ -13,10 +13,10 @@ Date: Wed Jan 27 16:11:41 2010 -0700
|
|||||||
This approach allows removing a disk when domain is inactive. We
|
This approach allows removing a disk when domain is inactive. We
|
||||||
obviously can't search xenstore when the domain is inactive.
|
obviously can't search xenstore when the domain is inactive.
|
||||||
|
|
||||||
Index: libvirt-0.9.4/src/xen/xend_internal.c
|
Index: libvirt-0.9.6/src/xen/xend_internal.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- libvirt-0.9.4.orig/src/xen/xend_internal.c
|
--- libvirt-0.9.6.orig/src/xen/xend_internal.c
|
||||||
+++ libvirt-0.9.4/src/xen/xend_internal.c
|
+++ libvirt-0.9.6/src/xen/xend_internal.c
|
||||||
@@ -60,6 +60,7 @@
|
@@ -60,6 +60,7 @@
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -25,7 +25,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
virDomainDeviceDefPtr dev,
|
virDomainDeviceDefPtr dev,
|
||||||
char *class,
|
char *class,
|
||||||
char *ref,
|
char *ref,
|
||||||
@@ -2805,7 +2806,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
@@ -2749,7 +2750,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||||
|
|
||||||
sexpr = virBufferContentAndReset(&buf);
|
sexpr = virBufferContentAndReset(&buf);
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
/* device doesn't exist, define it */
|
/* device doesn't exist, define it */
|
||||||
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
||||||
"config", sexpr, NULL);
|
"config", sexpr, NULL);
|
||||||
@@ -2926,7 +2927,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
@@ -2870,7 +2871,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||||
|
|
||||||
sexpr = virBufferContentAndReset(&buf);
|
sexpr = virBufferContentAndReset(&buf);
|
||||||
|
|
||||||
@ -43,7 +43,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
virXendError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||||
_("requested device does not exist"));
|
_("requested device does not exist"));
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
@@ -3021,7 +3022,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
@@ -2965,7 +2966,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||||
def, xml, VIR_DOMAIN_XML_INACTIVE)))
|
def, xml, VIR_DOMAIN_XML_INACTIVE)))
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||||
@@ -3977,6 +3978,7 @@ struct xenUnifiedDriver xenDaemonDriver
|
@@ -3915,6 +3916,7 @@ struct xenUnifiedDriver xenDaemonDriver
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
virDomainXMLDevID(virDomainPtr domain,
|
virDomainXMLDevID(virDomainPtr domain,
|
||||||
@ -60,7 +60,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
virDomainDeviceDefPtr dev,
|
virDomainDeviceDefPtr dev,
|
||||||
char *class,
|
char *class,
|
||||||
char *ref,
|
char *ref,
|
||||||
@@ -3985,8 +3987,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
@@ -3923,8 +3925,12 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||||
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||||
char *xref;
|
char *xref;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
@ -73,7 +73,7 @@ Index: libvirt-0.9.4/src/xen/xend_internal.c
|
|||||||
if (dev->data.disk->driverName &&
|
if (dev->data.disk->driverName &&
|
||||||
STREQ(dev->data.disk->driverName, "tap"))
|
STREQ(dev->data.disk->driverName, "tap"))
|
||||||
strcpy(class, "tap");
|
strcpy(class, "tap");
|
||||||
@@ -3996,19 +4002,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
@@ -3934,19 +3940,21 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||||
else
|
else
|
||||||
strcpy(class, "vbd");
|
strcpy(class, "vbd");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user