arm64: kernel: restore HW breakpoint registers in cpu_suspend
authorLorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>
Fri, 10 Jan 2014 13:15:05 +0000 (13:15 +0000)
committerAlex Shi <alex.shi@linaro.org>
Mon, 10 Mar 2014 05:38:37 +0000 (13:38 +0800)
commitd8823fd71870cfef3968e00a9b2481c364cb8452
treef60cf252c9b09b8746447f7b9d15a0e388d29c22
parent797bca32b8f2ba6cf4aa9ad19f0ba1580d7bd9a4
arm64: kernel: restore HW breakpoint registers in cpu_suspend

When a CPU resumes from low-power, it restores HW breakpoint and
watchpoint slots through a CPU PM notifier. Since we want to enable
debugging as early as possible in the resume path, the mdscr content
is restored along the general purpose registers in the cpu_suspend API
and debug exceptions are reenabled when cpu_suspend returns. Since the
CPU PM notifier is run after a CPU has been resumed, we cannot expect
HW breakpoint registers to contain sane values till the notifier is run,
since the HW breakpoints registers content is unknown at reset; this means
that the CPU might run with debug exceptions enabled, mdscr restored but HW
breakpoint registers containing junk values that can trigger spurious
debug exceptions.

This patch fixes current HW breakpoints restore by moving the HW breakpoints
registers restoration to the cpu_suspend API, before the debug exceptions are
enabled. This way, as soon as the cpu_suspend function returns the
kernel can resume debugging with sane values in HW breakpoint registers.

Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Acked-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
arch/arm64/kernel/hw_breakpoint.c
arch/arm64/kernel/suspend.c