* virDomainSetSchedulerParameters:
* @domain: pointer to domain object
* @params: pointer to scheduler parameter objects
- * @nparams: number of scheduler parameter
- * (this value should be same or less than the returned value
+ * @nparams: number of scheduler parameter objects
+ * (this value can be the same or less than the returned value
* nparams of virDomainGetSchedulerType)
*
- * Change the scheduler parameters
+ * Change all or a subset or the scheduler parameters.
*
* Returns -1 in case of error, 0 in case of success.
*/
virDispatchError(NULL);
return -1;
}
+
+ if (params == NULL || nparams < 0) {
+ virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+
if (domain->conn->flags & VIR_CONNECT_RO) {
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
goto error;
* virDomainSetSchedulerParametersFlags:
* @domain: pointer to domain object
* @params: pointer to scheduler parameter objects
- * @nparams: number of scheduler parameter
- * (this value should be same or less than the returned value
+ * @nparams: number of scheduler parameter objects
+ * (this value can be the same or less than the returned value
* nparams of virDomainGetSchedulerType)
* @flags: virDomainSchedParameterFlags
*
- * Change the scheduler parameters
+ * Change a subset or all scheduler parameters.
*
* Returns -1 in case of error, 0 in case of success.
*/
virDispatchError(NULL);
return -1;
}
+
+ if (params == NULL || nparams < 0) {
+ virLibDomainError(VIR_ERR_INVALID_ARG, __FUNCTION__);
+ goto error;
+ }
+
if (domain->conn->flags & VIR_CONNECT_RO) {
virLibDomainError(VIR_ERR_OPERATION_DENIED, __FUNCTION__);
goto error;
goto cleanup;
}
- if (nparams != XEN_SCHED_CREDIT_NPARAM) {
- libxlError(VIR_ERR_INVALID_ARG, "%s", _("Invalid parameter count"));
+ if (libxl_sched_credit_domain_get(&priv->ctx, dom->id, &sc_info) != 0) {
+ libxlError(VIR_ERR_INTERNAL_ERROR,
+ _("Failed to get scheduler parameters for domain '%d'"
+ " with libxenlight"), dom->id);
goto cleanup;
}
{
testConnPtr privconn = domain->conn->privateData;
virDomainObjPtr privdom;
- int ret = -1;
+ int ret = -1, i;
testDriverLock(privconn);
privdom = virDomainFindByName(&privconn->domains,
goto cleanup;
}
- if (nparams != 1) {
- testError(VIR_ERR_INVALID_ARG, "nparams");
- goto cleanup;
- }
- if (STRNEQ(params[0].field, "weight")) {
- testError(VIR_ERR_INVALID_ARG, "field");
- goto cleanup;
- }
- if (params[0].type != VIR_DOMAIN_SCHED_FIELD_UINT) {
- testError(VIR_ERR_INVALID_ARG, "type");
- goto cleanup;
+ for (i = 0; i < nparams; i++) {
+ if (STRNEQ(params[i].field, "weight")) {
+ testError(VIR_ERR_INVALID_ARG, "field");
+ goto cleanup;
+ }
+ if (params[i].type != VIR_DOMAIN_SCHED_FIELD_UINT) {
+ testError(VIR_ERR_INVALID_ARG, "type");
+ goto cleanup;
+ }
+ /* XXX */
+ /*privdom->weight = params[i].value.ui;*/
}
- /* XXX */
- /*privdom->weight = params[0].value.ui;*/
+
ret = 0;
cleanup:
return -1;
}
- if ((nparams == 0) || (params == NULL)) {
- virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__,
- "Noparameters given", 0);
- return(-1);
+ if (nparams == 0) {
+ /* nothing to do, exit early */
+ return 0;
}
priv = (xenUnifiedPrivatePtr) domain->conn->privateData;
int sched_nparam = 0;
int ret = -1;
- if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
- || (params == NULL)) {
+ if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1);
}