ChangeSet 1.1982.116.1, 2005/02/23 14:40:01-08:00, [EMAIL PROTECTED]

        [IA64] fix IOSAPIC destinations when CONFIG_SMP=n
        
        Always use cpu_physical_id() (which is really the ID/EID of
        a processor's Local SAPIC) when programming IOSAPIC entries.
        
        Previously we sometimes used hard_smp_processor_id(), which
        is correct when CONFIG_SMP=y but wrong otherwise.
        
        Signed-off-by: Bjorn Helgaas <[EMAIL PROTECTED]>
        Signed-off-by: Tony Luck <[EMAIL PROTECTED]>



 arch/ia64/kernel/iosapic.c |    9 ++++-----
 include/asm-ia64/smp.h     |   45 ++++++++++++++++++++++++---------------------
 2 files changed, 28 insertions(+), 26 deletions(-)


diff -Nru a/arch/ia64/kernel/iosapic.c b/arch/ia64/kernel/iosapic.c
--- a/arch/ia64/kernel/iosapic.c        2005-03-31 18:05:43 -08:00
+++ b/arch/ia64/kernel/iosapic.c        2005-03-31 18:05:43 -08:00
@@ -91,7 +91,6 @@
 
 
 #undef DEBUG_INTERRUPT_ROUTING
-#undef OVERRIDE_DEBUG
 
 #ifdef DEBUG_INTERRUPT_ROUTING
 #define DBG(fmt...)    printk(fmt)
@@ -499,14 +498,14 @@
         * distribute interrupts.
         */
        if (smp_int_redirect & SMP_IRQ_REDIRECTION)
-               return hard_smp_processor_id();
+               return cpu_physical_id(smp_processor_id());
 
        /*
         * Some interrupts (ACPI SCI, for instance) are registered
         * before the BSP is marked as online.
         */
        if (!cpu_online(smp_processor_id()))
-               return hard_smp_processor_id();
+               return cpu_physical_id(smp_processor_id());
 
 #ifdef CONFIG_NUMA
        {
@@ -553,7 +552,7 @@
 
        return cpu_physical_id(cpu);
 #else
-       return hard_smp_processor_id();
+       return cpu_physical_id(smp_processor_id());
 #endif
 }
 
@@ -740,7 +739,7 @@
                          unsigned long trigger)
 {
        int vector;
-       unsigned int dest = hard_smp_processor_id();
+       unsigned int dest = cpu_physical_id(smp_processor_id());
 
        vector = isa_irq_to_vector(isa_irq);
 
diff -Nru a/include/asm-ia64/smp.h b/include/asm-ia64/smp.h
--- a/include/asm-ia64/smp.h    2005-03-31 18:05:43 -08:00
+++ b/include/asm-ia64/smp.h    2005-03-31 18:05:43 -08:00
@@ -3,16 +3,14 @@
  *
  * Copyright (C) 1999 VA Linux Systems
  * Copyright (C) 1999 Walt Drummond <[EMAIL PROTECTED]>
- * Copyright (C) 2001-2003 Hewlett-Packard Co
+ * (c) Copyright 2001-2003, 2005 Hewlett-Packard Development Company, L.P.
  *     David Mosberger-Tang <[EMAIL PROTECTED]>
+ *     Bjorn Helgaas <[EMAIL PROTECTED]>
  */
 #ifndef _ASM_IA64_SMP_H
 #define _ASM_IA64_SMP_H
 
 #include <linux/config.h>
-
-#ifdef CONFIG_SMP
-
 #include <linux/init.h>
 #include <linux/threads.h>
 #include <linux/kernel.h>
@@ -24,6 +22,25 @@
 #include <asm/processor.h>
 #include <asm/ptrace.h>
 
+static inline unsigned int
+ia64_get_lid (void)
+{
+       union {
+               struct {
+                       unsigned long reserved : 16;
+                       unsigned long eid : 8;
+                       unsigned long id : 8;
+                       unsigned long ignored : 32;
+               } f;
+               unsigned long bits;
+       } lid;
+
+       lid.bits = ia64_getreg(_IA64_REG_CR_LID);
+       return lid.f.id << 8 | lid.f.eid;
+}
+
+#ifdef CONFIG_SMP
+
 #define XTP_OFFSET             0x1e0008
 
 #define SMP_IRQ_REDIRECTION    (1 << 0)
@@ -90,22 +107,7 @@
                writeb(0x0f, ipi_base_addr + XTP_OFFSET); /* Set XTP to max */
 }
 
-static inline unsigned int
-hard_smp_processor_id (void)
-{
-       union {
-               struct {
-                       unsigned long reserved : 16;
-                       unsigned long eid : 8;
-                       unsigned long id : 8;
-                       unsigned long ignored : 32;
-               } f;
-               unsigned long bits;
-       } lid;
-
-       lid.bits = ia64_getreg(_IA64_REG_CR_LID);
-       return lid.f.id << 8 | lid.f.eid;
-}
+#define hard_smp_processor_id()                ia64_get_lid()
 
 /* Upping and downing of CPUs */
 extern int __cpu_disable (void);
@@ -125,7 +127,8 @@
 
 #else
 
-#define cpu_logical_id(cpuid)          0
+#define cpu_logical_id(i)              0
+#define cpu_physical_id(i)             ia64_get_lid()
 
 #endif /* CONFIG_SMP */
 #endif /* _ASM_IA64_SMP_H */
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to