]> xenbits.xensource.com Git - libvirt.git/commitdiff
xen: Fix scheduler setting problems
authorDaniel Veillard <veillard@redhat.com>
Tue, 17 Aug 2010 16:30:17 +0000 (18:30 +0200)
committerJiri Denemark <jdenemar@redhat.com>
Wed, 18 Aug 2010 15:32:31 +0000 (17:32 +0200)
Doing `virsh schedinfo rhel5u3 --cap 65535' the hypervisor does the
call, but does not change the value nor raise an error. Best is just to
consider it's not in the allowed values. The problem is that the error
won't be output since the xend driver will then be called and raise an
error

    error: this function is not supported by the hypervisor: unsupported
    in xendConfigVersion < 4

which will override the useful information from
xenUnifiedDomainSetSchedulerParameters(). So best is to also invert the
order in which the xen sub-drivers are called.

* src/xen/xen_hypervisor.c: mark 65535 cap value as out of bound
* src/xen/xen_hypervisor.c: reverse the order of the calls to the xen
  sub drivers to get the error message if needed

src/xen/xen_driver.c
src/xen/xen_hypervisor.c

index ddbfa7a3e4f253854d0680140b545897712c9f45..56ba41b36c3b5f7fc71028c8e125e11046bf34c3 100644 (file)
@@ -1588,7 +1588,8 @@ xenUnifiedDomainSetSchedulerParameters (virDomainPtr dom,
     GET_PRIVATE(dom->conn);
     int i, ret;
 
-    for (i = 0; i < XEN_UNIFIED_NR_DRIVERS; ++i) {
+    /* 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) {
            ret = drivers[i]->domainSetSchedulerParameters(dom, params, nparams);
            if (ret == 0)
index 67d0f4b9b5c8cee5b551f5b7c6b8587bc9ddb668..6246513dc47c8e46ca29c0efe70a1c11892ece0f 100644 (file)
@@ -1394,8 +1394,8 @@ xenHypervisorSetSchedulerParameters(virDomainPtr domain,
                 } else if (STREQ (params[i].field, str_cap) &&
                     params[i].type == VIR_DOMAIN_SCHED_FIELD_UINT) {
                     val = params[i].value.ui;
-                    if (val > USHRT_MAX) {
-                        snprintf(buf, sizeof(buf), _("Credit scheduler cap parameter (%d) is out of range (0-65535)"), val);
+                    if (val >= USHRT_MAX) {
+                        snprintf(buf, sizeof(buf), _("Credit scheduler cap parameter (%d) is out of range (0-65534)"), val);
                         virXenErrorFunc(VIR_ERR_INVALID_ARG, __FUNCTION__, buf, val);
                         return(-1);
                     }