--- 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 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list