From 56ebfff5ebc5d9b6ca2d9bb7671b9851b4373077 Mon Sep 17 00:00:00 2001 From: Will McVicker Date: Mon, 13 Apr 2020 17:12:00 -0700 Subject: [PATCH] ANDROID: GKI: panic: add vendor callback function in panic() Each vendor might want to implement some debug code when the kernel panics. So, add a vendor_panic_cb callback for vendors to implement. Bug: 149258398 Test: compile Change-Id: I7a374b0089f72c2511db6fe3b8cdd18f41a1eb6c Signed-off-by: Saravana Kannan (cherry picked from commit 911d9c70c2c50b0383ed0b652bb84ca8832e4a2b) Signed-off-by: Will McVicker [willmcvicker: only pulled in the ABI diffs] --- include/linux/kernel.h | 1 + kernel/panic.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index f6f94e54ab96..f03f598ae2ae 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -323,6 +323,7 @@ static inline void might_fault(void) { } #endif extern struct atomic_notifier_head panic_notifier_list; +extern void (*vendor_panic_cb)(u64 sp); extern long (*panic_blink)(int state); __printf(1, 2) void panic(const char *fmt, ...) __noreturn __cold; diff --git a/kernel/panic.c b/kernel/panic.c index 8138a676fb7d..cbcfbbfb95fa 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -47,9 +47,11 @@ int panic_timeout = CONFIG_PANIC_TIMEOUT; EXPORT_SYMBOL_GPL(panic_timeout); ATOMIC_NOTIFIER_HEAD(panic_notifier_list); - EXPORT_SYMBOL(panic_notifier_list); +void (*vendor_panic_cb)(u64 sp); +EXPORT_SYMBOL_GPL(vendor_panic_cb); + static long no_blink(int state) { return 0; @@ -177,6 +179,8 @@ void panic(const char *fmt, ...) va_start(args, fmt); vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); + if (vendor_panic_cb) + vendor_panic_cb(0); pr_emerg("Kernel panic - not syncing: %s\n", buf); #ifdef CONFIG_DEBUG_BUGVERBOSE /*