On 12/20/2011 01:35 AM, Hu Tao wrote:
static int
+qemuDomainSetNumaParameters(virDomainPtr dom,
+ virTypedParameterPtr params,
+ int nparams,
+ unsigned int flags)
+{
+ if (STREQ(param->field, VIR_DOMAIN_NUMA_MODE)) {
+ if (param->type != VIR_TYPED_PARAM_INT) {
+ qemuReportError(VIR_ERR_INVALID_ARG, "%s",
+ _("invalid type for numa strict tunable, "
+ "expected an 'int'"));
+ ret = -1;
+ continue;
+ }
+
+ if (flags & VIR_DOMAIN_AFFECT_LIVE) {
+ qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
+ _("can't change numa mode for running
domain"));
+ ret = -1;
+ goto cleanup;
+ }
One minor tweak - we should allow the user to re-specify the mode that
is already present.
+static int
+qemuDomainGetNumaParameters(virDomainPtr dom,
+ virTypedParameterPtr params,
+ int *nparams,
+ unsigned int flags)
+{
+ struct qemud_driver *driver = dom->conn->privateData;
+ int i;
+ virCgroupPtr group = NULL;
+ virDomainObjPtr vm = NULL;
+ virDomainDefPtr persistentDef = NULL;
+ char *nodeset = NULL;
+ int ret = -1;
+ int rc;
+
+ virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
+ VIR_DOMAIN_AFFECT_CONFIG |
+ VIR_TYPED_PARAM_STRING_OKAY, -1);
+
+ qemuDriverLock(driver);
+
+ /* We blindly return a string, and let libvirt.c and
+ * remote_driver.c do the filtering on behalf of older clients
+ * that can't parse it. */
+ flags &= ~VIR_TYPED_PARAM_STRING_OKAY;
I just realized this comment is not technically necessary - since the
new numa parameters API itself post-dates the addition of
VIR_TYPED_PARAM_STRING_OKAY, there is no older client that can't handle
the return of a string. But I'm keeping it unchanged, as it is
consistent with the blkiotune where the comment is indeed valid.
diff --git i/src/qemu/qemu_driver.c w/src/qemu/qemu_driver.c
index bb03c5c..176a324 100644
--- i/src/qemu/qemu_driver.c
+++ w/src/qemu/qemu_driver.c
@@ -6661,7 +6661,8 @@ qemuDomainSetNumaParameters(virDomainPtr dom,
continue;
}
- if (flags & VIR_DOMAIN_AFFECT_LIVE) {
+ if ((flags & VIR_DOMAIN_AFFECT_LIVE) &&
+ vm->def->numatune.memory.mode != params[i].value.i) {
qemuReportError(VIR_ERR_OPERATION_INVALID, "%s",
_("can't change numa mode for running
domain"));
ret = -1;
--
Eric Blake eblake(a)redhat.com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org