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
This commit is contained in:
attilio 2012-04-09 22:41:19 +00:00
parent 4360dc9ca8
commit 6c01a6d7fd
4 changed files with 10 additions and 8 deletions

View File

@ -295,6 +295,11 @@ cpu_startup(dummy)
vm_pager_bufferinit();
cpu_setregs();
/*
* Add BSP as an interrupt target.
*/
intr_add_cpu(0);
}
/*

View File

@ -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;

View File

@ -336,6 +336,11 @@ cpu_startup(dummy)
#ifndef XEN
cpu_setregs();
#endif
/*
* Add BSP as an interrupt target.
*/
intr_add_cpu(0);
}
/*

View File

@ -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;