[libvirt] [PATCH 6/8] Add domainGetSchedulerType to libxl driver

Markus Groß gross at univention.de
Mon Mar 21 09:35:55 UTC 2011


---
 src/libxl/libxl_driver.c |   64 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 63 insertions(+), 1 deletions(-)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index b05cd77..c72a570 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -55,6 +55,11 @@
 
 #define LIBXL_CONFIG_FORMAT_XM "xen-xm"
 
+/* Number of Xen scheduler parameters */
+#define XEN_SCHED_SEDF_NPARAM     5
+#define XEN_SCHED_CREDIT_NPARAM   2
+#define XEN_SCHED_CREDIT2_NPARAM  1
+
 static libxlDriverPrivatePtr libxl_driver = NULL;
 
 
@@ -1918,6 +1923,63 @@ libxlDomainEventDeregister(virConnectPtr conn,
     return ret;
 }
 
+static char *
+libxlDomainGetSchedulerType(virDomainPtr dom, int *nparams)
+{
+    libxlDriverPrivatePtr driver = dom->conn->privateData;
+    libxlDomainObjPrivatePtr priv;
+    virDomainObjPtr vm;
+    char * ret = NULL;
+    int sched_id;
+
+    libxlDriverLock(driver);
+    vm = virDomainFindByUUID(&driver->domains, dom->uuid);
+    libxlDriverUnlock(driver);
+
+    if (!vm) {
+        libxlError(VIR_ERR_NO_DOMAIN, "%s", _("no domain with matching uuid"));
+        goto cleanup;
+    }
+
+    priv = vm->privateData;
+    if ((sched_id = libxl_get_sched_id(&priv->ctx)) < 0) {
+        libxlError(VIR_ERR_INTERNAL_ERROR,
+                   _("Failed to get scheduler id for domain '%d'"
+                     " with libxenlight"), dom->id);
+        goto cleanup;
+    }
+
+    switch(sched_id) {
+    case XEN_SCHEDULER_SEDF:
+        ret = strdup("sedf");
+        *nparams = XEN_SCHED_SEDF_NPARAM;
+        break;
+    case XEN_SCHEDULER_CREDIT:
+        ret = strdup("credit");
+        *nparams = XEN_SCHED_CREDIT_NPARAM;
+        break;
+    case XEN_SCHEDULER_CREDIT2:
+        ret = strdup("credit2");
+        *nparams = XEN_SCHED_CREDIT2_NPARAM;
+        break;
+    case XEN_SCHEDULER_ARINC653:
+        ret = strdup("arinc653");
+        *nparams = 0;
+        break;
+    default:
+        *nparams = 0;
+        goto cleanup;
+    }
+
+    if (!ret)
+        virReportOOMError();
+
+cleanup:
+    if (vm)
+        virDomainObjUnlock(vm);
+    return ret;
+}
+
 static unsigned long long
 libxlNodeGetFreeMemory(virConnectPtr conn)
 {
@@ -2083,7 +2145,7 @@ static virDriver libxlDriver = {
     NULL,                       /* domainUpdateDeviceFlags */
     NULL,                       /* domainGetAutostart */
     NULL,                       /* domainSetAutostart */
-    NULL,                       /* domainGetSchedulerType */
+    libxlDomainGetSchedulerType,/* domainGetSchedulerType */
     NULL,                       /* domainGetSchedulerParameters */
     NULL,                       /* domainSetSchedulerParameters */
     NULL,                       /* domainMigratePrepare */
-- 
1.7.4.1




More information about the libvir-list mailing list