svn commit: r195002 - in head/sys: amd64/amd64 amd64/include i386/i386 i386/include

John Baldwin jhb at FreeBSD.org
Thu Jun 25 20:35:47 UTC 2009


Author: jhb
Date: Thu Jun 25 20:35:46 2009
New Revision: 195002
URL: http://svn.freebsd.org/changeset/base/195002

Log:
  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

Modified:
  head/sys/amd64/amd64/intr_machdep.c
  head/sys/amd64/include/intr_machdep.h
  head/sys/i386/i386/intr_machdep.c
  head/sys/i386/include/intr_machdep.h

Modified: head/sys/amd64/amd64/intr_machdep.c
==============================================================================
--- head/sys/amd64/amd64/intr_machdep.c	Thu Jun 25 20:09:53 2009	(r195001)
+++ head/sys/amd64/amd64/intr_machdep.c	Thu Jun 25 20:35:46 2009	(r195002)
@@ -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

Modified: head/sys/amd64/include/intr_machdep.h
==============================================================================
--- head/sys/amd64/include/intr_machdep.h	Thu Jun 25 20:09:53 2009	(r195001)
+++ head/sys/amd64/include/intr_machdep.h	Thu Jun 25 20:35:46 2009	(r195002)
@@ -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);

Modified: head/sys/i386/i386/intr_machdep.c
==============================================================================
--- head/sys/i386/i386/intr_machdep.c	Thu Jun 25 20:09:53 2009	(r195001)
+++ head/sys/i386/i386/intr_machdep.c	Thu Jun 25 20:35:46 2009	(r195002)
@@ -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

Modified: head/sys/i386/include/intr_machdep.h
==============================================================================
--- head/sys/i386/include/intr_machdep.h	Thu Jun 25 20:09:53 2009	(r195001)
+++ head/sys/i386/include/intr_machdep.h	Thu Jun 25 20:35:46 2009	(r195002)
@@ -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);


More information about the svn-src-head mailing list