diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2012-04-29 03:35:29 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2013-02-03 18:16:01 -0500 |
commit | c886a9fc1f69c0e53788a9c4a780b6b8825bd4ab (patch) | |
tree | dc732cc68efe2bea82d9470a577252685832c44a | |
parent | 4a9d32d377e1facca204cc1c6856406be8b53fa3 (diff) |
microblaze: evict the check for kernel_mode(regs) from do_notify_resume()
Only one caller hasn't done it in assembler - work_pending on !MMU.
Everything else can't reach do_notify_resume() if we are returning
to kernel mode, so move that check to that sole caller and make
do_notify_resume() reachable only when returning to userland.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
-rw-r--r-- | arch/microblaze/kernel/entry-nommu.S | 3 | ||||
-rw-r--r-- | arch/microblaze/kernel/signal.c | 9 |
2 files changed, 3 insertions, 9 deletions
diff --git a/arch/microblaze/kernel/entry-nommu.S b/arch/microblaze/kernel/entry-nommu.S index 70da83a49670..29a05d62ec1a 100644 --- a/arch/microblaze/kernel/entry-nommu.S +++ b/arch/microblaze/kernel/entry-nommu.S | |||
@@ -482,6 +482,8 @@ ENTRY(ret_from_kernel_thread) | |||
482 | addk r3, r0, r0 | 482 | addk r3, r0, r0 |
483 | 483 | ||
484 | work_pending: | 484 | work_pending: |
485 | lwi r11, r1, PT_MODE | ||
486 | bneid r11, 2f | ||
485 | enable_irq | 487 | enable_irq |
486 | 488 | ||
487 | andi r11, r19, _TIF_NEED_RESCHED | 489 | andi r11, r19, _TIF_NEED_RESCHED |
@@ -507,6 +509,7 @@ ENTRY(ret_to_user) | |||
507 | no_work_pending: | 509 | no_work_pending: |
508 | disable_irq | 510 | disable_irq |
509 | 511 | ||
512 | 2: | ||
510 | /* save r31 */ | 513 | /* save r31 */ |
511 | swi r31, r0, PER_CPU(CURRENT_SAVE) | 514 | swi r31, r0, PER_CPU(CURRENT_SAVE) |
512 | /* save mode indicator */ | 515 | /* save mode indicator */ |
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c index dfd61e2f1189..9f7a8bde0686 100644 --- a/arch/microblaze/kernel/signal.c +++ b/arch/microblaze/kernel/signal.c | |||
@@ -343,15 +343,6 @@ static void do_signal(struct pt_regs *regs, int in_syscall) | |||
343 | 343 | ||
344 | asmlinkage void do_notify_resume(struct pt_regs *regs, int in_syscall) | 344 | asmlinkage void do_notify_resume(struct pt_regs *regs, int in_syscall) |
345 | { | 345 | { |
346 | /* | ||
347 | * We want the common case to go fast, which | ||
348 | * is why we may in certain cases get here from | ||
349 | * kernel mode. Just return without doing anything | ||
350 | * if so. | ||
351 | */ | ||
352 | if (kernel_mode(regs)) | ||
353 | return; | ||
354 | |||
355 | if (test_thread_flag(TIF_SIGPENDING)) | 346 | if (test_thread_flag(TIF_SIGPENDING)) |
356 | do_signal(regs, in_syscall); | 347 | do_signal(regs, in_syscall); |
357 | 348 | ||