Hello community, here is the log from the commit of package libvirt for openSUSE:Factory checked in at 2018-03-24 16:08:36 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libvirt (Old) and /work/SRC/openSUSE:Factory/.libvirt.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libvirt" Sat Mar 24 16:08:36 2018 rev:255 rq:589841 version:4.1.0 Changes: -------- --- /work/SRC/openSUSE:Factory/libvirt/libvirt.changes 2018-03-19 23:33:07.676717365 +0100 +++ /work/SRC/openSUSE:Factory/.libvirt.new/libvirt.changes 2018-03-24 16:08:40.637995018 +0100 @@ -1,0 +2,23 @@ +Wed Mar 21 22:43:28 UTC 2018 - jfeh...@suse.com + +- libxl: don't hardcode scheduler weight + 83edaf44-libxl-dont-hardcode-sched-weight.patch + bsc#1086377 + +------------------------------------------------------------------- +Tue Mar 20 20:20:18 UTC 2018 - jfeh...@suse.com + +- libxl: fixes and improvements in migration APIs + 64370c4b-libxl-MigrateBegin.patch, + 99486799-libxl-MigrateConfirm.patch, + f5eacf2a-libxl-MigratePerform.patch, + 4e6fcdb6-libxl-libxlDomObjFromDomain-cleanup.patch, + fe51dbda-libxl-use-FindByRef.patch, + 60b3fcd9-libxl-MigratePrepare.patch, + 3c89868c-libxl-lock-after-ListRemove.patch, + 13e81fc6-libxl-EndJob-on-error.patch, + 594b8b99-libxl-DefineXMLFlags-API-pattern.patch, + c66e344e-libxl-dont-deref-NULL.patch + bsc#1080957 + +------------------------------------------------------------------- New: ---- 13e81fc6-libxl-EndJob-on-error.patch 3c89868c-libxl-lock-after-ListRemove.patch 4e6fcdb6-libxl-libxlDomObjFromDomain-cleanup.patch 594b8b99-libxl-DefineXMLFlags-API-pattern.patch 60b3fcd9-libxl-MigratePrepare.patch 64370c4b-libxl-MigrateBegin.patch 83edaf44-libxl-dont-hardcode-sched-weight.patch 99486799-libxl-MigrateConfirm.patch c66e344e-libxl-dont-deref-NULL.patch f5eacf2a-libxl-MigratePerform.patch fe51dbda-libxl-use-FindByRef.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libvirt.spec ++++++ --- /var/tmp/diff_new_pack.0YQbK5/_old 2018-03-24 16:08:42.385932008 +0100 +++ /var/tmp/diff_new_pack.0YQbK5/_new 2018-03-24 16:08:42.389931863 +0100 @@ -334,6 +334,17 @@ Patch6: eefabb38-rpc-virtlockd-virtlogd-single-thread.patch Patch7: fbf31e1a-CVE-2018-1064.patch Patch8: fb327ac2-virtlockd-admin-socket.patch +Patch9: 64370c4b-libxl-MigrateBegin.patch +Patch10: 99486799-libxl-MigrateConfirm.patch +Patch11: f5eacf2a-libxl-MigratePerform.patch +Patch12: 4e6fcdb6-libxl-libxlDomObjFromDomain-cleanup.patch +Patch13: fe51dbda-libxl-use-FindByRef.patch +Patch14: 60b3fcd9-libxl-MigratePrepare.patch +Patch15: 3c89868c-libxl-lock-after-ListRemove.patch +Patch16: 13e81fc6-libxl-EndJob-on-error.patch +Patch17: 594b8b99-libxl-DefineXMLFlags-API-pattern.patch +Patch18: c66e344e-libxl-dont-deref-NULL.patch +Patch19: 83edaf44-libxl-dont-hardcode-sched-weight.patch # Patches pending upstream review Patch100: libxl-dom-reset.patch Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch @@ -948,6 +959,17 @@ %patch6 -p1 %patch7 -p1 %patch8 -p1 +%patch9 -p1 +%patch10 -p1 +%patch11 -p1 +%patch12 -p1 +%patch13 -p1 +%patch14 -p1 +%patch15 -p1 +%patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 %patch100 -p1 %patch101 -p1 %patch150 -p1 ++++++ 13e81fc6-libxl-EndJob-on-error.patch ++++++ commit 13e81fc6fad03aa6b6ecf4230f44b2ea55078229 Author: Jim Fehlig <jfeh...@suse.com> Date: Fri Mar 16 15:22:45 2018 -0600 libxl: call EndJob in error case If starting the domain fails in libxlDomainCreateXML, we mistakenly jumped to cleanup without calling libxlDomainObjEndJob. Remove the jump to 'cleanup'. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -1066,7 +1066,6 @@ libxlDomainCreateXML(virConnectPtr conn, if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); virObjectLock(vm); - goto cleanup; } goto endjob; } ++++++ 3c89868c-libxl-lock-after-ListRemove.patch ++++++ commit 3c89868c5fef3d0cfbc40d0185447d13a6242620 Author: Jim Fehlig <jfeh...@suse.com> Date: Fri Mar 16 15:15:07 2018 -0600 libxl: lock virDomainObj after ListRemove Most libxl driver API use the pattern of lock and add a ref to virDomainObj, perform API, then decrement ref and unlock in virDomainEndAPI. In some cases the API may call virDomainObjListRemove, which unlocks the virDomainObj. Relock the object in such cases so EndAPI is called with a locked object. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -1056,7 +1056,7 @@ libxlDomainCreateXML(virConnectPtr conn, if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) { if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } goto cleanup; } @@ -1065,7 +1065,7 @@ libxlDomainCreateXML(virConnectPtr conn, (flags & VIR_DOMAIN_START_PAUSED) != 0) < 0) { if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); goto cleanup; } goto endjob; @@ -1417,8 +1417,10 @@ libxlDomainDestroyFlags(virDomainPtr dom VIR_DOMAIN_EVENT_STOPPED_DESTROYED); libxlDomainCleanup(driver, vm); - if (!vm->persistent) + if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); + virObjectLock(vm); + } ret = 0; @@ -1822,7 +1824,7 @@ libxlDomainSaveFlags(virDomainPtr dom, c cleanup: if (remove_dom && vm) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } virDomainObjEndAPI(&vm); return ret; @@ -1877,7 +1879,7 @@ libxlDomainRestoreFlags(virConnectPtr co if (libxlDomainObjBeginJob(driver, vm, LIBXL_JOB_MODIFY) < 0) { if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } goto cleanup; } @@ -1885,8 +1887,10 @@ libxlDomainRestoreFlags(virConnectPtr co ret = libxlDomainStartRestore(driver, vm, (flags & VIR_DOMAIN_SAVE_PAUSED) != 0, fd, hdr.version); - if (ret < 0 && !vm->persistent) + if (ret < 0 && !vm->persistent) { virDomainObjListRemove(driver->domains, vm); + virObjectLock(vm); + } libxlDomainObjEndJob(driver, vm); @@ -1995,7 +1999,7 @@ libxlDomainCoreDump(virDomainPtr dom, co cleanup: if (remove_dom && vm) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } virDomainObjEndAPI(&vm); if (event) @@ -2056,7 +2060,7 @@ libxlDomainManagedSave(virDomainPtr dom, cleanup: if (remove_dom && vm) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } virDomainObjEndAPI(&vm); VIR_FREE(name); @@ -2880,7 +2884,7 @@ libxlDomainUndefineFlags(virDomainPtr do vm->persistent = 0; } else { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } ret = 0; Index: libvirt-4.1.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.1.0/src/libxl/libxl_migration.c @@ -299,7 +299,7 @@ libxlDoMigrateReceive(void *opaque) cleanup: if (remove_dom) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } virDomainObjEndAPI(&vm); } @@ -1336,8 +1336,11 @@ libxlDomainMigrationFinish(virConnectPtr VIR_DOMAIN_SHUTOFF_FAILED); event = virDomainEventLifecycleNewFromObj(vm, VIR_DOMAIN_EVENT_STOPPED, VIR_DOMAIN_EVENT_STOPPED_FAILED); - if (!vm->persistent) + if (!vm->persistent) { virDomainObjListRemove(driver->domains, vm); + /* Caller passed a locked vm and expects the same on return */ + virObjectLock(vm); + } } if (event) ++++++ 4e6fcdb6-libxl-libxlDomObjFromDomain-cleanup.patch ++++++ commit 4e6fcdb6fa838d57a278dacd21bc6932edabec67 Author: John Ferlan <jfer...@redhat.com> Date: Fri Mar 9 11:47:59 2018 -0500 libxl: Properly cleanup after libxlDomObjFromDomain Commit id '9ac945078' altered libxlDomObjFromDomain to return a locked *and* ref counted object for some specific purposes; however, it neglected to alter all the consumers of the helper to use virDomainObjEndAPI thus leaving many objects with extra ref counts. Signed-off-by: John Ferlan <jfer...@redhat.com> Reviewed-by: Jim Fehlig <jfeh...@suse.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -1322,8 +1322,7 @@ libxlDomainShutdownFlags(virDomainPtr do } cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -1373,8 +1372,7 @@ libxlDomainReboot(virDomainPtr dom, unsi } cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -1459,8 +1457,7 @@ libxlDomainGetOSType(virDomainPtr dom) goto cleanup; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return type; } @@ -1479,8 +1476,7 @@ libxlDomainGetMaxMemory(virDomainPtr dom ret = virDomainDefGetMemoryTotal(vm->def); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -1658,8 +1654,7 @@ libxlDomainGetInfo(virDomainPtr dom, vir ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -1685,8 +1680,7 @@ libxlDomainGetState(virDomainPtr dom, ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -2110,8 +2104,7 @@ libxlDomainHasManagedSaveImage(virDomain ret = vm->hasManagedSave; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -2140,8 +2133,7 @@ libxlDomainManagedSaveRemove(virDomainPt cleanup: VIR_FREE(name); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -2352,8 +2344,7 @@ libxlDomainGetVcpusFlags(virDomainPtr do ret = virDomainDefGetVcpus(def); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -2484,8 +2475,7 @@ libxlDomainGetVcpuPinInfo(virDomainPtr d libxl_get_max_cpus(cfg->ctx), NULL); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -2548,8 +2538,7 @@ libxlDomainGetVcpus(virDomainPtr dom, vi ret = maxinfo; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -2580,8 +2569,7 @@ libxlDomainGetXMLDesc(virDomainPtr dom, virDomainDefFormatConvertXMLFlags(flags)); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -2901,8 +2889,7 @@ libxlDomainUndefineFlags(virDomainPtr do cleanup: VIR_FREE(name); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); if (event) libxlDomainEventQueue(driver, event); virObjectUnref(cfg); @@ -4261,8 +4248,7 @@ libxlDomainUpdateDeviceFlags(virDomainPt cleanup: virDomainDefFree(vmdef); virDomainDeviceDefFree(dev); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -4394,8 +4380,7 @@ libxlDomainGetAutostart(virDomainPtr dom ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -4521,8 +4506,7 @@ libxlDomainGetSchedulerType(virDomainPtr ignore_value(VIR_STRDUP(ret, name)); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -4587,8 +4571,7 @@ libxlDomainGetSchedulerParametersFlags(v ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -4750,8 +4733,7 @@ libxlDomainOpenConsole(virDomainPtr dom, } cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -4886,8 +4868,7 @@ libxlDomainGetNumaParameters(virDomainPt VIR_FREE(nodeset); virBitmapFree(nodes); libxl_bitmap_dispose(&nodemap); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } @@ -4908,8 +4889,7 @@ libxlDomainIsActive(virDomainPtr dom) ret = virDomainObjIsActive(obj); cleanup: - if (obj) - virObjectUnlock(obj); + virDomainObjEndAPI(&obj); return ret; } @@ -4928,8 +4908,7 @@ libxlDomainIsPersistent(virDomainPtr dom ret = obj->persistent; cleanup: - if (obj) - virObjectUnlock(obj); + virDomainObjEndAPI(&obj); return ret; } @@ -4948,8 +4927,7 @@ libxlDomainIsUpdated(virDomainPtr dom) ret = vm->updated; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -5107,8 +5085,7 @@ libxlDomainGetCPUStats(virDomainPtr dom, start_cpu, ncpus); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -5211,8 +5188,7 @@ libxlDomainGetJobInfo(virDomainPtr dom, ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } @@ -5263,8 +5239,7 @@ libxlDomainGetJobStats(virDomainPtr dom, ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } ++++++ 594b8b99-libxl-DefineXMLFlags-API-pattern.patch ++++++ commit 594b8b996c83724d6b1c73641daf277307afe5f7 Author: Jim Fehlig <jfeh...@suse.com> Date: Fri Mar 16 15:29:48 2018 -0600 libxl: convert DefineXMLFlags to use begin/end API pattern Similar to other uses of virDomainObjListAdd, on success add a ref to the virDomainObj so that virDomainObjEndAPI can be called as usual. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -2794,6 +2794,7 @@ libxlDomainDefineXMLFlags(virConnectPtr &oldDef))) goto cleanup; + virObjectRef(vm); def = NULL; vm->persistent = 1; @@ -2801,7 +2802,7 @@ libxlDomainDefineXMLFlags(virConnectPtr cfg->caps, vm->newDef ? vm->newDef : vm->def) < 0) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); goto cleanup; } @@ -2815,8 +2816,7 @@ libxlDomainDefineXMLFlags(virConnectPtr cleanup: virDomainDefFree(def); virDomainDefFree(oldDef); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); if (event) libxlDomainEventQueue(driver, event); virObjectUnref(cfg); ++++++ 60b3fcd9-libxl-MigratePrepare.patch ++++++ commit 60b3fcd90cbd83e5721484d72414dfee1706dab8 Author: Jim Fehlig <jfeh...@suse.com> Date: Tue Mar 13 10:48:28 2018 -0600 libxl: MigratePrepare: use standard begin and end API pattern libxlDomainMigrationPrepare adds the incoming domain def to the list of domains via virDomainObjListAdd, but never adds its own ref to the returned virDomainObj as other callers of virDomainObjListAdd do. libxlDomainMigrationPrepareTunnel3 suffers the same discrepancy. Change both to add a ref to the virDomainObj after a successful virDomainObjListAdd, similar to other callers. This ensures a consistent pattern throughout the drivers and allows using the virDomainObjEndAPI function for cleanup. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.1.0/src/libxl/libxl_migration.c @@ -583,6 +583,7 @@ libxlDomainMigrationPrepareTunnel3(virCo NULL))) goto error; + virObjectRef(vm); *def = NULL; priv = vm->privateData; @@ -635,13 +636,11 @@ libxlDomainMigrationPrepareTunnel3(virCo /* Remove virDomainObj from domain list */ if (vm) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } done: - if (vm) - virObjectUnlock(vm); - + virDomainObjEndAPI(&vm); return ret; } @@ -683,6 +682,7 @@ libxlDomainMigrationPrepare(virConnectPt NULL))) goto error; + virObjectRef(vm); *def = NULL; priv = vm->privateData; @@ -810,7 +810,7 @@ libxlDomainMigrationPrepare(virConnectPt /* Remove virDomainObj from domain list */ if (vm) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + virObjectLock(vm); } done: @@ -820,8 +820,7 @@ libxlDomainMigrationPrepare(virConnectPt VIR_FREE(hostname); else virURIFree(uri); - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); virObjectUnref(cfg); return ret; } ++++++ 64370c4b-libxl-MigrateBegin.patch ++++++ commit 64370c4b81f04ca73c195854966c6740e01483f2 Author: Jim Fehlig <jfeh...@suse.com> Date: Mon Mar 12 11:51:43 2018 -0600 libxl: MigrateBegin: Dont call EndAPI in helper function The libxlDomainMigrateBegin3Params API locks and ref counts the associated virDomainObj but relies on the helper function libxlDomainMigrationBegin to unref/unlock the object. libxlDomainMigrationBegin is also used by libxlDomainMigratePerform3Params for p2p migration, but in that case the lock/ref and unref/unlock are properly handled in the API entry point. So p2p migrations suffer a double unref/unlock in the Perform API. Remove the unref/unlock (virDomainObjEndAPI) from libxlDomainMigrationBegin and adjust libxlDomainMigrateBegin3Params to properly unref/unlock the virDomainObj on success and error paths. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -5876,6 +5876,7 @@ libxlDomainMigrateBegin3Params(virDomain { const char *xmlin = NULL; virDomainObjPtr vm = NULL; + char *xmlout = NULL; #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME virReportUnsupportedError(); @@ -5895,25 +5896,26 @@ libxlDomainMigrateBegin3Params(virDomain return NULL; if (STREQ_NULLABLE(vm->def->name, "Domain-0")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("Domain-0 cannot be migrated")); - return NULL; + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("Domain-0 cannot be migrated")); + goto cleanup; } - if (virDomainMigrateBegin3ParamsEnsureACL(domain->conn, vm->def) < 0) { - virObjectUnlock(vm); - return NULL; - } + if (virDomainMigrateBegin3ParamsEnsureACL(domain->conn, vm->def) < 0) + goto cleanup; if (!virDomainObjIsActive(vm)) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", _("domain is not running")); - virObjectUnlock(vm); - return NULL; + goto cleanup; } - return libxlDomainMigrationBegin(domain->conn, vm, xmlin, - cookieout, cookieoutlen); + xmlout = libxlDomainMigrationBegin(domain->conn, vm, xmlin, + cookieout, cookieoutlen); + + cleanup: + virDomainObjEndAPI(&vm); + return xmlout; } static int Index: libvirt-4.1.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.1.0/src/libxl/libxl_migration.c @@ -443,7 +443,6 @@ libxlDomainMigrationBegin(virConnectPtr cleanup: libxlMigrationCookieFree(mig); - virDomainObjEndAPI(&vm); virDomainDefFree(tmpdef); virObjectUnref(cfg); return xml; ++++++ 83edaf44-libxl-dont-hardcode-sched-weight.patch ++++++ commit 83edaf4435f9c2d1fa5afd1dfbb1643b4f564fd1 Author: Jim Fehlig <jfeh...@suse.com> Date: Thu Feb 22 11:52:56 2018 -0700 libxl: don't hardcode scheduler weight Long ago in commit dfa1e1dd53 the scheduler weight was accidentally hardcoded to 1000. Weight is a setting with no unit since it is relative to the weight of other domains. If no weight is specified, libxl defaults to 256. Instead of hardcoding the weight to 1000, honor any <shares> specified in <cputune>. libvirt's notion of shares is synonomous to libxl's scheduler weight setting. If shares is unspecified, defer default weight setting to libxl. Removing the hardcoded weight required some test fixup. While at it, add an explicit test for <shares> conversion to scheduler weight. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_conf.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_conf.c +++ libvirt-4.1.0/src/libxl/libxl_conf.c @@ -366,7 +366,9 @@ libxlMakeDomBuildInfo(virDomainDefPtr de } } - b_info->sched_params.weight = 1000; + if (def->cputune.sharesSpecified) + b_info->sched_params.weight = def->cputune.shares; + /* Xen requires the memory sizes to be rounded to 1MiB increments */ virDomainDefSetMemoryTotal(def, VIR_ROUND_UP(virDomainDefGetMemoryInitial(def), 1024)); Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/basic-hvm.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/basic-hvm.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/basic-hvm.json @@ -19,7 +19,7 @@ "device_model_version": "qemu_xen", "device_model": "/bin/true", "sched_params": { - "weight": 1000 + }, "type.hvm": { "pae": "True", Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/basic-pv.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/basic-pv.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/basic-pv.json @@ -15,7 +15,7 @@ "max_memkb": 524288, "target_memkb": 524288, "sched_params": { - "weight": 1000 + }, "type.pv": { "bootloader": "pygrub" Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/cpu-shares-hvm.json =================================================================== --- /dev/null +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/cpu-shares-hvm.json @@ -0,0 +1,89 @@ +{ + "c_info": { + "type": "hvm", + "name": "test-hvm", + "uuid": "2147d599-9cc6-c0dc-92ab-4064b5446e9b" + }, + "b_info": { + "max_vcpus": 4, + "avail_vcpus": [ + 0, + 1, + 2, + 3 + ], + "max_memkb": 1048576, + "target_memkb": 1048576, + "video_memkb": 8192, + "shadow_memkb": 12288, + "device_model_version": "qemu_xen", + "device_model": "/bin/true", + "sched_params": { + "weight": 1500 + }, + "type.hvm": { + "pae": "True", + "apic": "True", + "acpi": "True", + "vga": { + "kind": "cirrus" + }, + "vnc": { + "enable": "True", + "listen": "0.0.0.0", + "findunused": "False" + }, + "sdl": { + "enable": "False" + }, + "spice": { + + }, + "boot": "c", + "rdm": { + + } + }, + "arch_arm": { + + } + }, + "disks": [ + { + "pdev_path": "/var/lib/xen/images/test-hvm.img", + "vdev": "hda", + "backend": "qdisk", + "format": "raw", + "removable": 1, + "readwrite": 1 + } + ], + "nics": [ + { + "devid": 0, + "mac": "00:16:3e:66:12:b4", + "bridge": "br0", + "script": "/etc/xen/scripts/vif-bridge", + "nictype": "vif_ioemu" + } + ], + "vfbs": [ + { + "devid": -1, + "vnc": { + "enable": "True", + "listen": "0.0.0.0", + "findunused": "False" + }, + "sdl": { + "enable": "False" + } + } + ], + "vkbs": [ + { + "devid": -1 + } + ], + "on_reboot": "restart" +} Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/cpu-shares-hvm.xml =================================================================== --- /dev/null +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/cpu-shares-hvm.xml @@ -0,0 +1,39 @@ +<domain type='xen'> + <name>test-hvm</name> + <description>None</description> + <uuid>2147d599-9cc6-c0dc-92ab-4064b5446e9b</uuid> + <memory>1048576</memory> + <currentMemory>1048576</currentMemory> + <vcpu>4</vcpu> + <cputune> + <shares>1500</shares> + </cputune> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <clock offset='utc'/> + <os> + <type>hvm</type> + <loader>/usr/lib/xen/boot/hvmloader</loader> + <boot dev='hd'/> + </os> + <features> + <apic/> + <acpi/> + <pae/> + </features> + <devices> + <emulator>/bin/true</emulator> + <disk type='file' device='disk'> + <driver name='qemu'/> + <source file='/var/lib/xen/images/test-hvm.img'/> + <target dev='hda'/> + </disk> + <interface type='bridge'> + <source bridge='br0'/> + <mac address='00:16:3e:66:12:b4'/> + <script path='/etc/xen/scripts/vif-bridge'/> + </interface> + <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0'/> + </devices> +</domain> Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/moredevs-hvm.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/moredevs-hvm.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/moredevs-hvm.json @@ -21,7 +21,7 @@ "device_model_version": "qemu_xen", "device_model": "/bin/true", "sched_params": { - "weight": 1000 + }, "type.hvm": { "pae": "True", Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/multiple-ip.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/multiple-ip.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/multiple-ip.json @@ -15,7 +15,7 @@ "max_memkb": 524288, "target_memkb": 524288, "sched_params": { - "weight": 1000 + }, "type.pv": { "bootloader": "pygrub" Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/variable-clock-hvm.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/variable-clock-hvm.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/variable-clock-hvm.json @@ -21,7 +21,7 @@ "device_model_version": "qemu_xen", "device_model": "/bin/true", "sched_params": { - "weight": 1000 + }, "type.hvm": { "pae": "True", Index: libvirt-4.1.0/tests/libxlxml2domconfigdata/vnuma-hvm.json =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigdata/vnuma-hvm.json +++ libvirt-4.1.0/tests/libxlxml2domconfigdata/vnuma-hvm.json @@ -107,7 +107,7 @@ "device_model_version": "qemu_xen", "device_model": "/bin/true", "sched_params": { - "weight": 1000 + }, "type.hvm": { "pae": "True", Index: libvirt-4.1.0/tests/libxlxml2domconfigtest.c =================================================================== --- libvirt-4.1.0.orig/tests/libxlxml2domconfigtest.c +++ libvirt-4.1.0/tests/libxlxml2domconfigtest.c @@ -192,6 +192,7 @@ mymain(void) DO_TEST("basic-pv"); DO_TEST("basic-hvm"); + DO_TEST("cpu-shares-hvm"); DO_TEST("variable-clock-hvm"); DO_TEST("moredevs-hvm"); DO_TEST("vnuma-hvm"); ++++++ 99486799-libxl-MigrateConfirm.patch ++++++ commit 99486799c3f911caa009d64889fc05ec3b07f986 Author: Jim Fehlig <jfeh...@suse.com> Date: Mon Mar 12 12:22:34 2018 -0600 libxl: MigrateConfirm: Dont unlock virDomainObj in helper function The libxlDomainMigrateConfirm3Params API locks and ref counts the associated virDomainObj but relies on the helper function libxlDomainMigrationConfirm to unlock the object. Unref'ing the object is not done in either function. libxlDomainMigrationConfirm is also used by libxlDomainMigratePerform3Params for p2p migration, but in that case the lock/ref and unref/unlock are properly handled in the API entry point. Remove the unlock from libxlDomainMigrationConfirm and adjust libxlDomainMigrateConfirm3Params to properly unref/unlock the virDomainObj on success and error paths. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -6161,6 +6161,7 @@ libxlDomainMigrateConfirm3Params(virDoma { libxlDriverPrivatePtr driver = domain->conn->privateData; virDomainObjPtr vm = NULL; + int ret = -1; #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME virReportUnsupportedError(); @@ -6174,12 +6175,14 @@ libxlDomainMigrateConfirm3Params(virDoma if (!(vm = libxlDomObjFromDomain(domain))) return -1; - if (virDomainMigrateConfirm3ParamsEnsureACL(domain->conn, vm->def) < 0) { - virObjectUnlock(vm); - return -1; - } + if (virDomainMigrateConfirm3ParamsEnsureACL(domain->conn, vm->def) < 0) + goto cleanup; + + ret = libxlDomainMigrationConfirm(driver, vm, flags, cancelled); - return libxlDomainMigrationConfirm(driver, vm, flags, cancelled); + cleanup: + virDomainObjEndAPI(&vm); + return ret; } static int libxlNodeGetSecurityModel(virConnectPtr conn, Index: libvirt-4.1.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.1.0/src/libxl/libxl_migration.c @@ -1392,7 +1392,8 @@ libxlDomainMigrationConfirm(libxlDriverP if (!vm->persistent || (flags & VIR_MIGRATE_UNDEFINE_SOURCE)) { virDomainObjListRemove(driver->domains, vm); - vm = NULL; + /* Caller passed a locked vm and expects the same on return */ + virObjectLock(vm); } ret = 0; @@ -1400,8 +1401,6 @@ libxlDomainMigrationConfirm(libxlDriverP cleanup: if (event) libxlDomainEventQueue(driver, event); - if (vm) - virObjectUnlock(vm); virObjectUnref(cfg); return ret; } ++++++ c66e344e-libxl-dont-deref-NULL.patch ++++++ commit c66e344e38269227c93e598f599108a65b066fc0 Author: Jim Fehlig <jfeh...@suse.com> Date: Fri Mar 16 15:00:17 2018 -0600 libxl: dont dereference NULL libxlDomainObjPrivatePtr In libxlDomainMigrationPrepare it is possible to dereference a NULL libxlDomainObjPrivatePtr in early error paths. Check for a valid 'priv' before using it. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_migration.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_migration.c +++ libvirt-4.1.0/src/libxl/libxl_migration.c @@ -804,8 +804,10 @@ libxlDomainMigrationPrepare(virConnectPt } VIR_FREE(socks); virObjectUnref(args); - virPortAllocatorRelease(priv->migrationPort); - priv->migrationPort = 0; + if (priv) { + virPortAllocatorRelease(priv->migrationPort); + priv->migrationPort = 0; + } /* Remove virDomainObj from domain list */ if (vm) { ++++++ f5eacf2a-libxl-MigratePerform.patch ++++++ commit f5eacf2a9ad2b7ba07dd0fc745c098cd2d26b6ee Author: Jim Fehlig <jfeh...@suse.com> Date: Tue Mar 13 11:05:36 2018 -0600 libxl: MigratePerform: properly cleanup after libxlDomObjFromDomain libxlDomObjFromDomain to returns locked and ref counted virDomainObj but libxlDomainMigratePerform3Params only unlocks the object on exit. Convert it to use the virDomainObjEndAPI function for cleanup. Signed-off-by: Jim Fehlig <jfeh...@suse.com> Reviewed-by: John Ferlan <jfer...@redhat.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -6086,8 +6086,7 @@ libxlDomainMigratePerform3Params(virDoma ret = 0; cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return ret; } ++++++ fe51dbda-libxl-use-FindByRef.patch ++++++ commit fe51dbda56b5e51e17b238210a19e3c9887a3f15 Author: John Ferlan <jfer...@redhat.com> Date: Fri Mar 9 11:48:00 2018 -0500 libxl: Use virDomainObjListFindBy{UUID|ID}Ref For libxlDomainLookupByID and libxlDomainLookupByUUID let's return a locked and referenced @vm object so that callers can then use the common and more consistent virDomainObjEndAPI in order to handle cleanup rather than needing to know that the returned object is locked and calling virObjectUnlock. The LookupByName already returns the ref counted and locked object, so this will make things more consistent. Signed-off-by: John Ferlan <jfer...@redhat.com> Reviewed-by: Jim Fehlig <jfeh...@suse.com> Index: libvirt-4.1.0/src/libxl/libxl_driver.c =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c @@ -1090,7 +1090,7 @@ libxlDomainLookupByID(virConnectPtr conn virDomainObjPtr vm; virDomainPtr dom = NULL; - vm = virDomainObjListFindByID(driver->domains, id); + vm = virDomainObjListFindByIDRef(driver->domains, id); if (!vm) { virReportError(VIR_ERR_NO_DOMAIN, NULL); goto cleanup; @@ -1102,8 +1102,7 @@ libxlDomainLookupByID(virConnectPtr conn dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return dom; } @@ -1114,7 +1113,7 @@ libxlDomainLookupByUUID(virConnectPtr co virDomainObjPtr vm; virDomainPtr dom = NULL; - vm = virDomainObjListFindByUUID(driver->domains, uuid); + vm = virDomainObjListFindByUUIDRef(driver->domains, uuid); if (!vm) { virReportError(VIR_ERR_NO_DOMAIN, NULL); goto cleanup; @@ -1126,8 +1125,7 @@ libxlDomainLookupByUUID(virConnectPtr co dom = virGetDomain(conn, vm->def->name, vm->def->uuid, vm->def->id); cleanup: - if (vm) - virObjectUnlock(vm); + virDomainObjEndAPI(&vm); return dom; } ++++++ libxl-dom-reset.patch ++++++ --- /var/tmp/diff_new_pack.0YQbK5/_old 2018-03-24 16:08:42.749918886 +0100 +++ /var/tmp/diff_new_pack.0YQbK5/_new 2018-03-24 16:08:42.749918886 +0100 @@ -12,7 +12,7 @@ =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c -@@ -1380,6 +1380,61 @@ libxlDomainReboot(virDomainPtr dom, unsi +@@ -1375,6 +1375,61 @@ libxlDomainReboot(virDomainPtr dom, unsi } static int @@ -74,7 +74,7 @@ libxlDomainDestroyFlags(virDomainPtr dom, unsigned int flags) { -@@ -6496,6 +6551,7 @@ static virHypervisorDriver libxlHypervis +@@ -6476,6 +6531,7 @@ static virHypervisorDriver libxlHypervis .domainShutdown = libxlDomainShutdown, /* 0.9.0 */ .domainShutdownFlags = libxlDomainShutdownFlags, /* 0.9.10 */ .domainReboot = libxlDomainReboot, /* 0.9.0 */ ++++++ libxl-set-cach-mode.patch ++++++ --- /var/tmp/diff_new_pack.0YQbK5/_old 2018-03-24 16:08:42.773918021 +0100 +++ /var/tmp/diff_new_pack.0YQbK5/_new 2018-03-24 16:08:42.777917877 +0100 @@ -7,7 +7,7 @@ =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_conf.c +++ libvirt-4.1.0/src/libxl/libxl_conf.c -@@ -769,6 +769,30 @@ libxlDiskSetDiscard(libxl_device_disk *x +@@ -771,6 +771,30 @@ libxlDiskSetDiscard(libxl_device_disk *x #endif } @@ -38,7 +38,7 @@ static char * libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src, const char *username, -@@ -1017,6 +1041,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -1019,6 +1043,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk x_disk->is_cdrom = l_disk->device == VIR_DOMAIN_DISK_DEVICE_CDROM ? 1 : 0; if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) return -1; ++++++ libxl-set-migration-constraints.patch ++++++ --- /var/tmp/diff_new_pack.0YQbK5/_old 2018-03-24 16:08:42.785917589 +0100 +++ /var/tmp/diff_new_pack.0YQbK5/_new 2018-03-24 16:08:42.785917589 +0100 @@ -56,7 +56,7 @@ =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_driver.c +++ libvirt-4.1.0/src/libxl/libxl_driver.c -@@ -6098,6 +6098,9 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6076,6 +6076,9 @@ libxlDomainMigratePerform3Params(virDoma const char *dname = NULL; const char *uri = NULL; int ret = -1; @@ -66,7 +66,7 @@ #ifdef LIBXL_HAVE_NO_SUSPEND_RESUME virReportUnsupportedError(); -@@ -6114,6 +6117,18 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6092,6 +6095,18 @@ libxlDomainMigratePerform3Params(virDoma virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_DEST_NAME, &dname) < 0 || @@ -85,7 +85,7 @@ virTypedParamsGetString(params, nparams, VIR_MIGRATE_PARAM_URI, &uri) < 0) -@@ -6128,11 +6143,11 @@ libxlDomainMigratePerform3Params(virDoma +@@ -6106,11 +6121,11 @@ libxlDomainMigratePerform3Params(virDoma if ((flags & (VIR_MIGRATE_TUNNELLED | VIR_MIGRATE_PEER2PEER))) { if (libxlDomainMigrationPerformP2P(driver, vm, dom->conn, dom_xml, ++++++ libxl-support-block-script.patch ++++++ --- /var/tmp/diff_new_pack.0YQbK5/_old 2018-03-24 16:08:42.801917012 +0100 +++ /var/tmp/diff_new_pack.0YQbK5/_new 2018-03-24 16:08:42.805916868 +0100 @@ -11,7 +11,7 @@ =================================================================== --- libvirt-4.1.0.orig/src/libxl/libxl_conf.c +++ libvirt-4.1.0/src/libxl/libxl_conf.c -@@ -769,6 +769,25 @@ libxlDiskSetDiscard(libxl_device_disk *x +@@ -771,6 +771,25 @@ libxlDiskSetDiscard(libxl_device_disk *x #endif } @@ -37,7 +37,7 @@ static void libxlDiskSetCacheMode(libxl_device_disk *x_disk, int cachemode) { -@@ -914,6 +933,7 @@ libxlMakeNetworkDiskSrc(virStorageSource +@@ -916,6 +935,7 @@ libxlMakeNetworkDiskSrc(virStorageSource int libxlMakeDisk(virDomainDiskDefPtr l_disk, libxl_device_disk *x_disk) { @@ -45,7 +45,7 @@ const char *driver = virDomainDiskGetDriver(l_disk); int format = virDomainDiskGetFormat(l_disk); int actual_type = virStorageSourceGetActualType(l_disk->src); -@@ -929,7 +949,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -931,7 +951,7 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk if (libxlMakeNetworkDiskSrc(l_disk->src, &x_disk->pdev_path) < 0) return -1; } else { @@ -54,7 +54,7 @@ return -1; } -@@ -1042,6 +1062,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk +@@ -1044,6 +1064,9 @@ libxlMakeDisk(virDomainDiskDefPtr l_disk if (libxlDiskSetDiscard(x_disk, l_disk->discard) < 0) return -1; libxlDiskSetCacheMode(x_disk, l_disk->cachemode);