linux/arch/powerpc/include/asm/papr-watchdog.h
Sourabh Jain fb43ba4256 powerpc/crash: stop watchdogs before booting kdump kernel
On pseries LPAR systems, watchdog timers configured from userspace can
remain active after a kernel panic. When a panic triggers kdump, the
crashing kernel jumps directly to the kdump kernel without stopping
active watchdogs. As a result, the watchdogs remain active after the
kdump kernel starts.

If dump capture takes longer than the watchdog timeout, PHYP resets the
LPAR before the dump is fully captured, causing dump capture to fail.

Fix this by issuing the `H_WATCHDOG` hcall during the crash shutdown
sequence to stop all active watchdogs before booting the kdump kernel.

Cc: stable@vger.kernel.org
Fixes: 69472ffa65 ("watchdog/pseries-wdt: initial support for H_WATCHDOG-based watchdog timers")
Reported-by: Mahesh Kumar G <mahe657@linux.ibm.com>
Suggested-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Reviewed-by: Ritesh Harjani (IBM) <ritesh.list@gmail.com>
Signed-off-by: Sourabh Jain <sourabhjain@linux.ibm.com>
Signed-off-by: Madhavan Srinivasan <maddy@linux.ibm.com>
Link: https://patch.msgid.link/20260727053416.276317-4-sourabhjain@linux.ibm.com
2026-08-03 14:05:55 +05:30

65 lines
1.8 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
#ifndef _ASM_POWERPC_PAPR_WATCHDOG_H
#define _ASM_POWERPC_PAPR_WATCHDOG_H
/*
* H_WATCHDOG Input
*
* R4: "flags":
*
* Bits 48-55: "operation"
*/
#define PSERIES_WDTF_OP_START 0x100UL /* start timer */
#define PSERIES_WDTF_OP_STOP 0x200UL /* stop timer */
#define PSERIES_WDTF_OP_QUERY 0x300UL /* query timer capabilities */
/*
* Bits 56-63: "timeoutAction" (for "Start Watchdog" only)
*/
#define PSERIES_WDTF_ACTION_HARD_POWEROFF 0x1UL /* poweroff */
#define PSERIES_WDTF_ACTION_HARD_RESTART 0x2UL /* restart */
#define PSERIES_WDTF_ACTION_DUMP_RESTART 0x3UL /* dump + restart */
/*
* R5: "watchdogNumber":
* PAPR says use -1 (all ones) to stop all watchdogs.
*/
#define PSERIES_WDT_NUM_ALL ((unsigned long)-1)
/*
* H_WATCHDOG Output
*
* R3: Return code
*
* H_SUCCESS The operation completed.
*
* H_BUSY The hypervisor is too busy; retry the operation.
*
* H_PARAMETER The given "flags" are somehow invalid. Either the
* "operation" or "timeoutAction" is invalid, or a
* reserved bit is set.
*
* H_P2 The given "watchdogNumber" is zero or exceeds the
* supported maximum value.
*
* H_P3 The given "timeoutInMs" is below the supported
* minimum value.
*
* H_NOOP The given "watchdogNumber" is already stopped.
*
* H_HARDWARE The operation failed for ineffable reasons.
*
* H_FUNCTION The H_WATCHDOG hypercall is not supported by this
* hypervisor.
*
* R4:
*
* - For the "Query Watchdog Capabilities" operation, a 64-bit
* structure:
*/
#define PSERIES_WDTQ_MIN_TIMEOUT(cap) (((cap) >> 48) & 0xffff)
#define PSERIES_WDTQ_MAX_NUMBER(cap) (((cap) >> 32) & 0xffff)
#endif /* _ASM_POWERPC_PAPR_WATCHDOG_H */