[PATCH] Add SysRq-Q to print timer_list debug info
Add SysRq-Q to print pending timers and other timer info. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: john stultz <johnstul@us.ibm.com> Cc: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
289f480af8
commit
88ad0bf689
@@ -36,6 +36,7 @@
|
|||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/hrtimer.h>
|
||||||
|
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/irq_regs.h>
|
#include <asm/irq_regs.h>
|
||||||
@@ -158,6 +159,17 @@ static struct sysrq_key_op sysrq_sync_op = {
|
|||||||
.enable_mask = SYSRQ_ENABLE_SYNC,
|
.enable_mask = SYSRQ_ENABLE_SYNC,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void sysrq_handle_show_timers(int key, struct tty_struct *tty)
|
||||||
|
{
|
||||||
|
sysrq_timer_list_show();
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct sysrq_key_op sysrq_show_timers_op = {
|
||||||
|
.handler = sysrq_handle_show_timers,
|
||||||
|
.help_msg = "show-all-timers(Q)",
|
||||||
|
.action_msg = "Show Pending Timers",
|
||||||
|
};
|
||||||
|
|
||||||
static void sysrq_handle_mountro(int key, struct tty_struct *tty)
|
static void sysrq_handle_mountro(int key, struct tty_struct *tty)
|
||||||
{
|
{
|
||||||
emergency_remount();
|
emergency_remount();
|
||||||
@@ -335,7 +347,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = {
|
|||||||
/* o: This will often be registered as 'Off' at init time */
|
/* o: This will often be registered as 'Off' at init time */
|
||||||
NULL, /* o */
|
NULL, /* o */
|
||||||
&sysrq_showregs_op, /* p */
|
&sysrq_showregs_op, /* p */
|
||||||
NULL, /* q */
|
&sysrq_show_timers_op, /* q */
|
||||||
&sysrq_unraw_op, /* r */
|
&sysrq_unraw_op, /* r */
|
||||||
&sysrq_sync_op, /* s */
|
&sysrq_sync_op, /* s */
|
||||||
&sysrq_showstate_op, /* t */
|
&sysrq_showstate_op, /* t */
|
||||||
|
@@ -316,6 +316,9 @@ extern unsigned long ktime_divns(const ktime_t kt, s64 div);
|
|||||||
# define ktime_divns(kt, div) (unsigned long)((kt).tv64 / (div))
|
# define ktime_divns(kt, div) (unsigned long)((kt).tv64 / (div))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Show pending timers: */
|
||||||
|
extern void sysrq_timer_list_show(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Timer-statistics info:
|
* Timer-statistics info:
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user