patch-2.4.21 linux-2.4.21/arch/x86_64/kernel/smp.c
Next file: linux-2.4.21/arch/x86_64/kernel/smpboot.c
Previous file: linux-2.4.21/arch/x86_64/kernel/signal.c
Back to the patch index
Back to the overall index
- Lines: 55
- Date:
2003-06-13 07:51:32.000000000 -0700
- Orig file:
linux-2.4.20/arch/x86_64/kernel/smp.c
- Orig date:
2002-11-28 15:53:12.000000000 -0800
diff -urN linux-2.4.20/arch/x86_64/kernel/smp.c linux-2.4.21/arch/x86_64/kernel/smp.c
@@ -3,6 +3,7 @@
*
* (c) 1995 Alan Cox, Building #3 <alan@redhat.com>
* (c) 1998-99, 2000 Ingo Molnar <mingo@redhat.com>
+ * (c) 2002,2003 Andi Kleen, SuSE Labs.
*
* This code is released under the GNU General Public License version 2 or
* later.
@@ -114,8 +115,6 @@
static inline unsigned int __prepare_ICR (unsigned int shortcut, int vector)
{
unsigned int icr = APIC_DM_FIXED | shortcut | vector | APIC_DEST_LOGICAL;
- if (vector == KDB_VECTOR)
- icr = (icr & (~APIC_VECTOR_MASK)) | APIC_DM_NMI;
return icr;
}
@@ -411,11 +410,6 @@
do_flush_tlb_all_local();
}
-void smp_kdb_stop(void)
-{
- send_IPI_allbutself(KDB_VECTOR);
-}
-
/*
* this function sends a 'reschedule' IPI to another CPU.
* it goes straight through and wastes no time serializing
@@ -553,3 +547,25 @@
}
}
+/* Slow. Should be only used for debugging. */
+int slow_smp_processor_id(void)
+{
+ int stack_location;
+ unsigned long sp = (unsigned long)&stack_location;
+ int offset = 0, cpu;
+
+ for (offset = 0; (cpu_online_map >> offset); offset = cpu + 1) {
+ cpu = ffz(~(cpu_online_map >> offset));
+
+ if (sp >= (u64)cpu_pda[cpu].irqstackptr - IRQSTACKSIZE &&
+ sp <= (u64)cpu_pda[cpu].irqstackptr)
+ return cpu;
+
+ unsigned long estack = init_tss[cpu].ist[0] - EXCEPTION_STKSZ;
+ if (sp >= estack && sp <= estack+(1<<(PAGE_SHIFT+EXCEPTION_STK_ORDER)))
+ return cpu;
+ }
+
+ return stack_smp_processor_id();
+}
+
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)