WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [linux-2.6.18-xen] ia64, xencomm: support XEN_SYSCTL_top

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [linux-2.6.18-xen] ia64, xencomm: support XEN_SYSCTL_topologyinfo and XEN_SYSCTL_numainfo
From: "Xen patchbot-linux-2.6.18-xen" <patchbot-linux-2.6.18-xen@xxxxxxxxxxxxxxxxxxx>
Date: Sun, 06 Jun 2010 23:55:38 -0700
Delivery-date: Sun, 06 Jun 2010 23:58:28 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1275890255 -3600
# Node ID 8af51a7a64c72b66debc8f312affc37d156649d6
# Parent  b7eb9756e5225835e02fd2f5f10f65439bd9ff08
ia64, xencomm: support XEN_SYSCTL_topologyinfo and XEN_SYSCTL_numainfo

Signed-off-by: KUWAMURA Shin'ya <kuwa@xxxxxxxxxxxxxx>
---
 arch/ia64/xen/xcom_privcmd.c |   88 +++++++++++++++++++++++++++++++++++++------
 1 files changed, 76 insertions(+), 12 deletions(-)

diff -r b7eb9756e522 -r 8af51a7a64c7 arch/ia64/xen/xcom_privcmd.c
--- a/arch/ia64/xen/xcom_privcmd.c      Mon Jun 07 06:57:11 2010 +0100
+++ b/arch/ia64/xen/xcom_privcmd.c      Mon Jun 07 06:57:35 2010 +0100
@@ -87,6 +87,7 @@ xencomm_privcmd_sysctl(privcmd_hypercall
        struct xencomm_handle *op_desc;
        struct xencomm_handle *desc = NULL;
        struct xencomm_handle *desc1 = NULL;
+       struct xencomm_handle *desc2 = NULL;
        int ret = 0;
 
        user_op = (xen_sysctl_t __user *)hypercall->arg[0];
@@ -111,6 +112,7 @@ xencomm_privcmd_sysctl(privcmd_hypercall
                                     (void *)desc);
                break;
        case XEN_SYSCTL_tbuf_op:
+       case XEN_SYSCTL_physinfo:
        case XEN_SYSCTL_sched_id:
        case XEN_SYSCTL_availheap:
                break;
@@ -183,18 +185,6 @@ xencomm_privcmd_sysctl(privcmd_hypercall
                                     (void *)desc);
                break;
 
-       case XEN_SYSCTL_physinfo:
-               desc = xencomm_map(
-                       xen_guest_handle(kern_op.u.physinfo.cpu_to_node),
-                       kern_op.u.physinfo.max_cpu_id * sizeof(uint32_t));
-               if (xen_guest_handle(kern_op.u.physinfo.cpu_to_node) != NULL &&
-                   kern_op.u.physinfo.max_cpu_id > 0 && desc == NULL)
-                       return -ENOMEM;
-
-               set_xen_guest_handle(kern_op.u.physinfo.cpu_to_node,
-                                    (void *)desc);
-               break;
-
        case XEN_SYSCTL_get_pmstat:
                if (kern_op.u.get_pmstat.type == PMSTAT_get_pxstat) {
                        struct pm_px_stat *getpx =
@@ -219,6 +209,79 @@ xencomm_privcmd_sysctl(privcmd_hypercall
                }
                break;
 
+       case XEN_SYSCTL_topologyinfo:
+       {
+               xen_sysctl_topologyinfo_t *info = &kern_op.u.topologyinfo;
+               unsigned long size =
+                       (info->max_cpu_index + 1) * sizeof(uint32_t);
+
+               desc = xencomm_map(xen_guest_handle(info->cpu_to_core), size);
+               if (xen_guest_handle(info->cpu_to_core) != NULL &&
+                   info->max_cpu_index > 0 && desc == NULL)
+                       return -ENOMEM;
+
+               set_xen_guest_handle(info->cpu_to_core, (void *)desc);
+
+               desc1 = xencomm_map(
+                       xen_guest_handle(info->cpu_to_socket), size);
+               if (xen_guest_handle(info->cpu_to_socket) != NULL &&
+                   info->max_cpu_index > 0 && desc1 == NULL) {
+                       xencomm_free(desc);
+                       return -ENOMEM;
+               }
+
+               set_xen_guest_handle(info->cpu_to_socket, (void *)desc1);
+
+               desc2 = xencomm_map(xen_guest_handle(info->cpu_to_node), size);
+               if (xen_guest_handle(info->cpu_to_node) != NULL &&
+                   info->max_cpu_index > 0 && desc2 == NULL) {
+                       xencomm_free(desc1);
+                       xencomm_free(desc);
+                       return -ENOMEM;
+               }
+
+               set_xen_guest_handle(info->cpu_to_node, (void *)desc2);
+               break;
+       }
+
+       case XEN_SYSCTL_numainfo:
+       {
+               xen_sysctl_numainfo_t *info = &kern_op.u.numainfo;
+               uint32_t max = info->max_node_index;
+
+               desc = xencomm_map(xen_guest_handle(info->node_to_memsize),
+                                  (max + 1) * sizeof(uint64_t));
+               if (xen_guest_handle(info->node_to_memsize) != NULL &&
+                   desc == NULL)
+                       return -ENOMEM;
+
+               set_xen_guest_handle(info->node_to_memsize, (void *)desc);
+
+               desc1 = xencomm_map(xen_guest_handle(info->node_to_memfree),
+                                   (max + 1) * sizeof(uint64_t));
+               if (xen_guest_handle(info->node_to_memfree) != NULL &&
+                   desc1 == NULL) {
+                       xencomm_free(desc);
+                       return -ENOMEM;
+               }
+
+               set_xen_guest_handle(info->node_to_memfree, (void *)desc1);
+
+               desc2 = xencomm_map(
+                       xen_guest_handle(info->node_to_node_distance),
+                       (max + 1) * (max + 1) * sizeof(uint32_t));
+               if (xen_guest_handle(info->node_to_node_distance) != NULL &&
+                   desc2 == NULL) {
+                       xencomm_free(desc1);
+                       xencomm_free(desc);
+                       return -ENOMEM;
+               }
+
+               set_xen_guest_handle(info->node_to_node_distance,
+                                    (void *)desc2);
+               break;
+       }
+
        default:
                printk("%s: unknown sysctl cmd %d\n", __func__, kern_op.cmd);
                return -ENOSYS;
@@ -249,6 +312,7 @@ xencomm_privcmd_sysctl(privcmd_hypercall
 
        xencomm_free(desc);
        xencomm_free(desc1);
+       xencomm_free(desc2);
        return ret;
 }
 

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [linux-2.6.18-xen] ia64, xencomm: support XEN_SYSCTL_topologyinfo and XEN_SYSCTL_numainfo, Xen patchbot-linux-2.6.18-xen <=