lib: spinlock: Cause a watchdog bite on spin_dump

Currently we cause a BUG_ON once a spin_bug is detected, but
that causes a whole lot of processing and the other CPUs would
have proceeded to perform other actions and the state of the
system is moved by the time we can analyze it.
Provide an option to trigger  a watchdog bite instead so that we
can get the traces as close to the issue as possible.

Change-Id:Ic8d692ebd02c6940a3b4e5798463744db20b0026
Signed-off-by: Rohit Vaswani <rvaswani@codeaurora.org>
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
This commit is contained in:
Rohit Vaswani
2014-10-02 21:02:56 -07:00
committed by Rishabh Bhatnagar
parent b31fc5d204
commit e0965e6590
2 changed files with 30 additions and 0 deletions

View File

@@ -12,6 +12,8 @@
#include <linux/debug_locks.h>
#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)
@@ -64,6 +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);
#ifdef CONFIG_DEBUG_SPINLOCK_BITE_ON_BUG
msm_trigger_wdog_bite();
#elif defined(CONFIG_DEBUG_SPINLOCK_PANIC_ON_BUG)
BUG();
#endif
dump_stack();
}

View File

@@ -1039,6 +1039,29 @@ config LOCK_DEBUGGING_SUPPORT
depends on TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
default y
choice
prompt "Perform Action on spinlock bug"
depends on DEBUG_SPINLOCK
default DEBUG_SPINLOCK_BITE_ON_BUG
config DEBUG_SPINLOCK_BITE_ON_BUG
bool "Cause a Watchdog Bite on Spinlock bug"
depends on QCOM_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"
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.
endchoice
config PROVE_LOCKING
bool "Lock debugging: prove locking correctness"
depends on DEBUG_KERNEL && LOCK_DEBUGGING_SUPPORT