mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-27 09:26:23 +07:00
2874c5fd28
Based on 1 normalized pattern(s): this program is free software you can redistribute it and or modify it under the terms of the gnu general public license as published by the free software foundation either version 2 of the license or at your option any later version extracted by the scancode license scanner the SPDX license identifier GPL-2.0-or-later has been chosen to replace the boilerplate/reference in 3029 file(s). Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Allison Randal <allison@lohutok.net> Cc: linux-spdx@vger.kernel.org Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0-or-later
|
|
/*
|
|
* kmsg dumper that ensures the OPAL console fully flushes panic messages
|
|
*
|
|
* Author: Russell Currey <ruscur@russell.cc>
|
|
*
|
|
* Copyright 2015 IBM Corporation.
|
|
*/
|
|
|
|
#include <linux/kmsg_dump.h>
|
|
|
|
#include <asm/opal.h>
|
|
#include <asm/opal-api.h>
|
|
|
|
/*
|
|
* Console output is controlled by OPAL firmware. The kernel regularly calls
|
|
* OPAL_POLL_EVENTS, which flushes some console output. In a panic state,
|
|
* however, the kernel no longer calls OPAL_POLL_EVENTS and the panic message
|
|
* may not be completely printed. This function does not actually dump the
|
|
* message, it just ensures that OPAL completely flushes the console buffer.
|
|
*/
|
|
static void kmsg_dump_opal_console_flush(struct kmsg_dumper *dumper,
|
|
enum kmsg_dump_reason reason)
|
|
{
|
|
/*
|
|
* Outside of a panic context the pollers will continue to run,
|
|
* so we don't need to do any special flushing.
|
|
*/
|
|
if (reason != KMSG_DUMP_PANIC)
|
|
return;
|
|
|
|
opal_flush_console(0);
|
|
}
|
|
|
|
static struct kmsg_dumper opal_kmsg_dumper = {
|
|
.dump = kmsg_dump_opal_console_flush
|
|
};
|
|
|
|
void __init opal_kmsg_init(void)
|
|
{
|
|
int rc;
|
|
|
|
/* Add our dumper to the list */
|
|
rc = kmsg_dump_register(&opal_kmsg_dumper);
|
|
if (rc != 0)
|
|
pr_err("opal: kmsg_dump_register failed; returned %d\n", rc);
|
|
}
|