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 | ||
