diff options
author | Qing Zhang <zhangqing@loongson.cn> | 2023-02-25 10:52:57 +0300 |
---|---|---|
committer | Huacai Chen <chenhuacai@loongson.cn> | 2023-02-25 17:12:17 +0300 |
commit | edffa33c7bb5a73e90c754c7a497162b77d7c55f (patch) | |
tree | 64292d0bc9301134eaeafd6a02977cc9e8913fd6 /arch/loongarch/include/asm/switch_to.h | |
parent | 35c94fab6eee72d60d9cd8d1e6e43e1f77b1dce2 (diff) | |
download | linux-edffa33c7bb5a73e90c754c7a497162b77d7c55f.tar.xz |
LoongArch: Add hardware breakpoints/watchpoints support
Use perf framework to manage hardware instruction and data breakpoints.
LoongArch defines hardware watchpoint functions for instruction fetch
and memory load/store operations. After the software configures hardware
watchpoints, the processor hardware will monitor the access address of
the instruction fetch and load/store operation, and trigger an exception
of the watchpoint when it meets the conditions set by the watchpoint.
The hardware monitoring points for instruction fetching and load/store
operations each have a register for the overall configuration of all
monitoring points, a register for recording the status of all monitoring
points, and four registers required for configuration of each watchpoint
individually.
Signed-off-by: Qing Zhang <zhangqing@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
Diffstat (limited to 'arch/loongarch/include/asm/switch_to.h')
-rw-r--r-- | arch/loongarch/include/asm/switch_to.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/loongarch/include/asm/switch_to.h b/arch/loongarch/include/asm/switch_to.h index 43a5ab162d38..24e3094bebab 100644 --- a/arch/loongarch/include/asm/switch_to.h +++ b/arch/loongarch/include/asm/switch_to.h @@ -34,6 +34,7 @@ extern asmlinkage struct task_struct *__switch_to(struct task_struct *prev, #define switch_to(prev, next, last) \ do { \ lose_fpu_inatomic(1, prev); \ + hw_breakpoint_thread_switch(next); \ (last) = __switch_to(prev, next, task_thread_info(next), \ __builtin_return_address(0), __builtin_frame_address(0)); \ } while (0) |