Markus Groß wrote:
---
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
I assume the similar definition in xend_internal.c is wrong since it is
counting the domid as well. Is that correct? If so, we should fix it
in xend_internal.c.
+#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;
Hmm, seems these last two should be added to the xen-unified driver as
well - but that obviously doesn't affect this patch.
ACK, depending on the answer to my question above.
Regards,
Jim
+ 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 */