diff options
Diffstat (limited to 'drivers/misc')
| -rw-r--r-- | drivers/misc/lkdtm.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/drivers/misc/lkdtm.c b/drivers/misc/lkdtm.c index 31a991161f0..5bfb2a2041b 100644 --- a/drivers/misc/lkdtm.c +++ b/drivers/misc/lkdtm.c | |||
| @@ -75,6 +75,9 @@ enum ctype { | |||
| 75 | UNALIGNED_LOAD_STORE_WRITE, | 75 | UNALIGNED_LOAD_STORE_WRITE, |
| 76 | OVERWRITE_ALLOCATION, | 76 | OVERWRITE_ALLOCATION, |
| 77 | WRITE_AFTER_FREE, | 77 | WRITE_AFTER_FREE, |
| 78 | SOFTLOCKUP, | ||
| 79 | HARDLOCKUP, | ||
| 80 | HUNG_TASK, | ||
| 78 | }; | 81 | }; |
| 79 | 82 | ||
| 80 | static char* cp_name[] = { | 83 | static char* cp_name[] = { |
| @@ -99,6 +102,9 @@ static char* cp_type[] = { | |||
| 99 | "UNALIGNED_LOAD_STORE_WRITE", | 102 | "UNALIGNED_LOAD_STORE_WRITE", |
| 100 | "OVERWRITE_ALLOCATION", | 103 | "OVERWRITE_ALLOCATION", |
| 101 | "WRITE_AFTER_FREE", | 104 | "WRITE_AFTER_FREE", |
| 105 | "SOFTLOCKUP", | ||
| 106 | "HARDLOCKUP", | ||
| 107 | "HUNG_TASK", | ||
| 102 | }; | 108 | }; |
| 103 | 109 | ||
| 104 | static struct jprobe lkdtm; | 110 | static struct jprobe lkdtm; |
| @@ -320,6 +326,20 @@ static void lkdtm_do_action(enum ctype which) | |||
| 320 | memset(data, 0x78, len); | 326 | memset(data, 0x78, len); |
| 321 | break; | 327 | break; |
| 322 | } | 328 | } |
| 329 | case SOFTLOCKUP: | ||
| 330 | preempt_disable(); | ||
| 331 | for (;;) | ||
| 332 | cpu_relax(); | ||
| 333 | break; | ||
| 334 | case HARDLOCKUP: | ||
| 335 | local_irq_disable(); | ||
| 336 | for (;;) | ||
| 337 | cpu_relax(); | ||
| 338 | break; | ||
| 339 | case HUNG_TASK: | ||
| 340 | set_current_state(TASK_UNINTERRUPTIBLE); | ||
| 341 | schedule(); | ||
| 342 | break; | ||
| 323 | case NONE: | 343 | case NONE: |
| 324 | default: | 344 | default: |
| 325 | break; | 345 | break; |
