Index: arch/ia32/include/cpu.h
===================================================================
--- arch/ia32/include/cpu.h	(revision 8a78e68a764f51401e8328994a376ce7472c4b87)
+++ arch/ia32/include/cpu.h	(revision 7b7d7d1cbbddea9be6f0e75c0adabf7bda19ad53)
@@ -30,6 +30,13 @@
 #define __ia32_CPU_H__
 
+#include <config.h>
 #include <typedefs.h>
 #include <arch/pm.h>
+
+#ifdef __SMP__
+#define CPU_ID_ARCH	(config.cpu_count>1?l_apic_id():0)
+#else
+#define CPU_ID_ARCH	(0)
+#endif
 
 struct cpu_arch {
Index: arch/ia32/include/smp/apic.h
===================================================================
--- arch/ia32/include/smp/apic.h	(revision 8a78e68a764f51401e8328994a376ce7472c4b87)
+++ arch/ia32/include/smp/apic.h	(revision 7b7d7d1cbbddea9be6f0e75c0adabf7bda19ad53)
@@ -96,4 +96,6 @@
 #define L_APIC_ID	(0x020/sizeof(__u32))
 #define L_APIC_IDClear	(~(0xf<<24))
+#define L_APIC_IDShift	24
+#define L_APIC_IDMask	0xf
 
 /* IO APIC */
@@ -121,4 +123,5 @@
 extern void l_apic_debug(void);
 extern void l_apic_timer_interrupt(__u8 n, __u32 stack[]);
+extern __u8 l_apic_id(void);
 
 extern __u32 io_apic_read(__u8 address);
