ARM: hw_breakpoint: do not allocate new breakpoints with preemption disabled
authorWill Deacon <will.deacon@arm.com>
Mon, 29 Nov 2010 16:56:01 +0000 (16:56 +0000)
committerWill Deacon <will.deacon@arm.com>
Mon, 6 Dec 2010 11:55:57 +0000 (11:55 +0000)
commit93a04a3416da12647c47840ebe2bb812fcb801d0
treebee210af11e5a3c4d7ff33f50916819b2190ea81
parent0017ff42ac37ff6aeb87d0b006c5d32b9a39f5fc
ARM: hw_breakpoint: do not allocate new breakpoints with preemption disabled

The watchpoint single-stepping code calls register_user_hw_breakpoint to
register a mismatch breakpoint for stepping over the watchpoint. This is
performed with preemption disabled, which is unsafe as we may end up scheduling
whilst in_atomic(). Furthermore, using the perf API is rather overkill since
we are already in the hw-breakpoint backend and only require access to reserved
breakpoints anyway.

This patch reworks the watchpoint stepping code so that we don't require
another perf_event for the mismatch breakpoint. Instead, we hold a separate
arch_hw_breakpoint_ctrl struct inside the watchpoint which is used exclusively
for stepping. We can check whether or not stepping is enabled when installing
or uninstalling the watchpoint and operate on the breakpoint accordingly.

Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm/include/asm/hw_breakpoint.h
arch/arm/kernel/hw_breakpoint.c