mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 18:41:58 +09:00
APEI: GHES: Have GHES honor the panic= setting
[ Upstream commit 5c0e00a391dd0099fe95991bb2f962848d851916 ] The GHES driver overrides the panic= setting by force-rebooting the system after a fatal hw error has been reported. The intent being that such an error would be reported earlier. However, this is not optimal when a hard-to-debug issue requires long time to reproduce and when that happens, the box will get rebooted after 30 seconds and thus destroy the whole hw context of when the error happened. So rip out the default GHES panic timeout and honor the global one. In the panic disabled (panic=0) case, the error will still be logged to dmesg for later inspection and if panic after a hw error is really required, then that can be controlled the usual way - use panic= on the cmdline or set it in the kernel .config's CONFIG_PANIC_TIMEOUT. Reported-by: Feng Tang <feng.tang@linux.alibaba.com> Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> Reviewed-by: Feng Tang <feng.tang@linux.alibaba.com> Reviewed-by: Ira Weiny <ira.weiny@intel.com> Link: https://patch.msgid.link/20250113125224.GFZ4UMiNtWIJvgpveU@fat_crate.local Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f2e5a46a27
commit
87fc26b018
@@ -155,8 +155,6 @@ static unsigned long ghes_estatus_pool_size_request;
|
|||||||
static struct ghes_estatus_cache *ghes_estatus_caches[GHES_ESTATUS_CACHES_SIZE];
|
static struct ghes_estatus_cache *ghes_estatus_caches[GHES_ESTATUS_CACHES_SIZE];
|
||||||
static atomic_t ghes_estatus_cache_alloced;
|
static atomic_t ghes_estatus_cache_alloced;
|
||||||
|
|
||||||
static int ghes_panic_timeout __read_mostly = 30;
|
|
||||||
|
|
||||||
static void __iomem *ghes_map(u64 pfn, enum fixed_addresses fixmap_idx)
|
static void __iomem *ghes_map(u64 pfn, enum fixed_addresses fixmap_idx)
|
||||||
{
|
{
|
||||||
phys_addr_t paddr;
|
phys_addr_t paddr;
|
||||||
@@ -858,14 +856,16 @@ static void __ghes_panic(struct ghes *ghes,
|
|||||||
struct acpi_hest_generic_status *estatus,
|
struct acpi_hest_generic_status *estatus,
|
||||||
u64 buf_paddr, enum fixed_addresses fixmap_idx)
|
u64 buf_paddr, enum fixed_addresses fixmap_idx)
|
||||||
{
|
{
|
||||||
|
const char *msg = GHES_PFX "Fatal hardware error";
|
||||||
|
|
||||||
__ghes_print_estatus(KERN_EMERG, ghes->generic, estatus);
|
__ghes_print_estatus(KERN_EMERG, ghes->generic, estatus);
|
||||||
|
|
||||||
ghes_clear_estatus(ghes, estatus, buf_paddr, fixmap_idx);
|
ghes_clear_estatus(ghes, estatus, buf_paddr, fixmap_idx);
|
||||||
|
|
||||||
/* reboot to log the error! */
|
|
||||||
if (!panic_timeout)
|
if (!panic_timeout)
|
||||||
panic_timeout = ghes_panic_timeout;
|
pr_emerg("%s but panic disabled\n", msg);
|
||||||
panic("Fatal hardware error!");
|
|
||||||
|
panic(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ghes_proc(struct ghes *ghes)
|
static int ghes_proc(struct ghes *ghes)
|
||||||
|
|||||||
Reference in New Issue
Block a user