From 4e9dba6322bc7959003745dd59d33bc0778a15da Mon Sep 17 00:00:00 2001 From: John Baldwin Date: Thu, 25 Jun 2009 20:35:46 +0000 Subject: [PATCH] Fix kernels compiled without SMP support. Make intr_next_cpu() available for UP kernels but as a stub that always returns the single CPU's local APIC ID. Reported by: kib --- sys/amd64/amd64/intr_machdep.c | 10 ++++++++++ sys/amd64/include/intr_machdep.h | 2 -- sys/i386/i386/intr_machdep.c | 10 ++++++++++ sys/i386/include/intr_machdep.h | 2 -- 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/sys/amd64/amd64/intr_machdep.c b/sys/amd64/amd64/intr_machdep.c index 34820f72abb..186baf5dca6 100644 --- a/sys/amd64/amd64/intr_machdep.c +++ b/sys/amd64/amd64/intr_machdep.c @@ -518,4 +518,14 @@ intr_shuffle_irqs(void *arg __unused) } SYSINIT(intr_shuffle_irqs, SI_SUB_SMP, SI_ORDER_SECOND, intr_shuffle_irqs, NULL); +#else +/* + * Always route interrupts to the current processor in the UP case. + */ +u_int +intr_next_cpu(void) +{ + + return (PCPU_GET(apic_id)); +} #endif diff --git a/sys/amd64/include/intr_machdep.h b/sys/amd64/include/intr_machdep.h index bad8bf2c8c5..6092e6260b2 100644 --- a/sys/amd64/include/intr_machdep.h +++ b/sys/amd64/include/intr_machdep.h @@ -152,9 +152,7 @@ int intr_bind(u_int vector, u_char cpu); int intr_config_intr(int vector, enum intr_trigger trig, enum intr_polarity pol); void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame); -#ifdef SMP u_int intr_next_cpu(void); -#endif struct intsrc *intr_lookup_source(int vector); int intr_register_pic(struct pic *pic); int intr_register_source(struct intsrc *isrc); diff --git a/sys/i386/i386/intr_machdep.c b/sys/i386/i386/intr_machdep.c index eedc682d812..a5c7d000bcc 100644 --- a/sys/i386/i386/intr_machdep.c +++ b/sys/i386/i386/intr_machdep.c @@ -491,4 +491,14 @@ intr_shuffle_irqs(void *arg __unused) } SYSINIT(intr_shuffle_irqs, SI_SUB_SMP, SI_ORDER_SECOND, intr_shuffle_irqs, NULL); +#else +/* + * Always route interrupts to the current processor in the UP case. + */ +u_int +intr_next_cpu(void) +{ + + return (PCPU_GET(apic_id)); +} #endif diff --git a/sys/i386/include/intr_machdep.h b/sys/i386/include/intr_machdep.h index 052f9bd917f..aa026b64230 100644 --- a/sys/i386/include/intr_machdep.h +++ b/sys/i386/include/intr_machdep.h @@ -139,9 +139,7 @@ int intr_bind(u_int vector, u_char cpu); int intr_config_intr(int vector, enum intr_trigger trig, enum intr_polarity pol); void intr_execute_handlers(struct intsrc *isrc, struct trapframe *frame); -#ifdef SMP u_int intr_next_cpu(void); -#endif struct intsrc *intr_lookup_source(int vector); int intr_register_pic(struct pic *pic); int intr_register_source(struct intsrc *isrc);