• Nicholas Piggin's avatar
    powerpc/64s/exception: machine check pseries should skip the late handler for kernel MCEs · 272f6364
    Nicholas Piggin authored
    The powernv machine check handler copes with taking a MCE from one of
    three contexts, guest, kernel, and user. In each case the early
    handler runs first on a special stack, then:
    
    - The guest case branches to the KVM interrupt handler (via standard
      interrupt macros).
    - The user case will run the "late" handler which is like a normal
      interrupt that runs in virtual mode and uses the regular kernel
      stack.
    - The kernel case queues the event and schedules it for processing
      with irq work.
    
    The last case is important, it must not enable virtual memory because
    the MMU state may not be set up to deal with that (e.g., SLB might be
    clear), it must not use the regular kernel stack for similar reasons
    (e.g., might be in OPAL with OPAL stack in r1), and the kernel does
    not expect anything to touch its stack if interrupts are disabled.
    
    The pseries handler does not do this queueing, but instead it always
    runs the late handler for host MCEs, which has some of the same
    problems.
    
    Now that pseries is using machine_check_events, change it to do the
    same as powernv and queue events for kernel MCEs.
    Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/20190802105709.27696-11-npiggin@gmail.com
    272f6364
exceptions-64s.S 69.6 KB