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-all
mailing list