[Libvirt-cim] [PATCH 6 of 6] Make ComputerSystem::RequestStateChange() set scheduling parameters at start

Dan Smith danms at us.ibm.com
Mon Jun 23 19:10:55 UTC 2008


# HG changeset patch
# User Dan Smith <danms at us.ibm.com>
# Date 1214248235 25200
# Node ID d2ad8dd8ccbdf66c416deb765d8b738e15dabc2e
# Parent  54d2e0f7e87e78a8a9e85765f0795300ec7190ce
Make ComputerSystem::RequestStateChange() set scheduling parameters at start

Currently, only do this for Xen domains.

Signed-off-by: Dan Smith <danms at us.ibm.com>

diff -r 54d2e0f7e87e -r d2ad8dd8ccbd src/Virt_ComputerSystem.c
--- a/src/Virt_ComputerSystem.c	Mon Jun 23 12:10:35 2008 -0700
+++ b/src/Virt_ComputerSystem.c	Mon Jun 23 12:10:35 2008 -0700
@@ -35,6 +35,7 @@
 #include "cs_util.h"
 #include <libcmpiutil/libcmpiutil.h>
 #include "misc_util.h"
+#include "infostore.h"
 #include "device_parsing.h"
 #include <libcmpiutil/std_invokemethod.h>
 #include <libcmpiutil/std_instance.h>
@@ -620,6 +621,40 @@
 DEFAULT_EQ();
 DEFAULT_INST_CLEANUP();
 
+static void set_scheduler_params(virDomainPtr dom)
+{
+        struct infostore_ctx *ctx;
+        virConnectPtr conn = NULL;
+        virSchedParameter params[] =
+                {{ "weight", VIR_DOMAIN_SCHED_FIELD_UINT },
+                 { "cap", VIR_DOMAIN_SCHED_FIELD_UINT },
+                };
+
+        conn = virDomainGetConnect(dom);
+        if (conn == NULL) {
+                CU_DEBUG("Unable to get connection from domain");
+                return;
+        }
+
+        if (!STREQC(virConnectGetType(conn), "xen")) {
+                CU_DEBUG("Not setting sched params for this domain type");
+                return;
+        }
+
+        ctx = infostore_open(dom);
+        if (ctx == NULL) {
+                CU_DEBUG("Unable to open infostore for domain");
+                return;
+        }
+
+        params[0].value.ui = infostore_get_u64(ctx, "weight");
+        params[1].value.ui = infostore_get_u64(ctx, "limit");
+
+        virDomainSetSchedulerParameters(dom, params, 2);
+
+        infostore_close(ctx);
+}
+
 /* This composite operation may be supported as a flag to reboot */
 static int domain_reset(virDomainPtr dom)
 {
@@ -643,6 +678,7 @@
         case VIR_DOMAIN_SHUTOFF:
                 CU_DEBUG("Start domain");
                 ret = virDomainCreate(dom);
+                set_scheduler_params(dom);
                 break;
         case VIR_DOMAIN_PAUSED:
                 CU_DEBUG("Unpause domain");




More information about the Libvirt-cim mailing list