summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/soc/qcom/watchdog.h4
-rw-r--r--kernel/locking/spinlock_debug.c7
-rw-r--r--lib/Kconfig.debug16
3 files changed, 26 insertions, 1 deletions
diff --git a/include/soc/qcom/watchdog.h b/include/soc/qcom/watchdog.h
index d82858f30a55..5fbf18143bbe 100644
--- a/include/soc/qcom/watchdog.h
+++ b/include/soc/qcom/watchdog.h
@@ -20,6 +20,10 @@
#define WDOG_BITE_ON_PANIC 0
#endif
+#ifdef CONFIG_MSM_WATCHDOG_V2
void msm_trigger_wdog_bite(void);
+#else
+static inline void msm_trigger_wdog_bite(void) { }
+#endif
#endif
diff --git a/kernel/locking/spinlock_debug.c b/kernel/locking/spinlock_debug.c
index 161eb593ea08..e99d8603de14 100644
--- a/kernel/locking/spinlock_debug.c
+++ b/kernel/locking/spinlock_debug.c
@@ -13,6 +13,7 @@
#include <linux/delay.h>
#include <linux/export.h>
#include <linux/bug.h>
+#include <soc/qcom/watchdog.h>
void __raw_spin_lock_init(raw_spinlock_t *lock, const char *name,
struct lock_class_key *key)
@@ -65,7 +66,11 @@ static void spin_dump(raw_spinlock_t *lock, const char *msg)
owner ? owner->comm : "<none>",
owner ? task_pid_nr(owner) : -1,
lock->owner_cpu);
- BUG_ON(PANIC_CORRUPTION);
+#ifdef CONFIG_DEBUG_SPINLOCK_BITE_ON_BUG
+ msm_trigger_wdog_bite();
+#elif defined(CONFIG_DEBUG_SPINLOCK_PANIC_ON_BUG)
+ BUG();
+#endif
dump_stack();
}
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index 810e6c31d130..de4753d2feb2 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -966,6 +966,22 @@ config DEBUG_SPINLOCK
best used in conjunction with the NMI watchdog so that spinlock
deadlocks are also debuggable.
+config DEBUG_SPINLOCK_BITE_ON_BUG
+ bool "Cause a Watchdog Bite on Spinlock bug"
+ depends on DEBUG_SPINLOCK && !DEBUG_SPINLOCK_PANIC_ON_BUG && MSM_WATCHDOG_V2
+ help
+ On a spinlock bug, cause a watchdog bite so that we can get the precise
+ state of the system captured at the time of spin dump. This is mutually
+ exclusive with the below DEBUG_SPINLOCK_PANIC_ON_BUG config.
+
+config DEBUG_SPINLOCK_PANIC_ON_BUG
+ bool "Cause a Kernel Panic on Spinlock bug"
+ depends on DEBUG_SPINLOCK && !DEBUG_SPINLOCK_BITE_ON_BUG
+ help
+ On a spinlock bug, cause a kernel panic so that we can get the complete
+ information about the system at the time of spin dump in the dmesg.
+ This is mutually exclusive with the above DEBUG_SPINLOCK_BITE_ON_BUG.
+
config DEBUG_MUTEXES
bool "Mutex debugging: basic checks"
depends on DEBUG_KERNEL