mirror of
https://github.com/hermitcore/libhermit.git
synced 2025-03-09 00:00:03 +01:00
set apic_read/_write also if Linux (& not HermitCore) enables x2APIC
This commit is contained in:
parent
f506a1423d
commit
10606d5a42
1 changed files with 10 additions and 5 deletions
|
@ -150,12 +150,16 @@ int apic_is_enabled(void)
|
|||
return (lapic && initialized);
|
||||
}
|
||||
|
||||
extern uint32_t disable_x2apic;
|
||||
|
||||
static inline void x2apic_disable(void)
|
||||
{
|
||||
uint64_t msr;
|
||||
|
||||
if (!has_x2apic())
|
||||
return;
|
||||
if (!disable_x2apic)
|
||||
return;
|
||||
|
||||
msr = rdmsr(MSR_APIC_BASE);
|
||||
if (!(msr & MSR_X2APIC_ENABLE)) {
|
||||
|
@ -179,6 +183,11 @@ static inline void x2apic_enable(void)
|
|||
if (!has_x2apic())
|
||||
return;
|
||||
|
||||
if (lapic_read != lapic_read_msr)
|
||||
lapic_read = lapic_read_msr;
|
||||
if (lapic_write != lapic_write_msr)
|
||||
lapic_write = lapic_write_msr;
|
||||
|
||||
msr = rdmsr(MSR_APIC_BASE);
|
||||
if (msr & MSR_X2APIC_ENABLE) {
|
||||
kprintf("X2APIC already enabled!\n");
|
||||
|
@ -188,8 +197,6 @@ static inline void x2apic_enable(void)
|
|||
wrmsr(MSR_APIC_BASE, msr | MSR_X2APIC_ENABLE);
|
||||
|
||||
kprintf("Enable X2APIC support!\n");
|
||||
lapic_read = lapic_read_msr;
|
||||
lapic_write = lapic_write_msr;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -780,8 +787,6 @@ static void apic_err_handler(struct state *s)
|
|||
kprintf("Got APIC error 0x%x\n", lapic_read(APIC_ESR));
|
||||
}
|
||||
|
||||
extern uint32_t disable_x2apic;
|
||||
|
||||
void shutdown_system(void)
|
||||
{
|
||||
int if_bootprocessor = (apic_processors[boot_processor]->id == apic_cpu_id());
|
||||
|
@ -809,7 +814,7 @@ void shutdown_system(void)
|
|||
lapic_write(APIC_SVR, 0x00); // disable the apic
|
||||
|
||||
// disable x2APIC
|
||||
if (if_bootprocessor && disable_x2apic)
|
||||
if (if_bootprocessor)
|
||||
x2apic_disable();
|
||||
|
||||
if (if_bootprocessor)
|
||||
|
|
Loading…
Add table
Reference in a new issue