mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 04:38:03 +00:00
s390/kprobes: Avoid stop machine if possible
Avoid stop machine on kprobes arm/disarm when sequential instruction fetching is present. Reviewed-by: Heiko Carstens <hca@linux.ibm.com> Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
bb91ed0ee3
commit
30799152c3
@ -21,6 +21,7 @@
|
||||
#include <linux/hardirq.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <linux/execmem.h>
|
||||
#include <asm/text-patching.h>
|
||||
#include <asm/set_memory.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/dis.h>
|
||||
@ -152,7 +153,12 @@ void arch_arm_kprobe(struct kprobe *p)
|
||||
{
|
||||
struct swap_insn_args args = {.p = p, .arm_kprobe = 1};
|
||||
|
||||
stop_machine_cpuslocked(swap_instruction, &args, NULL);
|
||||
if (MACHINE_HAS_SEQ_INSN) {
|
||||
swap_instruction(&args);
|
||||
text_poke_sync();
|
||||
} else {
|
||||
stop_machine_cpuslocked(swap_instruction, &args, NULL);
|
||||
}
|
||||
}
|
||||
NOKPROBE_SYMBOL(arch_arm_kprobe);
|
||||
|
||||
@ -160,7 +166,12 @@ void arch_disarm_kprobe(struct kprobe *p)
|
||||
{
|
||||
struct swap_insn_args args = {.p = p, .arm_kprobe = 0};
|
||||
|
||||
stop_machine_cpuslocked(swap_instruction, &args, NULL);
|
||||
if (MACHINE_HAS_SEQ_INSN) {
|
||||
swap_instruction(&args);
|
||||
text_poke_sync();
|
||||
} else {
|
||||
stop_machine_cpuslocked(swap_instruction, &args, NULL);
|
||||
}
|
||||
}
|
||||
NOKPROBE_SYMBOL(arch_disarm_kprobe);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user