Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > ebe084c140192657f9094e135a84202c > files > 155

libvirt-0.8.2-29.el5.src.rpm

From aad668b70970f2888e802bee664eca030c9248f4 Mon Sep 17 00:00:00 2001
Message-Id: <aad668b70970f2888e802bee664eca030c9248f4.1283420933.git.jdenemar@redhat.com>
From: Daniel Veillard <veillard@redhat.com>
Date: Tue, 17 Aug 2010 18:30:17 +0200
Subject: [PATCH] xen: Fix scheduler setting problems

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
(cherry picked from commit 1dcd5ab98930a1b9485378ecb47839d4e37506bf)
---
 src/xen/xen_driver.c     |    3 ++-
 src/xen/xen_hypervisor.c |    4 ++--
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 3dd673b..4afb252 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -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)
diff --git a/src/xen/xen_hypervisor.c b/src/xen/xen_hypervisor.c
index ae17c60..d73bc2d 100644
--- a/src/xen/xen_hypervisor.c
+++ b/src/xen/xen_hypervisor.c
@@ -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);
                     }
-- 
1.7.2.2