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>
This commit is contained in:
Родитель
4a9d32d377
Коммит
c886a9fc1f
|
@ -482,6 +482,8 @@ ENTRY(ret_from_kernel_thread)
|
||||||
addk r3, r0, r0
|
addk r3, r0, r0
|
||||||
|
|
||||||
work_pending:
|
work_pending:
|
||||||
|
lwi r11, r1, PT_MODE
|
||||||
|
bneid r11, 2f
|
||||||
enable_irq
|
enable_irq
|
||||||
|
|
||||||
andi r11, r19, _TIF_NEED_RESCHED
|
andi r11, r19, _TIF_NEED_RESCHED
|
||||||
|
@ -507,6 +509,7 @@ ENTRY(ret_to_user)
|
||||||
no_work_pending:
|
no_work_pending:
|
||||||
disable_irq
|
disable_irq
|
||||||
|
|
||||||
|
2:
|
||||||
/* save r31 */
|
/* save r31 */
|
||||||
swi r31, r0, PER_CPU(CURRENT_SAVE)
|
swi r31, r0, PER_CPU(CURRENT_SAVE)
|
||||||
/* save mode indicator */
|
/* save mode indicator */
|
||||||
|
|
|
@ -343,15 +343,6 @@ static void do_signal(struct pt_regs *regs, int in_syscall)
|
||||||
|
|
||||||
asmlinkage void do_notify_resume(struct pt_regs *regs, int in_syscall)
|
asmlinkage void do_notify_resume(struct pt_regs *regs, int in_syscall)
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
* We want the common case to go fast, which
|
|
||||||
* is why we may in certain cases get here from
|
|
||||||
* kernel mode. Just return without doing anything
|
|
||||||
* if so.
|
|
||||||
*/
|
|
||||||
if (kernel_mode(regs))
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (test_thread_flag(TIF_SIGPENDING))
|
if (test_thread_flag(TIF_SIGPENDING))
|
||||||
do_signal(regs, in_syscall);
|
do_signal(regs, in_syscall);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче