svn commit: r234074 - in head/sys: amd64/amd64 i386/i386

Attilio Rao attilio at FreeBSD.org
Mon Apr 9 22:41:20 UTC 2012


Author: attilio
Date: Mon Apr  9 22:41:19 2012
New Revision: 234074
URL: http://svn.freebsd.org/changeset/base/234074

Log:
  BSP is not added to the mask of valid target CPUs for interrupts
  in set_apic_interrupt_ids(). Besides, set_apic_interrupts_ids() is not
  called in the !SMP case too.
  Fix this by:
  - Adding the BSP as an interrupt target directly in cpu_startup().
  - Remove an obsolete optimization where the BSP are skipped in
    set_apic_interrupt_ids().
  
  Reported by:	jh
  Reviewed by:	jhb
  MFC after:	3 days
  X-MFC:		r233961
  Pointy hat to:	me

Modified:
  head/sys/amd64/amd64/machdep.c
  head/sys/amd64/amd64/mp_machdep.c
  head/sys/i386/i386/machdep.c
  head/sys/i386/i386/mp_machdep.c

Modified: head/sys/amd64/amd64/machdep.c
==============================================================================
--- head/sys/amd64/amd64/machdep.c	Mon Apr  9 22:01:43 2012	(r234073)
+++ head/sys/amd64/amd64/machdep.c	Mon Apr  9 22:41:19 2012	(r234074)
@@ -295,6 +295,11 @@ cpu_startup(dummy)
 	vm_pager_bufferinit();
 
 	cpu_setregs();
+
+	/*
+	 * Add BSP as an interrupt target.
+	 */
+	intr_add_cpu(0);
 }
 
 /*

Modified: head/sys/amd64/amd64/mp_machdep.c
==============================================================================
--- head/sys/amd64/amd64/mp_machdep.c	Mon Apr  9 22:01:43 2012	(r234073)
+++ head/sys/amd64/amd64/mp_machdep.c	Mon Apr  9 22:41:19 2012	(r234074)
@@ -785,8 +785,6 @@ init_secondary(void)
  * We tell the I/O APIC code about all the CPUs we want to receive
  * interrupts.  If we don't want certain CPUs to receive IRQs we
  * can simply not tell the I/O APIC code about them in this function.
- * We also do not tell it about the BSP since it tells itself about
- * the BSP internally to work with UP kernels and on UP machines.
  */
 static void
 set_interrupt_apic_ids(void)
@@ -797,8 +795,6 @@ set_interrupt_apic_ids(void)
 		apic_id = cpu_apic_ids[i];
 		if (apic_id == -1)
 			continue;
-		if (cpu_info[apic_id].cpu_bsp)
-			continue;
 		if (cpu_info[apic_id].cpu_disabled)
 			continue;
 

Modified: head/sys/i386/i386/machdep.c
==============================================================================
--- head/sys/i386/i386/machdep.c	Mon Apr  9 22:01:43 2012	(r234073)
+++ head/sys/i386/i386/machdep.c	Mon Apr  9 22:41:19 2012	(r234074)
@@ -336,6 +336,11 @@ cpu_startup(dummy)
 #ifndef XEN
 	cpu_setregs();
 #endif
+
+	/*
+	 * Add BSP as an interrupt target.
+	 */
+	intr_add_cpu(0);
 }
 
 /*

Modified: head/sys/i386/i386/mp_machdep.c
==============================================================================
--- head/sys/i386/i386/mp_machdep.c	Mon Apr  9 22:01:43 2012	(r234073)
+++ head/sys/i386/i386/mp_machdep.c	Mon Apr  9 22:41:19 2012	(r234074)
@@ -819,8 +819,6 @@ init_secondary(void)
  * We tell the I/O APIC code about all the CPUs we want to receive
  * interrupts.  If we don't want certain CPUs to receive IRQs we
  * can simply not tell the I/O APIC code about them in this function.
- * We also do not tell it about the BSP since it tells itself about
- * the BSP internally to work with UP kernels and on UP machines.
  */
 static void
 set_interrupt_apic_ids(void)
@@ -831,8 +829,6 @@ set_interrupt_apic_ids(void)
 		apic_id = cpu_apic_ids[i];
 		if (apic_id == -1)
 			continue;
-		if (cpu_info[apic_id].cpu_bsp)
-			continue;
 		if (cpu_info[apic_id].cpu_disabled)
 			continue;
 


More information about the svn-src-head mailing list