[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



---
 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 7d83975..1a70f79 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -55,6 +55,9 @@
 
 #define LIBXL_CONFIG_FORMAT_XM "xen-xm"
 
+/* Number of Xen scheduler parameters */
+#define XEN_SCHED_CREDIT_NPARAM   2
+
 static libxlDriverPrivatePtr libxl_driver = NULL;
 
 
@@ -1954,6 +1957,65 @@ 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;
+    }
+
+    if (!virDomainObjIsActive(vm)) {
+        libxlError(VIR_ERR_OPERATION_INVALID, "%s", _("Domain is not running"));
+        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;
+    }
+
+    *nparams = 0;
+    switch(sched_id) {
+    case XEN_SCHEDULER_SEDF:
+        ret = strdup("sedf");
+        break;
+    case XEN_SCHEDULER_CREDIT:
+        ret = strdup("credit");
+        *nparams = XEN_SCHED_CREDIT_NPARAM;
+        break;
+    case XEN_SCHEDULER_CREDIT2:
+        ret = strdup("credit2");
+        break;
+    case XEN_SCHEDULER_ARINC653:
+        ret = strdup("arinc653");
+        break;
+    default:
+        goto cleanup;
+    }
+
+    if (!ret)
+        virReportOOMError();
+
+cleanup:
+    if (vm)
+        virDomainObjUnlock(vm);
+    return ret;
+}
+
 static int
 libxlDomainIsActive(virDomainPtr dom)
 {
@@ -2099,7 +2161,7 @@ static virDriver libxlDriver = {
     NULL,                       /* domainUpdateDeviceFlags */
     NULL,                       /* domainGetAutostart */
     NULL,                       /* domainSetAutostart */
-    NULL,                       /* domainGetSchedulerType */
+    libxlDomainGetSchedulerType,/* domainGetSchedulerType */
     NULL,                       /* domainGetSchedulerParameters */
     NULL,                       /* domainSetSchedulerParameters */
     NULL,                       /* domainMigratePrepare */
-- 
1.7.4.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]