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] x86: mpparse and cstate need to use 32bit

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] x86: mpparse and cstate need to use 32bit apic id
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 23 Dec 2010 05:34:34 -0800
Delivery-date: Thu, 23 Dec 2010 05:42:49 -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@xxxxxxx>
# Date 1292413934 0
# Node ID 548c808be2a6f166657ce7cfb86df7a296a9526a
# Parent  c0662cb08260d831ae8d211ba16fc7038cb889b6
x86: mpparse and cstate need to use 32bit apic id

Instead of going with mpc_config_processor struct.
that field ony have 8 bits.

We should not change that struct, because it is shared with mptable.

Also need to increase MAX_APICS.

Signed-off-by: Yinghai Lu <yinghai@xxxxxxxxxx>

Rather than using a fixed value of 512, make this scale with NR_CPUS
(which obviously still doesn't cover all theoretically possible
systems, but at least allows some build time control).

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/arch/x86/acpi/cpu_idle.c                 |    2 +-
 xen/arch/x86/mpparse.c                       |   20 +++++++++++++-------
 xen/common/sched_sedf.c                      |    1 -
 xen/include/asm-x86/mach-generic/mach_apic.h |    6 +++---
 xen/include/asm-x86/mpspec_def.h             |    2 +-
 xen/include/xen/kernel.h                     |    7 +++++++
 6 files changed, 25 insertions(+), 13 deletions(-)

diff -r c0662cb08260 -r 548c808be2a6 xen/arch/x86/acpi/cpu_idle.c
--- a/xen/arch/x86/acpi/cpu_idle.c      Wed Dec 15 11:21:28 2010 +0000
+++ b/xen/arch/x86/acpi/cpu_idle.c      Wed Dec 15 11:52:14 2010 +0000
@@ -866,7 +866,7 @@ int get_cpu_id(u8 acpi_id)
 int get_cpu_id(u8 acpi_id)
 {
     int i;
-    u8 apic_id;
+    u32 apic_id;
 
     apic_id = x86_acpiid_to_apicid[acpi_id];
     if ( apic_id == 0xff )
diff -r c0662cb08260 -r 548c808be2a6 xen/arch/x86/mpparse.c
--- a/xen/arch/x86/mpparse.c    Wed Dec 15 11:21:28 2010 +0000
+++ b/xen/arch/x86/mpparse.c    Wed Dec 15 11:52:14 2010 +0000
@@ -99,7 +99,8 @@ static struct mpc_config_translation *tr
 static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] 
__initdata;
 
 /* Return xen's logical cpu_id of the new added cpu or <0 if error */
-static int __devinit MP_processor_info (struct mpc_config_processor *m)
+static int __devinit MP_processor_info_x(struct mpc_config_processor *m,
+                                        u32 apicidx)
 {
        int ver, apicid, cpu = 0;
        physid_mask_t phys_cpu;
@@ -107,7 +108,7 @@ static int __devinit MP_processor_info (
        if (!(m->mpc_cpuflag & CPU_ENABLED))
                return -EINVAL;
 
-       apicid = mpc_apic_id(m, translation_table[mpc_record]);
+       apicid = mpc_apic_id(m, apicidx, translation_table[mpc_record]);
 
        if (m->mpc_featureflag&(1<<0))
                Dprintk("    Floating point unit present.\n");
@@ -159,7 +160,7 @@ static int __devinit MP_processor_info (
 
        if (m->mpc_cpuflag & CPU_BOOTPROCESSOR) {
                Dprintk("    Bootup CPU\n");
-               boot_cpu_physical_apicid = m->mpc_apicid;
+               boot_cpu_physical_apicid = apicid;
        }
 
        ver = m->mpc_apicver;
@@ -170,10 +171,10 @@ static int __devinit MP_processor_info (
        if (ver == 0x0) {
                printk(KERN_WARNING "BIOS bug, APIC version is 0 for CPU#%d! "
                                "fixing up to 0x10. (tell your hw vendor)\n",
-                               m->mpc_apicid);
+                               apicid);
                ver = 0x10;
        }
-       apic_version[m->mpc_apicid] = ver;
+       apic_version[apicid] = ver;
 
        phys_cpu = apicid_to_cpu_present(apicid);
        physids_or(phys_cpu_present_map, phys_cpu_present_map, phys_cpu);
@@ -211,6 +212,11 @@ static int __devinit MP_processor_info (
        }
 
        return cpu;
+}
+
+static int __devinit MP_processor_info(struct mpc_config_processor *m)
+{
+       return MP_processor_info_x(m, m->mpc_apicid);
 }
 
 static void __init MP_bus_info (struct mpc_config_bus *m)
@@ -839,7 +845,7 @@ int __devinit mp_register_lapic (
        struct mpc_config_processor processor;
        int                     boot_cpu = 0;
        
-       if (MAX_APICS - id <= 0) {
+       if (MAX_APICS <= id) {
                printk(KERN_WARNING "Processor #%d invalid (max %d)\n",
                        id, MAX_APICS);
                return -EINVAL;
@@ -859,7 +865,7 @@ int __devinit mp_register_lapic (
        processor.mpc_reserved[0] = 0;
        processor.mpc_reserved[1] = 0;
 
-       return MP_processor_info(&processor);
+       return MP_processor_info_x(&processor, id);
 }
 
 void mp_unregister_lapic(uint32_t apic_id, uint32_t cpu)
diff -r c0662cb08260 -r 548c808be2a6 xen/common/sched_sedf.c
--- a/xen/common/sched_sedf.c   Wed Dec 15 11:21:28 2010 +0000
+++ b/xen/common/sched_sedf.c   Wed Dec 15 11:52:14 2010 +0000
@@ -127,7 +127,6 @@ struct sedf_cpu_info {
 
 #define PERIOD_BEGIN(inf) ((inf)->deadl_abs - (inf)->period)
 
-#define MIN(x,y)    (((x)<(y))?(x):(y))
 #define DIV_UP(x,y) (((x) + (y) - 1) / y)
 
 #define extra_runs(inf)      ((inf->status) & 6)
diff -r c0662cb08260 -r 548c808be2a6 
xen/include/asm-x86/mach-generic/mach_apic.h
--- a/xen/include/asm-x86/mach-generic/mach_apic.h      Wed Dec 15 11:21:28 
2010 +0000
+++ b/xen/include/asm-x86/mach-generic/mach_apic.h      Wed Dec 15 11:52:14 
2010 +0000
@@ -28,15 +28,15 @@ static inline void enable_apic_mode(void
 
 extern u32 bios_cpu_apicid[];
 
-static inline int mpc_apic_id(struct mpc_config_processor *m, 
+static inline int mpc_apic_id(struct mpc_config_processor *m, u32 apicid,
                        struct mpc_config_translation *translation_record)
 {
        printk("Processor #%d %d:%d APIC version %d\n",
-                       m->mpc_apicid,
+                       apicid,
                        (m->mpc_cpufeature & CPU_FAMILY_MASK) >> 8,
                        (m->mpc_cpufeature & CPU_MODEL_MASK) >> 4,
                        m->mpc_apicver);
-       return (m->mpc_apicid);
+       return apicid;
 }
 
 static inline int multi_timer_check(int apic, int irq)
diff -r c0662cb08260 -r 548c808be2a6 xen/include/asm-x86/mpspec_def.h
--- a/xen/include/asm-x86/mpspec_def.h  Wed Dec 15 11:21:28 2010 +0000
+++ b/xen/include/asm-x86/mpspec_def.h  Wed Dec 15 11:52:14 2010 +0000
@@ -14,7 +14,7 @@
 #define SMP_MAGIC_IDENT        (('_'<<24)|('P'<<16)|('M'<<8)|'_')
 
 #define MAX_MPC_ENTRY 1024
-#define MAX_APICS      256
+#define MAX_APICS     MAX(256, 4 * NR_CPUS)
 
 struct intel_mp_floating
 {
diff -r c0662cb08260 -r 548c808be2a6 xen/include/xen/kernel.h
--- a/xen/include/xen/kernel.h  Wed Dec 15 11:21:28 2010 +0000
+++ b/xen/include/xen/kernel.h  Wed Dec 15 11:52:14 2010 +0000
@@ -32,6 +32,13 @@
         ({ type __x = (x); type __y = (y); __x < __y ? __x: __y; })
 #define max_t(type,x,y) \
         ({ type __x = (x); type __y = (y); __x > __y ? __x: __y; })
+
+/*
+ * pre-processor, array size, and bit field width suitable variants;
+ * please don't use in "normal" expressions.
+ */
+#define MIN(x,y) ((x) < (y) ? (x) : (y))
+#define MAX(x,y) ((x) > (y) ? (x) : (y))
 
 /**
  * container_of - cast a member of a structure out to the containing structure

_______________________________________________
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] x86: mpparse and cstate need to use 32bit apic id, Xen patchbot-unstable <=