• Vivek Goyal's avatar
    [PATCH] i386 kdump timer vector lockup fix · 1a75a3f0
    Vivek Goyal authored
    Porting the patch I posted for x86_64 to i386.
    
    http://marc.theaimsgroup.com/?l=linux-kernel&m=114178139610707&w=2
    
    o While using kdump, after a system crash when second kernel boots, timer
      vector gets (0x31) locked and CPU does not see timer interrupts
      travelling from IOAPIC to APIC.  Currently it does not lead to boot
      failure in second kernel as timer interrupts continues to come as ExtInt
      through LAPIC directly, but fixing it is good in case some boards do not
      support the other mode.
    
    o After a system crash, it is not safe to service interrupts any more,
      hence interrupts are disabled.  This leads to pending interrupts at
      LAPIC.  LAPIC sends these interrupts to the CPU during early boot of
      second kernel.  Other pending interrupts are discarded saying unexpected
      trap but timer interrupt is serviced and CPU does not issue an LAPIC EOI
      because it think this interrupt came from i8259 and sends ack to 8259.
      This leads to vector 0x31 locking as LAPIC does not clear respective ISR
      and keeps on waiting for EOI.
    
    o This patch issues extra EOI for the pending interrupts who have ISR set.
    
    o Though today only timer seems to be the special case because in early
      boot it thinks interrupts are coming from i8259 and uses
      mask_and_ack_8259A() as ack handler and does not issue LAPIC EOI.  But
      probably doing it in generic manner for all vectors makes sense.
    Signed-off-by: default avatarVivek Goyal <vgoyal@in.ibm.com>
    Cc: "Eric W. Biederman" <ebiederm@xmission.com>
    Cc: Andi Kleen <ak@muc.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    1a75a3f0
apic.c 33.2 KB