diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-13 12:49:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-13 12:49:04 -0400 |
commit | dcf397f037f52add9945eced57ca300ab6a4413c (patch) | |
tree | e78767d164589e9097a54bf564b072fb01f80820 /arch/sh/kernel/process.c | |
parent | 6faf035cf9fdd8283c2b2b2c34b76b5445ec6fc4 (diff) | |
parent | 68ee0f9c98a42e36f9eab29155b2bb0e7e409ac6 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (124 commits)
sh: allow building for both r2d boards in same binary.
sh: fix r2d board detection
sh: Discard .exit.text/.exit.data at runtime.
sh: Fix up some section alignments in linker script.
sh: Fix SH-4 DMAC CHCR masking.
sh: Rip out left-over nommu cond syscall cruft.
sh: Make kgdb i-cache flushing less inept.
sh: kgdb section mismatches and tidying.
sh: cleanup struct irqaction initializers.
sh: early_printk tidying.
video: pvr2fb: Add TV (RGB) support to Dreamcast PVR driver.
sh: Conditionalize gUSA support.
sh: Follow gUSA preempt changes in __switch_to().
sh: Tidy up gUSA preempt handling.
sh: __copy_user() optimizations for small copies.
sh: clkfwk: Support multi-level clock propagation.
sh: Fix URAM start address on SH7785.
sh: Use boot_cpu_data for CPU probe.
sh: Support extended mode TLB on SH-X3.
sh: Bump MAX_ACTIVE_REGIONS for SH7785.
...
Diffstat (limited to 'arch/sh/kernel/process.c')
-rw-r--r-- | arch/sh/kernel/process.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/sh/kernel/process.c b/arch/sh/kernel/process.c index 15ae322dbd74..b4469992d6b2 100644 --- a/arch/sh/kernel/process.c +++ b/arch/sh/kernel/process.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/tick.h> | 19 | #include <linux/tick.h> |
20 | #include <linux/reboot.h> | 20 | #include <linux/reboot.h> |
21 | #include <linux/fs.h> | 21 | #include <linux/fs.h> |
22 | #include <linux/preempt.h> | ||
22 | #include <asm/uaccess.h> | 23 | #include <asm/uaccess.h> |
23 | #include <asm/mmu_context.h> | 24 | #include <asm/mmu_context.h> |
24 | #include <asm/pgalloc.h> | 25 | #include <asm/pgalloc.h> |
@@ -349,12 +350,11 @@ struct task_struct *__switch_to(struct task_struct *prev, | |||
349 | unlazy_fpu(prev, task_pt_regs(prev)); | 350 | unlazy_fpu(prev, task_pt_regs(prev)); |
350 | #endif | 351 | #endif |
351 | 352 | ||
352 | #ifdef CONFIG_PREEMPT | 353 | #if defined(CONFIG_GUSA) && defined(CONFIG_PREEMPT) |
353 | { | 354 | { |
354 | unsigned long flags; | ||
355 | struct pt_regs *regs; | 355 | struct pt_regs *regs; |
356 | 356 | ||
357 | local_irq_save(flags); | 357 | preempt_disable(); |
358 | regs = task_pt_regs(prev); | 358 | regs = task_pt_regs(prev); |
359 | if (user_mode(regs) && regs->regs[15] >= 0xc0000000) { | 359 | if (user_mode(regs) && regs->regs[15] >= 0xc0000000) { |
360 | int offset = (int)regs->regs[15]; | 360 | int offset = (int)regs->regs[15]; |
@@ -365,7 +365,7 @@ struct task_struct *__switch_to(struct task_struct *prev, | |||
365 | /* Go to rewind point */ | 365 | /* Go to rewind point */ |
366 | regs->pc = regs->regs[0] + offset; | 366 | regs->pc = regs->regs[0] + offset; |
367 | } | 367 | } |
368 | local_irq_restore(flags); | 368 | preempt_enable_no_resched(); |
369 | } | 369 | } |
370 | #endif | 370 | #endif |
371 | 371 | ||