OSDN Git Service

MIPS: Fix watchpoint restoration
authorJames Hogan <james.hogan@imgtec.com>
Tue, 1 Mar 2016 22:19:36 +0000 (22:19 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Jun 2016 01:14:30 +0000 (18:14 -0700)
commit68d64569ff9568752eee68ee2fceaf68725834e9
tree3e9e6b74a6d5dca067cbced91129e59efb202ff7
parentd59a1b85d6b7d16485f5362077e2ed9a5c9022cd
MIPS: Fix watchpoint restoration

commit a7e89326b415b5d81c4b1016fd4a40db861eb58d upstream.

Commit f51246efee2b ("MIPS: Get rid of finish_arch_switch().") moved the
__restore_watch() call from finish_arch_switch() (i.e. after resume()
returns) to before the resume() call in switch_to(). This results in
watchpoints only being restored when a task is descheduled, preventing
the watchpoints from being effective most of the time, except due to
chance before the watchpoints are lazily removed.

Fix the call sequence from switch_to() through to
mips_install_watch_registers() to pass the task_struct pointer of the
next task, instead of using current. This allows the watchpoints for the
next (non-current) task to be restored without reintroducing
finish_arch_switch().

Fixes: f51246efee2b ("MIPS: Get rid of finish_arch_switch().")
Signed-off-by: James Hogan <james.hogan@imgtec.com>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: linux-mips@linux-mips.org
Patchwork: https://patchwork.linux-mips.org/patch/12726/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/mips/include/asm/switch_to.h
arch/mips/include/asm/watch.h
arch/mips/kernel/pm.c
arch/mips/kernel/watch.c