From: Cyrill Gorcunov on
In case even if the kernel is configured so that
no APIC support is built-in we still may allow
to use sertain apic functions as a dummy calls.

In particular we start using it in perf-events code.

Note that this is not that same as NOOP apic driver,
the reverse -- we don't have apic code compiled at all.

CC: H. Peter Anvin <hpa(a)zytor.com>
CC: Ingo Molnar <mingo(a)elte.hu>
CC: Thomas Gleixner <tglx(a)linutronix.de>
CC: Yinghai Lu <yinghai(a)kernel.org>
Signed-off-by: Cyrill Gorcunov <gorcunov(a)openvz.org>
---
arch/x86/include/asm/apic.h | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)

Index: linux-2.6.git/arch/x86/include/asm/apic.h
=====================================================================
--- linux-2.6.git.orig/arch/x86/include/asm/apic.h
+++ linux-2.6.git/arch/x86/include/asm/apic.h
@@ -373,6 +373,7 @@ extern atomic_t init_deasserted;
extern int wakeup_secondary_cpu_via_nmi(int apicid, unsigned long start_eip);
#endif

+#ifdef CONFIG_X86_LOCAL_APIC
static inline u32 apic_read(u32 reg)
{
return apic->read(reg);
@@ -403,10 +404,19 @@ static inline u32 safe_apic_wait_icr_idl
return apic->safe_wait_icr_idle();
}

+#else /* CONFIG_X86_LOCAL_APIC */
+
+static inline u32 apic_read(u32 reg) { return 0; }
+static inline void apic_write(u32 reg, u32 val) { }
+static inline u64 apic_icr_read(void) { return 0; }
+static inline void apic_icr_write(u32 low, u32 high) { }
+static inline void apic_wait_icr_idle(void) { }
+static inline u32 safe_apic_wait_icr_idle(void) { return 0; }
+
+#endif /* CONFIG_X86_LOCAL_APIC */

static inline void ack_APIC_irq(void)
{
-#ifdef CONFIG_X86_LOCAL_APIC
/*
* ack_APIC_irq() actually gets compiled as a single instruction
* ... yummie.
@@ -414,7 +424,6 @@ static inline void ack_APIC_irq(void)

/* Docs say use 0 for future compatibility */
apic_write(APIC_EOI, 0);
-#endif
}

static inline unsigned default_get_apic_id(unsigned long x)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo(a)vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/