diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86_64/kernel/apic.c | 28 |
1 files changed, 2 insertions, 26 deletions
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c index c6ca100a7dea..78c43b1a3064 100644 --- a/arch/x86_64/kernel/apic.c +++ b/arch/x86_64/kernel/apic.c | |||
@@ -399,32 +399,8 @@ void __cpuinit setup_local_APIC (void) | |||
399 | */ | 399 | */ |
400 | value |= APIC_SPIV_APIC_ENABLED; | 400 | value |= APIC_SPIV_APIC_ENABLED; |
401 | 401 | ||
402 | /* | 402 | /* We always use processor focus */ |
403 | * Some unknown Intel IO/APIC (or APIC) errata are biting us with | 403 | |
404 | * certain networking cards. If high frequency interrupts are | ||
405 | * happening on a particular IOAPIC pin, plus the IOAPIC routing | ||
406 | * entry is masked/unmasked at a high rate as well then sooner or | ||
407 | * later IOAPIC line gets 'stuck', no more interrupts are received | ||
408 | * from the device. If focus CPU is disabled then the hang goes | ||
409 | * away, oh well :-( | ||
410 | * | ||
411 | * [ This bug can be reproduced easily with a level-triggered | ||
412 | * PCI Ne2000 networking cards and PII/PIII processors, dual | ||
413 | * BX chipset. ] | ||
414 | */ | ||
415 | /* | ||
416 | * Actually disabling the focus CPU check just makes the hang less | ||
417 | * frequent as it makes the interrupt distributon model be more | ||
418 | * like LRU than MRU (the short-term load is more even across CPUs). | ||
419 | * See also the comment in end_level_ioapic_irq(). --macro | ||
420 | */ | ||
421 | #if 1 | ||
422 | /* Enable focus processor (bit==0) */ | ||
423 | value &= ~APIC_SPIV_FOCUS_DISABLED; | ||
424 | #else | ||
425 | /* Disable focus processor (bit==1) */ | ||
426 | value |= APIC_SPIV_FOCUS_DISABLED; | ||
427 | #endif | ||
428 | /* | 404 | /* |
429 | * Set spurious IRQ vector | 405 | * Set spurious IRQ vector |
430 | */ | 406 | */ |