• R
    powerpc/powernv: Add a kmsg_dumper that flushes console output on panic · affddff6
    Russell Currey 提交于
    On BMC machines, console output is controlled by the OPAL firmware and is
    only flushed when its pollers are called.  When the kernel is in a panic
    state, it no longer calls these pollers and thus console output does not
    completely flush, causing some output from the panic to be lost.
    
    Output is only actually lost when the kernel is configured to not power off
    or reboot after panic (i.e. CONFIG_PANIC_TIMEOUT is set to 0) since OPAL
    flushes the console buffer as part of its power down routines.  Before this
    patch, however, only partial output would be printed during the timeout wait.
    
    This patch adds a new kmsg_dumper which gets called at panic time to ensure
    panic output is not lost.  It accomplishes this by calling OPAL_CONSOLE_FLUSH
    in the OPAL API, and if that is not available, the pollers are called enough
    times to (hopefully) completely flush the buffer.
    
    The flushing mechanism will only affect output printed at and before the
    kmsg_dump call in kernel/panic.c:panic().  As such, the "end Kernel panic"
    message may still be truncated as follows:
    
    >Call Trace:
    >[c000000f1f603b00] [c0000000008e9458] dump_stack+0x90/0xbc (unreliable)
    >[c000000f1f603b30] [c0000000008e7e78] panic+0xf8/0x2c4
    >[c000000f1f603bc0] [c000000000be4860] mount_block_root+0x288/0x33c
    >[c000000f1f603c80] [c000000000be4d14] prepare_namespace+0x1f4/0x254
    >[c000000f1f603d00] [c000000000be43e8] kernel_init_freeable+0x318/0x350
    >[c000000f1f603dc0] [c00000000000bd74] kernel_init+0x24/0x130
    >[c000000f1f603e30] [c0000000000095b0] ret_from_kernel_thread+0x5c/0xac
    >---[ end Kernel panic - not
    
    This functionality is implemented as a kmsg_dumper as it seems to be the
    most sensible way to introduce platform-specific functionality to the
    panic function.
    Signed-off-by: NRussell Currey <ruscur@russell.cc>
    Reviewed-by: NAndrew Donnellan <andrew.donnellan@au1.ibm.com>
    Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
    affddff6
opal.c 22.0 KB