]> xenbits.xensource.com Git - libvirt.git/commitdiff
Clarify that virDomainSetSchedulerParameters(Flags) can take subsets
authorMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 18 May 2011 09:04:12 +0000 (11:04 +0200)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 18 May 2011 16:20:47 +0000 (18:20 +0200)
Add invalid argument checks for params and nparams to the public API
and remove them from the drivers (e.g. xend).

Add subset handling to libxl and test drivers.

src/libvirt.c
src/libxl/libxl_driver.c
src/test/test_driver.c
src/xen/xen_hypervisor.c
src/xen/xend_internal.c

index 79a196a293f3487759d1d8412ce3b505cccfe013..4c02f10e75f7afe3aa9e72af5d8b62d4ebd780c7 100644 (file)
@@ -5069,11 +5069,11 @@ error:
  * 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.
  */
@@ -5092,6 +5092,12 @@ virDomainSetSchedulerParameters(virDomainPtr domain,
         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;
@@ -5118,12 +5124,12 @@ 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.
  */
@@ -5153,6 +5159,12 @@ virDomainSetSchedulerParametersFlags(virDomainPtr domain,
         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;
index b85c743eaf1fa8cd8a32764c51c96084277bf792..1d41e2d9f90465bceeb86d0d95a9d6e6cb5d5b32 100644 (file)
@@ -2544,8 +2544,10 @@ libxlDomainSetSchedulerParameters(virDomainPtr dom, virSchedParameterPtr params,
         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;
     }
 
index 2d5f48906b1632c1e1d7cabc2886e2e267ab5869..e86bc4e1e262b727ba1fbbe030cfd7ad7007192f 100644 (file)
@@ -2678,7 +2678,7 @@ static int testDomainSetSchedulerParams(virDomainPtr domain,
 {
     testConnPtr privconn = domain->conn->privateData;
     virDomainObjPtr privdom;
-    int ret = -1;
+    int ret = -1, i;
 
     testDriverLock(privconn);
     privdom = virDomainFindByName(&privconn->domains,
@@ -2690,20 +2690,19 @@ static int testDomainSetSchedulerParams(virDomainPtr domain,
         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:
index 8d579bc593d9f9f4a1d0d4bf3ddf197c901a04a8..253164e8d296925e4c75ab38c7484544e094a32b 100644 (file)
@@ -1364,10 +1364,9 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
         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;
index 0fa8042adc8014faa4e51597d9b05a22dfefcba0..1a3c3b49ac1bd9c14c704c7c2ebeb0ca85833da9 100644 (file)
@@ -3712,8 +3712,7 @@ xenDaemonSetSchedulerParameters(virDomainPtr domain,
     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);
     }