[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] [IA64] fix xenperf



# HG changeset patch
# User awilliam@xxxxxxxxxxx
# Node ID 5cd95a6f84122ed9cceb3603b3ea7e604db18380
# Parent  01b257e72d5e72fb6cfbce9ea2ae75ceea76f10a
[IA64] fix xenperf

xenperf became not to work due to xencomm.

Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx>
---
 linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c |   54 +++++++++++++++-------
 1 files changed, 39 insertions(+), 15 deletions(-)

diff -r 01b257e72d5e -r 5cd95a6f8412 
linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c
--- a/linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c Sun Oct 29 11:05:53 
2006 -0700
+++ b/linux-2.6-xen-sparse/arch/ia64/xen/xcom_privcmd.c Sun Oct 29 11:13:30 
2006 -0700
@@ -120,25 +120,49 @@ xencomm_privcmd_sysctl(privcmd_hypercall
        case XEN_SYSCTL_sched_id:
                break;
        case XEN_SYSCTL_perfc_op:
-               ret = xencomm_create(
-                       xen_guest_handle(kern_op.u.perfc_op.desc),
-                       kern_op.u.perfc_op.nr_counters *
-                       sizeof(xen_sysctl_perfc_desc_t),
-                       &desc, GFP_KERNEL);
+       {
+               struct xencomm_handle *tmp_desc;
+               xen_sysctl_t tmp_op = {
+                       .cmd = XEN_SYSCTL_perfc_op,
+                       .interface_version = XEN_SYSCTL_INTERFACE_VERSION,
+                       .u.perfc_op = {
+                               .cmd = XEN_SYSCTL_PERFCOP_query,
+                               // .desc.p = NULL,
+                               // .val.p = NULL,
+                       },
+               };
+
+               if (xen_guest_handle(kern_op.u.perfc_op.desc) == NULL) {
+                       if (xen_guest_handle(kern_op.u.perfc_op.val) != NULL)
+                               return -EINVAL;
+                       break;
+               }
+
+               /* query the buffer size for xencomm */
+               tmp_desc = xencomm_create_inline(&tmp_op);
+               ret = xencomm_arch_hypercall_sysctl(tmp_desc);
                if (ret)
                        return ret;
-               set_xen_guest_handle(kern_op.u.perfc_op.val,
-                                    (void *)desc);
-               ret = xencomm_create(
-                       xen_guest_handle(kern_op.u.perfc_op.val),
-                       kern_op.u.perfc_op.nr_vals *
-                       sizeof(xen_sysctl_perfc_desc_t),
-                       &desc1, GFP_KERNEL);
+
+               ret = xencomm_create(xen_guest_handle(kern_op.u.perfc_op.desc),
+                                    tmp_op.u.perfc_op.nr_counters *
+                                    sizeof(xen_sysctl_perfc_desc_t),
+                                    &desc, GFP_KERNEL);
+               if (ret)
+                       return ret;
+
+               set_xen_guest_handle(kern_op.u.perfc_op.desc, (void *)desc);
+
+               ret = xencomm_create(xen_guest_handle(kern_op.u.perfc_op.val),
+                                    tmp_op.u.perfc_op.nr_vals *
+                                    sizeof(xen_sysctl_perfc_val_t),
+                                    &desc1, GFP_KERNEL);
                if (ret)
                        xencomm_free(desc);
-               set_xen_guest_handle(kern_op.u.perfc_op.val,
-                                    (void *)desc1);
-               break;
+
+               set_xen_guest_handle(kern_op.u.perfc_op.val, (void *)desc1);
+               break;
+       }
        case XEN_SYSCTL_getdomaininfolist:
                ret = xencomm_create(
                        xen_guest_handle(kern_op.u.getdomaininfolist.buffer),

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.