mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 23:32:14 +00:00
x86: apic - introduce dummy apic operations
Impact: refactor, speed up and robustize code In case if apic was disabled by kernel option or by hardware limits we can use dummy operations in apic->write to simplify the ack_APIC_irq() code. At the lame time the patch fixes the missed EOI in do_IRQ function (which has place if kernel is compiled as X86-32 and interrupt without handler happens where apic was not asked to be disabled via kernel option). Note that native_apic_write_dummy() consists of WARN_ON_ONCE to catch any buggy writes on enabled APICs. Could be removed after some time of testing. Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org> LKML-Reference: <20090412165058.724788431@openvz.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
c0eaa4536f
commit
08306ce61d
3 changed files with 28 additions and 9 deletions
|
@ -232,6 +232,24 @@ static int modern_apic(void)
|
|||
return lapic_get_version() >= 0x14;
|
||||
}
|
||||
|
||||
/*
|
||||
* bare function to substitute write operation
|
||||
* and it's _that_ fast :)
|
||||
*/
|
||||
void native_apic_write_dummy(u32 reg, u32 v)
|
||||
{
|
||||
WARN_ON_ONCE((cpu_has_apic || !disable_apic));
|
||||
}
|
||||
|
||||
/*
|
||||
* right after this call apic->write doesn't do anything
|
||||
* note that there is no restore operation it works one way
|
||||
*/
|
||||
void apic_disable(void)
|
||||
{
|
||||
apic->write = native_apic_write_dummy;
|
||||
}
|
||||
|
||||
void native_apic_wait_icr_idle(void)
|
||||
{
|
||||
while (apic_read(APIC_ICR) & APIC_ICR_BUSY)
|
||||
|
@ -1582,6 +1600,12 @@ void __init init_apic_mappings(void)
|
|||
*/
|
||||
if (boot_cpu_physical_apicid == -1U)
|
||||
boot_cpu_physical_apicid = read_apic_id();
|
||||
|
||||
/* lets check if we may to NOP'ify apic operations */
|
||||
if (!cpu_has_apic) {
|
||||
pr_info("APIC: disable apic facility\n");
|
||||
apic_disable();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue