Skip to content

Commit

Permalink
lktdm: add support for hardlockup, softlockup and hung task crashes
Browse files Browse the repository at this point in the history
This adds three new types of kernel "crashes" in the lkdtm driver to
trigger hardlockups, softlockups and task hung states at will.

The first two are useful to test the new generic lockup detector and check
its further regressions.  The latter one is a bonus to check the hung task
detector regressions even though it's not currently in rework.

Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Simon Kagstrom <simon.kagstrom@netinsight.net>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Don Zickus <dzickus@redhat.com>
Cc: Cyrill Gorcunov <gorcunov@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Frederic Weisbecker authored and Linus Torvalds committed May 27, 2010
1 parent 2a2a400 commit a48223f
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions drivers/misc/lkdtm.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,9 @@ enum ctype {
UNALIGNED_LOAD_STORE_WRITE,
OVERWRITE_ALLOCATION,
WRITE_AFTER_FREE,
SOFTLOCKUP,
HARDLOCKUP,
HUNG_TASK,
};

static char* cp_name[] = {
Expand All @@ -99,6 +102,9 @@ static char* cp_type[] = {
"UNALIGNED_LOAD_STORE_WRITE",
"OVERWRITE_ALLOCATION",
"WRITE_AFTER_FREE",
"SOFTLOCKUP",
"HARDLOCKUP",
"HUNG_TASK",
};

static struct jprobe lkdtm;
Expand Down Expand Up @@ -320,6 +326,20 @@ static void lkdtm_do_action(enum ctype which)
memset(data, 0x78, len);
break;
}
case SOFTLOCKUP:
preempt_disable();
for (;;)
cpu_relax();
break;
case HARDLOCKUP:
local_irq_disable();
for (;;)
cpu_relax();
break;
case HUNG_TASK:
set_current_state(TASK_UNINTERRUPTIBLE);
schedule();
break;
case NONE:
default:
break;
Expand Down

0 comments on commit a48223f

Please sign in to comment.