]> git.ipfire.org Git - people/teissler/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.31/patches.arch/x2APIC_PATCH_28_1_of_41_f910a9dc7c865896815e2a95fe33363e9522f277
Move xen patchset to new version's subdir.
[people/teissler/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / x2APIC_PATCH_28_1_of_41_f910a9dc7c865896815e2a95fe33363e9522f277
diff --git a/src/patches/suse-2.6.27.31/patches.arch/x2APIC_PATCH_28_1_of_41_f910a9dc7c865896815e2a95fe33363e9522f277 b/src/patches/suse-2.6.27.31/patches.arch/x2APIC_PATCH_28_1_of_41_f910a9dc7c865896815e2a95fe33363e9522f277
new file mode 100644 (file)
index 0000000..fd9a3c4
--- /dev/null
@@ -0,0 +1,252 @@
+From: Yinghai Lu <yhlu.kernel@gmail.com>
+Subject: x86: make 64bit have get_apic_id
+References: fate #303948 and fate #303984
+Patch-Mainline: queued for .28
+Commit-ID: f910a9dc7c865896815e2a95fe33363e9522f277
+
+Signed-off-by: Thomas Renninger <trenn@suse.de>
+
+generalize the x2apic code some more.
+
+let read_apic_id become a macro (later on a function/inline)
+GET_APIC_ID(apic_read(APIC_ID))
+
+  +#define read_apic_id()  (GET_APIC_ID(apic_read(APIC_ID)))
+
+instead of this weird construct:
+
+  -#define read_apic_id  (genapic->read_apic_id)
+
+Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com>
+Cc: Suresh Siddha <suresh.b.siddha@intel.com>
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+---
+ arch/x86/kernel/genapic_flat_64.c           |   26 +++++++++++++++++++++++---
+ arch/x86/kernel/genx2apic_cluster.c         |   20 +++++++++++++++++++-
+ arch/x86/kernel/genx2apic_phys.c            |   20 +++++++++++++++++++-
+ arch/x86/kernel/genx2apic_uv_x.c            |   23 ++++++++++++++++++++---
+ include/asm-x86/genapic_64.h                |    4 +++-
+ include/asm-x86/mach-default/mach_apic.h    |    2 +-
+ include/asm-x86/mach-default/mach_apicdef.h |    6 +++---
+ 7 files changed, 88 insertions(+), 13 deletions(-)
+
+Index: linux-2.6.26/arch/x86/kernel/genapic_flat_64.c
+===================================================================
+--- linux-2.6.26.orig/arch/x86/kernel/genapic_flat_64.c
++++ linux-2.6.26/arch/x86/kernel/genapic_flat_64.c
+@@ -97,11 +97,27 @@ static void flat_send_IPI_all(int vector
+               __send_IPI_shortcut(APIC_DEST_ALLINC, vector, APIC_DEST_LOGICAL);
+ }
++static unsigned int get_apic_id(unsigned long x)
++{
++      unsigned int id;
++
++      id = (((x)>>24) & 0xFFu);
++      return id;
++}
++
++static unsigned long set_apic_id(unsigned int id)
++{
++      unsigned long x;
++
++      x = ((id & 0xFFu)<<24);
++      return x;
++}
++
+ static unsigned int read_xapic_id(void)
+ {
+       unsigned int id;
+-      id = GET_APIC_ID(apic_read(APIC_ID));
++      id = get_apic_id(apic_read(APIC_ID));
+       return id;
+ }
+@@ -134,7 +150,9 @@ struct genapic apic_flat =  {
+       .send_IPI_self = apic_send_IPI_self,
+       .cpu_mask_to_apicid = flat_cpu_mask_to_apicid,
+       .phys_pkg_id = phys_pkg_id,
+-      .read_apic_id = read_xapic_id,
++      .get_apic_id = get_apic_id,
++      .set_apic_id = set_apic_id,
++      .apic_id_mask = (0xFFu<<24),
+ };
+ /*
+@@ -200,5 +218,7 @@ struct genapic apic_physflat =  {
+       .send_IPI_self = apic_send_IPI_self,
+       .cpu_mask_to_apicid = physflat_cpu_mask_to_apicid,
+       .phys_pkg_id = phys_pkg_id,
+-      .read_apic_id = read_xapic_id,
++      .get_apic_id = get_apic_id,
++      .set_apic_id = set_apic_id,
++      .apic_id_mask = (0xFFu<<24),
+ };
+Index: linux-2.6.26/arch/x86/kernel/genx2apic_cluster.c
+===================================================================
+--- linux-2.6.26.orig/arch/x86/kernel/genx2apic_cluster.c
++++ linux-2.6.26/arch/x86/kernel/genx2apic_cluster.c
+@@ -94,6 +94,22 @@ static unsigned int x2apic_cpu_mask_to_a
+               return BAD_APICID;
+ }
++static unsigned int get_apic_id(unsigned long x)
++{
++      unsigned int id;
++
++      id = x;
++      return id;
++}
++
++static unsigned long set_apic_id(unsigned int id)
++{
++      unsigned long x;
++
++      x = id;
++      return x;
++}
++
+ static unsigned int x2apic_read_id(void)
+ {
+       return apic_read(APIC_ID);
+@@ -131,5 +147,7 @@ struct genapic apic_x2apic_cluster = {
+       .send_IPI_self = x2apic_send_IPI_self,
+       .cpu_mask_to_apicid = x2apic_cpu_mask_to_apicid,
+       .phys_pkg_id = phys_pkg_id,
+-      .read_apic_id = x2apic_read_id,
++      .get_apic_id = get_apic_id,
++      .set_apic_id = set_apic_id,
++      .apic_id_mask = (0xFFFFFFFFu),
+ };
+Index: linux-2.6.26/arch/x86/kernel/genx2apic_phys.c
+===================================================================
+--- linux-2.6.26.orig/arch/x86/kernel/genx2apic_phys.c
++++ linux-2.6.26/arch/x86/kernel/genx2apic_phys.c
+@@ -84,6 +84,22 @@ static unsigned int x2apic_cpu_mask_to_a
+               return BAD_APICID;
+ }
++static unsigned int get_apic_id(unsigned long x)
++{
++      unsigned int id;
++
++      id = x;
++      return id;
++}
++
++static unsigned long set_apic_id(unsigned int id)
++{
++      unsigned long x;
++
++      x = id;
++      return x;
++}
++
+ static unsigned int x2apic_read_id(void)
+ {
+       return apic_read(APIC_ID);
+@@ -118,5 +134,7 @@ struct genapic apic_x2apic_phys = {
+       .send_IPI_self = x2apic_send_IPI_self,
+       .cpu_mask_to_apicid = x2apic_cpu_mask_to_apicid,
+       .phys_pkg_id = phys_pkg_id,
+-      .read_apic_id = x2apic_read_id,
++      .get_apic_id = get_apic_id,
++      .set_apic_id = set_apic_id,
++      .apic_id_mask = (0xFFFFFFFFu),
+ };
+Index: linux-2.6.26/arch/x86/kernel/genx2apic_uv_x.c
+===================================================================
+--- linux-2.6.26.orig/arch/x86/kernel/genx2apic_uv_x.c
++++ linux-2.6.26/arch/x86/kernel/genx2apic_uv_x.c
+@@ -143,16 +143,31 @@ static unsigned int uv_cpu_mask_to_apici
+               return BAD_APICID;
+ }
+-static unsigned int uv_read_apic_id(void)
++static unsigned int get_apic_id(unsigned long x)
+ {
+       unsigned int id;
+       WARN_ON(preemptible() && num_online_cpus() > 1);
+-      id = apic_read(APIC_ID) | __get_cpu_var(x2apic_extra_bits);
++      id = x | __get_cpu_var(x2apic_extra_bits);
+       return id;
+ }
++static long set_apic_id(unsigned int id)
++{
++      unsigned long x;
++
++      /* maskout x2apic_extra_bits ? */
++      x = id;
++      return x;
++}
++
++static unsigned int uv_read_apic_id(void)
++{
++
++      return get_apic_id(apic_read(APIC_ID));
++}
++
+ static unsigned int phys_pkg_id(int index_msb)
+ {
+       return uv_read_apic_id() >> index_msb;
+@@ -179,7 +194,9 @@ struct genapic apic_x2apic_uv_x = {
+       /* ZZZ.send_IPI_self = uv_send_IPI_self, */
+       .cpu_mask_to_apicid = uv_cpu_mask_to_apicid,
+       .phys_pkg_id = phys_pkg_id,     /* Fixme ZZZ */
+-      .read_apic_id = uv_read_apic_id,
++      .get_apic_id = get_apic_id,
++      .set_apic_id = set_apic_id,
++      .apic_id_mask = (0xFFFFFFFFu),
+ };
+ static __cpuinit void set_x2apic_extra_bits(int pnode)
+Index: linux-2.6.26/include/asm-x86/genapic_64.h
+===================================================================
+--- linux-2.6.26.orig/include/asm-x86/genapic_64.h
++++ linux-2.6.26/include/asm-x86/genapic_64.h
+@@ -28,7 +28,9 @@ struct genapic {
+       /* */
+       unsigned int (*cpu_mask_to_apicid)(cpumask_t cpumask);
+       unsigned int (*phys_pkg_id)(int index_msb);
+-      unsigned int (*read_apic_id)(void);
++      unsigned int (*get_apic_id)(unsigned long x);
++      unsigned long (*set_apic_id)(unsigned int id);
++      unsigned long apic_id_mask;
+ };
+ extern struct genapic *genapic;
+Index: linux-2.6.26/include/asm-x86/mach-default/mach_apic.h
+===================================================================
+--- linux-2.6.26.orig/include/asm-x86/mach-default/mach_apic.h
++++ linux-2.6.26/include/asm-x86/mach-default/mach_apic.h
+@@ -30,7 +30,7 @@ static inline cpumask_t target_cpus(void
+ #define cpu_mask_to_apicid (genapic->cpu_mask_to_apicid)
+ #define phys_pkg_id   (genapic->phys_pkg_id)
+ #define vector_allocation_domain    (genapic->vector_allocation_domain)
+-#define read_apic_id  (genapic->read_apic_id)
++#define read_apic_id()  (GET_APIC_ID(apic_read(APIC_ID)))
+ #define send_IPI_self (genapic->send_IPI_self)
+ extern void setup_apic_routing(void);
+ #else
+Index: linux-2.6.26/include/asm-x86/mach-default/mach_apicdef.h
+===================================================================
+--- linux-2.6.26.orig/include/asm-x86/mach-default/mach_apicdef.h
++++ linux-2.6.26/include/asm-x86/mach-default/mach_apicdef.h
+@@ -4,9 +4,9 @@
+ #include <asm/apic.h>
+ #ifdef CONFIG_X86_64
+-#define       APIC_ID_MASK            (0xFFu<<24)
+-#define GET_APIC_ID(x)                (((x)>>24) & 0xFFu)
+-#define       SET_APIC_ID(x)          (((x)<<24))
++#define       APIC_ID_MASK            (genapic->apic_id_mask)
++#define GET_APIC_ID(x)                (genapic->get_apic_id(x))
++#define       SET_APIC_ID(x)          (genapic->set_apic_id(x))
+ #else
+ #define               APIC_ID_MASK            (0xF<<24)
+ static inline unsigned get_apic_id(unsigned long x)