Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 9 Apr 2012 22:41:19 +0000 (UTC)
From:      Attilio Rao <attilio@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r234074 - in head/sys: amd64/amd64 i386/i386
Message-ID:  <201204092241.q39MfJZn081610@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201204092241.q39MfJZn081610>