x86_64: acpi: only mask pit irq line during bsp init

This commit is contained in:
2023-05-05 15:20:20 +01:00
parent 7d321fb7f0
commit 2ca1bd0b06

View File

@@ -101,7 +101,7 @@ static struct irq_hook lapic_clock_irq_hook = {
lapic_clock_irq, lapic_clock_irq,
}; };
void local_apic_config_timer(void) void local_apic_config_timer(bool bsp)
{ {
local_apic& lapic = local_apic::get(); local_apic& lapic = local_apic::get();
@@ -110,9 +110,11 @@ void local_apic_config_timer(void)
clock_wait(10); clock_wait(10);
lapic.write(local_apic::LVT_TIMER, APIC_LVT_INT_MASKED); lapic.write(local_apic::LVT_TIMER, APIC_LVT_INT_MASKED);
/* mask IRQ0 to block interrupts from the PIT. */ if (bsp) {
io_apic *irq0_apic = get_ioapic_for_irq(0); /* mask IRQ0 to block interrupts from the PIT. */
irq0_apic->mask_irq(0); io_apic *irq0_apic = get_ioapic_for_irq(0);
irq0_apic->mask_irq(0);
}
uint32_t total_ticks = 0xFFFFFFFF - lapic.read(local_apic::TIMER_CURCOUNT); uint32_t total_ticks = 0xFFFFFFFF - lapic.read(local_apic::TIMER_CURCOUNT);
@@ -178,7 +180,7 @@ kern_status_t ap_apic_init(void)
local_apic_enable(madt); local_apic_enable(madt);
//irq_enable(); //irq_enable();
local_apic_config_timer(); local_apic_config_timer(false);
return KERN_OK; return KERN_OK;
} }
@@ -205,7 +207,7 @@ kern_status_t apic_init(void)
pit_start(HZ); pit_start(HZ);
local_apic_config_timer(); local_apic_config_timer(true);
pit_stop(); pit_stop();
hook_irq(IRQ0, &lapic_clock_irq_hook); hook_irq(IRQ0, &lapic_clock_irq_hook);