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] [xen-unstable] Update pcpu_info hypercall interface

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Update pcpu_info hypercall interface
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 12 Nov 2009 05:20:17 -0800
Delivery-date: Thu, 12 Nov 2009 05:20:35 -0800
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 1258026156 0
# Node ID 4979ee65551f00940f9bae9ac14df22a90714e39
# Parent  687297d1e90b5cb76fc2c4192a26b46e97eaa25d
Update pcpu_info hypercall interface

This patch change the XENPF_get_cpuinfo interface to pass only one
pcpu information each hypercall. Also, it replace
xenpf_resource_hotplug with XENPF_cpu_online/offline.

Signed-off-by: Jiang, Yunhong <yunhong.jiang@xxxxxxxxx>
---
 xen/arch/x86/platform_hypercall.c        |  125 +++++++++++++------------------
 xen/arch/x86/x86_64/platform_hypercall.c |    7 -
 xen/include/public/platform.h            |   55 +++----------
 3 files changed, 70 insertions(+), 117 deletions(-)

diff -r 687297d1e90b -r 4979ee65551f xen/arch/x86/platform_hypercall.c
--- a/xen/arch/x86/platform_hypercall.c Thu Nov 12 11:42:02 2009 +0000
+++ b/xen/arch/x86/platform_hypercall.c Thu Nov 12 11:42:36 2009 +0000
@@ -394,91 +394,72 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
 
     case XENPF_get_cpuinfo:
     {
-        int i;
-        struct xenpf_pcpu_info *g_info;
-        struct xen_physical_cpuinfo pcpu;
-        XEN_GUEST_HANDLE(xen_physical_cpuinfo_t) g_cpus;
+        struct xenpf_pcpuinfo *g_info;
 
         g_info = &op->u.pcpu_info;
-        if (g_info->info_num <= 0 )
-        {
-            op->u.pcpu_info.max_present = last_cpu(cpu_present_map);
-            op->u.pcpu_info.max_possible = last_cpu(cpu_possible_map);
-            goto done;
-        }
-
-        guest_from_compat_handle(g_cpus, g_info->info);
 
         spin_lock(&cpu_add_remove_lock);
 
-        ret = -EFAULT;
-        for (i = 0; i < g_info->info_num; i++)
-        {
-            if (copy_from_guest_offset(&pcpu, g_cpus, i, 1) )
-                goto out;
-
-            if ( (pcpu.xen_cpuid >= NR_CPUS) ||
-                 (pcpu.xen_cpuid < 0) ||
-                 !cpu_present(pcpu.xen_cpuid) )
-            {
-                pcpu.flags |= XEN_PCPU_FLAGS_INVALID;
-            }
-            else
-            {
-                pcpu.apic_id = x86_cpu_to_apicid[pcpu.xen_cpuid];
-                pcpu.acpi_id = acpi_get_processor_id(pcpu.xen_cpuid);
-                ASSERT(pcpu.apic_id != BAD_APICID);
-                if (cpu_online(pcpu.xen_cpuid))
-                    pcpu.flags |= XEN_PCPU_FLAGS_ONLINE;
-            }
-
-            if ( copy_to_guest_offset(g_cpus, i, &pcpu, 1) )
-                goto out;
-        }
-        op->u.pcpu_info.max_present = last_cpu(cpu_present_map);
-        op->u.pcpu_info.max_possible = last_cpu(cpu_possible_map);
+        if ( (g_info->xen_cpuid >= NR_CPUS) ||
+             (g_info->xen_cpuid < 0) ||
+             !cpu_present(g_info->xen_cpuid) )
+        {
+            g_info->flags |= XEN_PCPU_FLAGS_INVALID;
+        }
+        else
+        {
+            g_info->apic_id = x86_cpu_to_apicid[g_info->xen_cpuid];
+            g_info->acpi_id = acpi_get_processor_id(g_info->xen_cpuid);
+            ASSERT(g_info->apic_id != BAD_APICID);
+            if (cpu_online(g_info->xen_cpuid))
+                g_info->flags |= XEN_PCPU_FLAGS_ONLINE;
+        }
+
+        g_info->max_present = last_cpu(cpu_present_map);
+
         spin_unlock(&cpu_add_remove_lock);
-done:
+
         ret = copy_to_guest(u_xenpf_op, op, 1) ? -EFAULT : 0;
     }
     break;
 
-    case XENPF_resource_hotplug:
+    case XENPF_cpu_online:
     {
         int cpu;
 
-        switch ( op->u.resource.sub_cmd)
-        {
-        case XEN_CPU_online:
-            cpu = op->u.resource.u.cpu_ol.cpuid;
-            if (!cpu_present(cpu))
-            {
-                ret = -EINVAL;
-                break;
-            }
-            else if (cpu_online(cpu))
-            {
-                ret = 0;
-                break;
-            }
-
-            ret = cpu_up(cpu);
-            break;
-        case XEN_CPU_offline:
-            cpu = op->u.resource.u.cpu_ol.cpuid;
-            if (!cpu_present(cpu))
-            {
-                ret = -EINVAL;
-                break;
-            } else if (!cpu_online(cpu))
-            {
-                ret = 0;
-                break;
-            }
-            ret = continue_hypercall_on_cpu(
-                0, cpu_down_helper, (void *)(unsigned long)cpu);
-            break;
-        }
+        cpu = op->u.cpu_ol.cpuid;
+        if (!cpu_present(cpu))
+        {
+            ret = -EINVAL;
+            break;
+        }
+        else if (cpu_online(cpu))
+        {
+            ret = 0;
+            break;
+        }
+
+        ret = cpu_up(cpu);
+        break;
+    }
+
+    case XENPF_cpu_offline:
+    {
+        int cpu;
+
+        cpu = op->u.cpu_ol.cpuid;
+        if (!cpu_present(cpu))
+        {
+            ret = -EINVAL;
+            break;
+        } else if (!cpu_online(cpu))
+        {
+            ret = 0;
+            break;
+        }
+        ret = continue_hypercall_on_cpu(
+          0, cpu_down_helper, (void *)(unsigned long)cpu);
+        break;
     }
     break;
 
diff -r 687297d1e90b -r 4979ee65551f xen/arch/x86/x86_64/platform_hypercall.c
--- a/xen/arch/x86/x86_64/platform_hypercall.c  Thu Nov 12 11:42:02 2009 +0000
+++ b/xen/arch/x86/x86_64/platform_hypercall.c  Thu Nov 12 11:42:36 2009 +0000
@@ -23,11 +23,8 @@ DEFINE_XEN_GUEST_HANDLE(compat_platform_
 #define xen_processor_power_t   compat_processor_power_t
 #define set_cx_pminfo           compat_set_cx_pminfo
 
-DEFINE_XEN_GUEST_HANDLE(compat_physical_cpuinfo_t);
-#define xen_physical_cpuinfo compat_physical_cpuinfo
-#define xen_physical_cpuinfo_t compat_physical_cpuinfo_t
-#define xenpf_pcpu_info compat_pf_pcpu_info
-#define xenpf_pcpu_info_t compat_pf_pcpu_info_t
+#define xenpf_pcpuinfo compat_pf_pcpuinfo
+#define xenpf_pcpuinfo_t compat_pf_pcpuinfo_t
 
 #define xenpf_enter_acpi_sleep compat_pf_enter_acpi_sleep
 
diff -r 687297d1e90b -r 4979ee65551f xen/include/public/platform.h
--- a/xen/include/public/platform.h     Thu Nov 12 11:42:02 2009 +0000
+++ b/xen/include/public/platform.h     Thu Nov 12 11:42:36 2009 +0000
@@ -313,55 +313,30 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_set_proces
 DEFINE_XEN_GUEST_HANDLE(xenpf_set_processor_pminfo_t);
 
 #define XENPF_get_cpuinfo 55
-struct xen_physical_cpuinfo {
+struct xenpf_pcpuinfo {
     /* IN */
     uint32_t xen_cpuid;
     /* OUT */
-    uint32_t apic_id;
-    uint32_t acpi_id;
+    /* The maxium cpu_id that is present */
+    uint32_t max_present;
 #define XEN_PCPU_FLAGS_ONLINE   1
     /* Correponding xen_cpuid is not present*/
 #define XEN_PCPU_FLAGS_INVALID  2
     uint32_t flags;
-    uint8_t  pad[128];
-};
-typedef struct xen_physical_cpuinfo xen_physical_cpuinfo_t;
-DEFINE_XEN_GUEST_HANDLE(xen_physical_cpuinfo_t);
-
-/*
- * Fetch physical CPUs information
- */
-struct xenpf_pcpu_info
-{
-    /* OUT */
-    /* The maxium cpu_id that is present */
-    uint32_t max_present;
-    /* The maxium possible cpus */
-    uint32_t max_possible;
-
-    /* IN */
-    uint32_t info_num;
-
-    XEN_GUEST_HANDLE(xen_physical_cpuinfo_t) info;
-};
-typedef struct xenpf_pcpu_info xenpf_pcpu_info_t;
-DEFINE_XEN_GUEST_HANDLE(xenpf_pcpu_info_t);
-
+    uint32_t apic_id;
+    uint32_t acpi_id;
+};
+typedef struct xenpf_pcpuinfo xenpf_pcpuinfo_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_pcpuinfo_t);
+
+#define XENPF_cpu_online    56
+#define XENPF_cpu_offline   57
 struct xenpf_cpu_ol
 {
     uint32_t cpuid;
 };
-
-#define XENPF_resource_hotplug 56
-struct xenpf_resource_hotplug {
-    uint32_t sub_cmd;
-#define XEN_CPU_online      1
-#define XEN_CPU_offline     2
-    union {
-        struct xenpf_cpu_ol   cpu_ol;
-        uint8_t               pad[64];
-    }u;
-};
+typedef struct xenpf_cpu_ol xenpf_cpu_ol_t;
+DEFINE_XEN_GUEST_HANDLE(xenpf_cpu_ol_t);
 
 struct xen_platform_op {
     uint32_t cmd;
@@ -378,8 +353,8 @@ struct xen_platform_op {
         struct xenpf_change_freq       change_freq;
         struct xenpf_getidletime       getidletime;
         struct xenpf_set_processor_pminfo set_pminfo;
-        struct xenpf_pcpu_info          pcpu_info;
-        struct xenpf_resource_hotplug   resource;
+        struct xenpf_pcpuinfo          pcpu_info;
+        struct xenpf_cpu_ol            cpu_ol;
         uint8_t                        pad[128];
     } u;
 };

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Update pcpu_info hypercall interface, Xen patchbot-unstable <=