Well, the remaining drivers that already had the get/set
scheduler parameter functionality to begin with.
For now, this blindly treats VIR_DOMAIN_SCHEDINFO_CURRENT as
the only supported operation for these 5 domains; it will
take domain-specific patches if more specific behavior is
preferred.
* src/esx/esx_driver.c (esxDomainGetSchedulerParameters)
(esxDomainSetSchedulerParameters): Move guts...
(esxDomainGetSchedulerParametersFlags)
(esxDomainSetSchedulerParametersFlags): ...to new functions.
* src/libxl/libxl_driver.c (libxlDomainGetSchedulerParameters)
(libxlDomainSetSchedulerParameters)
(libxlDomainGetSchedulerParametersFlags)
(libxlDomainSetSchedulerParametersFlags): Likewise.
* src/lxc/lxc_driver.c (lxcGetSchedulerParameters)
(lxcSetSchedulerParameters, lxcGetSchedulerParametersFlags)
(lxcSetSchedulerParametersFlags): Likewise.
* src/test/test_driver.c (testDomainGetSchedulerParams)
(testDomainSetSchedulerParams, testDomainGetSchedulerParamsFlags)
(testDomainSetSchedulerParamsFlags): Likewise.
* src/xen/xen_driver.c (xenUnifiedDomainGetSchedulerParameters)
(xenUnifiedDomainSetSchedulerParameters)
(xenUnifiedDomainGetSchedulerParametersFlags)
(xenUnifiedDomainSetSchedulerParametersFlags): Likewise.
---
src/esx/esx_driver.c | 28 ++++++++++++++++++++++++----
src/libxl/libxl_driver.c | 32 ++++++++++++++++++++++++++++----
src/lxc/lxc_driver.c | 34 +++++++++++++++++++++++++++++-----
src/test/test_driver.c | 37 +++++++++++++++++++++++++++++++------
src/xen/xen_driver.c | 36 ++++++++++++++++++++++++++++++++----
5 files changed, 144 insertions(+), 23 deletions(-)
diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
index bb9d60a..d2e96ec 100644
--- a/src/esx/esx_driver.c
+++ b/src/esx/esx_driver.c
@@ -3521,8 +3521,9 @@ esxDomainGetSchedulerType(virDomainPtr domain ATTRIBUTE_UNUSED, int
*nparams)
static int
-esxDomainGetSchedulerParameters(virDomainPtr domain,
- virSchedParameterPtr params, int *nparams)
+esxDomainGetSchedulerParametersFlags(virDomainPtr domain,
+ virSchedParameterPtr params, int *nparams,
+ unsigned int flags)
{
int result = -1;
esxPrivate *priv = domain->conn->privateData;
@@ -3533,6 +3534,8 @@ esxDomainGetSchedulerParameters(virDomainPtr domain,
unsigned int mask = 0;
int i = 0;
+ virCheckFlags(0, -1);
+
if (*nparams < 3) {
ESX_ERROR(VIR_ERR_INVALID_ARG, "%s",
_("Parameter array must have space for 3 items"));
@@ -3643,11 +3646,18 @@ esxDomainGetSchedulerParameters(virDomainPtr domain,
return result;
}
+static int
+esxDomainGetSchedulerParameters(virDomainPtr domain,
+ virSchedParameterPtr params, int *nparams)
+{
+ return esxDomainGetSchedulerParametersFlags(domain, params, nparams, 0);
+}
static int
-esxDomainSetSchedulerParameters(virDomainPtr domain,
- virSchedParameterPtr params, int nparams)
+esxDomainSetSchedulerParametersFlags(virDomainPtr domain,
+ virSchedParameterPtr params, int nparams,
+ unsigned int flags)
{
int result = -1;
esxPrivate *priv = domain->conn->privateData;
@@ -3659,6 +3669,8 @@ esxDomainSetSchedulerParameters(virDomainPtr domain,
char *taskInfoErrorMessage = NULL;
int i;
+ virCheckFlags(0, -1);
+
if (esxVI_EnsureSession(priv->primary) < 0) {
return -1;
}
@@ -3774,6 +3786,12 @@ esxDomainSetSchedulerParameters(virDomainPtr domain,
return result;
}
+static int
+esxDomainSetSchedulerParameters(virDomainPtr domain,
+ virSchedParameterPtr params, int nparams)
+{
+ return esxDomainSetSchedulerParametersFlags(domain, params, nparams, 0);
+}
static int
@@ -4673,7 +4691,9 @@ static virDriver esxDriver = {
.domainSetAutostart = esxDomainSetAutostart, /* 0.9.0 */
.domainGetSchedulerType = esxDomainGetSchedulerType, /* 0.7.0 */
.domainGetSchedulerParameters = esxDomainGetSchedulerParameters, /* 0.7.0 */
+ .domainGetSchedulerParametersFlags = esxDomainGetSchedulerParametersFlags, /* 0.9.2
*/
.domainSetSchedulerParameters = esxDomainSetSchedulerParameters, /* 0.7.0 */
+ .domainSetSchedulerParametersFlags = esxDomainSetSchedulerParametersFlags, /* 0.9.2
*/
.domainMigratePrepare = esxDomainMigratePrepare, /* 0.7.0 */
.domainMigratePerform = esxDomainMigratePerform, /* 0.7.0 */
.domainMigrateFinish = esxDomainMigrateFinish, /* 0.7.0 */
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 5cc9362..a433021 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -2425,8 +2425,10 @@ cleanup:
}
static int
-libxlDomainGetSchedulerParameters(virDomainPtr dom, virSchedParameterPtr params,
- int *nparams)
+libxlDomainGetSchedulerParametersFlags(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int *nparams,
+ unsigned int flags)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
libxlDomainObjPrivatePtr priv;
@@ -2435,6 +2437,8 @@ libxlDomainGetSchedulerParameters(virDomainPtr dom,
virSchedParameterPtr params,
int sched_id;
int ret = -1;
+ virCheckFlags(0, -1);
+
libxlDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
libxlDriverUnlock(driver);
@@ -2501,8 +2505,17 @@ cleanup:
}
static int
-libxlDomainSetSchedulerParameters(virDomainPtr dom, virSchedParameterPtr params,
- int nparams)
+libxlDomainGetSchedulerParameters(virDomainPtr dom, virSchedParameterPtr params,
+ int *nparams)
+{
+ return libxlDomainGetSchedulerParametersFlags(dom, params, nparams, 0);
+}
+
+static int
+libxlDomainSetSchedulerParametersFlags(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int nparams,
+ unsigned int flags)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
libxlDomainObjPrivatePtr priv;
@@ -2512,6 +2525,8 @@ libxlDomainSetSchedulerParameters(virDomainPtr dom,
virSchedParameterPtr params,
int i;
int ret = -1;
+ virCheckFlags(0, -1);
+
libxlDriverLock(driver);
vm = virDomainFindByUUID(&driver->domains, dom->uuid);
libxlDriverUnlock(driver);
@@ -2587,6 +2602,13 @@ cleanup:
}
static int
+libxlDomainSetSchedulerParameters(virDomainPtr dom, virSchedParameterPtr params,
+ int nparams)
+{
+ return libxlDomainSetSchedulerParametersFlags(dom, params, nparams, 0);
+}
+
+static int
libxlDomainIsActive(virDomainPtr dom)
{
libxlDriverPrivatePtr driver = dom->conn->privateData;
@@ -2733,7 +2755,9 @@ static virDriver libxlDriver = {
.domainSetAutostart = libxlDomainSetAutostart, /* 0.9.0 */
.domainGetSchedulerType = libxlDomainGetSchedulerType, /* 0.9.0 */
.domainGetSchedulerParameters = libxlDomainGetSchedulerParameters, /* 0.9.0 */
+ .domainGetSchedulerParametersFlags = libxlDomainGetSchedulerParametersFlags, /* 0.9.2
*/
.domainSetSchedulerParameters = libxlDomainSetSchedulerParameters, /* 0.9.0 */
+ .domainSetSchedulerParametersFlags = libxlDomainSetSchedulerParametersFlags, /* 0.9.2
*/
.nodeGetFreeMemory = libxlNodeGetFreeMemory, /* 0.9.0 */
.domainEventRegister = libxlDomainEventRegister, /* 0.9.0 */
.domainEventDeregister = libxlDomainEventDeregister, /* 0.9.0 */
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 2bb592d..687248a 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -2160,9 +2160,11 @@ static char *lxcGetSchedulerType(virDomainPtr domain
ATTRIBUTE_UNUSED,
return schedulerType;
}
-static int lxcSetSchedulerParameters(virDomainPtr domain,
- virSchedParameterPtr params,
- int nparams)
+static int
+lxcSetSchedulerParametersFlags(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int nparams,
+ unsigned int flags)
{
lxc_driver_t *driver = domain->conn->privateData;
int i;
@@ -2170,6 +2172,8 @@ static int lxcSetSchedulerParameters(virDomainPtr domain,
virDomainObjPtr vm = NULL;
int ret = -1;
+ virCheckFlags(0, -1);
+
if (driver->cgroup == NULL)
return -1;
@@ -2221,9 +2225,18 @@ cleanup:
return ret;
}
-static int lxcGetSchedulerParameters(virDomainPtr domain,
+static int lxcSetSchedulerParameters(virDomainPtr domain,
virSchedParameterPtr params,
- int *nparams)
+ int nparams)
+{
+ return lxcSetSchedulerParametersFlags(domain, params, nparams, 0);
+}
+
+static int
+lxcGetSchedulerParametersFlags(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int *nparams,
+ unsigned int flags)
{
lxc_driver_t *driver = domain->conn->privateData;
virCgroupPtr group = NULL;
@@ -2231,6 +2244,8 @@ static int lxcGetSchedulerParameters(virDomainPtr domain,
unsigned long long val;
int ret = -1;
+ virCheckFlags(0, -1);
+
if (driver->cgroup == NULL)
return -1;
@@ -2274,6 +2289,13 @@ cleanup:
return ret;
}
+static int lxcGetSchedulerParameters(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int *nparams)
+{
+ return lxcGetSchedulerParametersFlags(domain, params, nparams, 0);
+}
+
#ifdef __linux__
static int
lxcDomainInterfaceStats(virDomainPtr dom,
@@ -2750,7 +2772,9 @@ static virDriver lxcDriver = {
.domainSetAutostart = lxcDomainSetAutostart, /* 0.7.0 */
.domainGetSchedulerType = lxcGetSchedulerType, /* 0.5.0 */
.domainGetSchedulerParameters = lxcGetSchedulerParameters, /* 0.5.0 */
+ .domainGetSchedulerParametersFlags = lxcGetSchedulerParametersFlags, /* 0.9.2 */
.domainSetSchedulerParameters = lxcSetSchedulerParameters, /* 0.5.0 */
+ .domainSetSchedulerParametersFlags = lxcSetSchedulerParametersFlags, /* 0.9.2 */
.domainInterfaceStats = lxcDomainInterfaceStats, /* 0.7.3 */
.nodeGetCellsFreeMemory = nodeGetCellsFreeMemory, /* 0.6.5 */
.nodeGetFreeMemory = nodeGetFreeMemory, /* 0.6.5 */
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 658bcee..2daec83 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -2625,14 +2625,18 @@ static char *testDomainGetSchedulerType(virDomainPtr domain
ATTRIBUTE_UNUSED,
return type;
}
-static int testDomainGetSchedulerParams(virDomainPtr domain,
- virSchedParameterPtr params,
- int *nparams)
+static int
+testDomainGetSchedulerParamsFlags(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int *nparams,
+ unsigned int flags)
{
testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom;
int ret = -1;
+ virCheckFlags(0, -1);
+
testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
@@ -2660,15 +2664,26 @@ cleanup:
return ret;
}
+static int
+testDomainGetSchedulerParams(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int *nparams)
+{
+ return testDomainGetSchedulerParamsFlags(domain, params, nparams, 0);
+}
-static int testDomainSetSchedulerParams(virDomainPtr domain,
- virSchedParameterPtr params,
- int nparams)
+static int
+testDomainSetSchedulerParamsFlags(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int nparams,
+ unsigned int flags)
{
testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom;
int ret = -1;
+ virCheckFlags(0, -1);
+
testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
domain->name);
@@ -2701,6 +2716,14 @@ cleanup:
return ret;
}
+static int
+testDomainSetSchedulerParams(virDomainPtr domain,
+ virSchedParameterPtr params,
+ int nparams)
+{
+ return testDomainSetSchedulerParamsFlags(domain, params, nparams, 0);
+}
+
static int testDomainBlockStats(virDomainPtr domain,
const char *path,
struct _virDomainBlockStats *stats)
@@ -5364,7 +5387,9 @@ static virDriver testDriver = {
.domainSetAutostart = testDomainSetAutostart, /* 0.3.2 */
.domainGetSchedulerType = testDomainGetSchedulerType, /* 0.3.2 */
.domainGetSchedulerParameters = testDomainGetSchedulerParams, /* 0.3.2 */
+ .domainGetSchedulerParametersFlags = testDomainGetSchedulerParamsFlags, /* 0.9.2 */
.domainSetSchedulerParameters = testDomainSetSchedulerParams, /* 0.3.2 */
+ .domainSetSchedulerParametersFlags = testDomainSetSchedulerParamsFlags, /* 0.9.2 */
.domainBlockStats = testDomainBlockStats, /* 0.7.0 */
.domainInterfaceStats = testDomainInterfaceStats, /* 0.7.0 */
.nodeGetCellsFreeMemory = testNodeGetCellsFreeMemory, /* 0.4.2 */
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index fea8548..25479c4 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -1676,12 +1676,16 @@ xenUnifiedDomainGetSchedulerType (virDomainPtr dom, int *nparams)
}
static int
-xenUnifiedDomainGetSchedulerParameters (virDomainPtr dom,
- virSchedParameterPtr params, int *nparams)
+xenUnifiedDomainGetSchedulerParametersFlags(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int *nparams,
+ unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i, ret;
+ virCheckFlags(0, -1);
+
for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) {
if (priv->opened[i] && drivers[i]->domainGetSchedulerParameters) {
ret = drivers[i]->domainGetSchedulerParameters(dom, params, nparams);
@@ -1693,12 +1697,25 @@ xenUnifiedDomainGetSchedulerParameters (virDomainPtr dom,
}
static int
-xenUnifiedDomainSetSchedulerParameters (virDomainPtr dom,
- virSchedParameterPtr params, int nparams)
+xenUnifiedDomainGetSchedulerParameters(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int *nparams)
+{
+ return xenUnifiedDomainGetSchedulerParametersFlags(dom, params,
+ nparams, 0);
+}
+
+static int
+xenUnifiedDomainSetSchedulerParametersFlags(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int nparams,
+ unsigned int flags)
{
GET_PRIVATE(dom->conn);
int i, ret;
+ virCheckFlags(0, -1);
+
/* do the hypervisor call last to get better error */
for (i = XEN_UNIFIED_NR_DRIVERS - 1; i >= 0; i--) {
if (priv->opened[i] && drivers[i]->domainSetSchedulerParameters) {
@@ -1712,6 +1729,15 @@ xenUnifiedDomainSetSchedulerParameters (virDomainPtr dom,
}
static int
+xenUnifiedDomainSetSchedulerParameters(virDomainPtr dom,
+ virSchedParameterPtr params,
+ int nparams)
+{
+ return xenUnifiedDomainSetSchedulerParametersFlags(dom, params,
+ nparams, 0);
+}
+
+static int
xenUnifiedDomainBlockStats (virDomainPtr dom, const char *path,
struct _virDomainBlockStats *stats)
{
@@ -2195,7 +2221,9 @@ static virDriver xenUnifiedDriver = {
.domainSetAutostart = xenUnifiedDomainSetAutostart, /* 0.4.4 */
.domainGetSchedulerType = xenUnifiedDomainGetSchedulerType, /* 0.2.3 */
.domainGetSchedulerParameters = xenUnifiedDomainGetSchedulerParameters, /* 0.2.3 */
+ .domainGetSchedulerParametersFlags = xenUnifiedDomainGetSchedulerParametersFlags, /*
0.9.2 */
.domainSetSchedulerParameters = xenUnifiedDomainSetSchedulerParameters, /* 0.2.3 */
+ .domainSetSchedulerParametersFlags = xenUnifiedDomainSetSchedulerParametersFlags, /*
0.9.2 */
.domainMigratePrepare = xenUnifiedDomainMigratePrepare, /* 0.3.2 */
.domainMigratePerform = xenUnifiedDomainMigratePerform, /* 0.3.2 */
.domainMigrateFinish = xenUnifiedDomainMigrateFinish, /* 0.3.2 */
--
1.7.4.4