diff options
Diffstat (limited to 'arch/sh/kernel/process.c')
-rw-r--r-- | arch/sh/kernel/process.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index 329b3f3051de..6b4f5748d0be 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c | |||
@@ -15,9 +15,12 @@ | |||
15 | #include <linux/pm.h> | 15 | #include <linux/pm.h> |
16 | #include <linux/kallsyms.h> | 16 | #include <linux/kallsyms.h> |
17 | #include <linux/kexec.h> | 17 | #include <linux/kexec.h> |
18 | #include <asm/kdebug.h> | 18 | #include <linux/kdebug.h> |
19 | #include <linux/tick.h> | ||
19 | #include <asm/uaccess.h> | 20 | #include <asm/uaccess.h> |
20 | #include <asm/mmu_context.h> | 21 | #include <asm/mmu_context.h> |
22 | #include <asm/pgalloc.h> | ||
23 | #include <asm/system.h> | ||
21 | #include <asm/ubc.h> | 24 | #include <asm/ubc.h> |
22 | 25 | ||
23 | static int hlt_counter; | 26 | static int hlt_counter; |
@@ -58,12 +61,15 @@ void cpu_idle(void) | |||
58 | if (!idle) | 61 | if (!idle) |
59 | idle = default_idle; | 62 | idle = default_idle; |
60 | 63 | ||
64 | tick_nohz_stop_sched_tick(); | ||
61 | while (!need_resched()) | 65 | while (!need_resched()) |
62 | idle(); | 66 | idle(); |
67 | tick_nohz_restart_sched_tick(); | ||
63 | 68 | ||
64 | preempt_enable_no_resched(); | 69 | preempt_enable_no_resched(); |
65 | schedule(); | 70 | schedule(); |
66 | preempt_disable(); | 71 | preempt_disable(); |
72 | check_pgt_cache(); | ||
67 | } | 73 | } |
68 | } | 74 | } |
69 | 75 | ||
@@ -495,9 +501,9 @@ asmlinkage void debug_trap_handler(unsigned long r4, unsigned long r5, | |||
495 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); | 501 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); |
496 | 502 | ||
497 | /* Rewind */ | 503 | /* Rewind */ |
498 | regs->pc -= 2; | 504 | regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); |
499 | 505 | ||
500 | if (notify_die(DIE_TRAP, regs, regs->tra & 0xff, | 506 | if (notify_die(DIE_TRAP, "debug trap", regs, 0, regs->tra & 0xff, |
501 | SIGTRAP) == NOTIFY_STOP) | 507 | SIGTRAP) == NOTIFY_STOP) |
502 | return; | 508 | return; |
503 | 509 | ||
@@ -514,9 +520,9 @@ asmlinkage void bug_trap_handler(unsigned long r4, unsigned long r5, | |||
514 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); | 520 | struct pt_regs *regs = RELOC_HIDE(&__regs, 0); |
515 | 521 | ||
516 | /* Rewind */ | 522 | /* Rewind */ |
517 | regs->pc -= 2; | 523 | regs->pc -= instruction_size(ctrl_inw(regs->pc - 4)); |
518 | 524 | ||
519 | if (notify_die(DIE_TRAP, regs, TRAPA_BUG_OPCODE & 0xff, | 525 | if (notify_die(DIE_TRAP, "bug trap", regs, 0, TRAPA_BUG_OPCODE & 0xff, |
520 | SIGTRAP) == NOTIFY_STOP) | 526 | SIGTRAP) == NOTIFY_STOP) |
521 | return; | 527 | return; |
522 | 528 | ||