Thread (7 messages) flat view 7 messages, 3 authors, 2017-02-16

Re: [PATCH 1/3] powerpc: kprobes: add support for KPROBES_ON_FTRACE

From: Naveen N. Rao <hidden>
Date: 2017-02-16 19:50:57
Also in: lkml

On 2017/02/15 04:11PM, Masami Hiramatsu wrote:
Hi Naveen,

On Wed, 15 Feb 2017 00:28:34 +0530
"Naveen N. Rao" [off-list ref] wrote:
quoted
diff --git a/arch/powerpc/kernel/optprobes.c b/arch/powerpc/kernel/optprobes.c
index e51a045f3d3b..a8f414a0b141 100644
--- a/arch/powerpc/kernel/optprobes.c
+++ b/arch/powerpc/kernel/optprobes.c
@@ -70,6 +70,9 @@ static unsigned long can_optimize(struct kprobe *p)
 	struct instruction_op op;
 	unsigned long nip = 0;
 
+	if (unlikely(kprobe_ftrace(p)))
+		return 0;
+
Hmm, this should not be checked in arch-depend code, since it may duplicate
code in each arch. Please try below.
Thanks, Masami!
Thanks,

commit 897bb304974c1b0c19a4274fea220b175b07f353
Author: Masami Hiramatsu [off-list ref]
Date:   Wed Feb 15 15:48:14 2017 +0900

    kprobes: Skip preparing optprobe if the probe is ftrace-based
    
    Skip preparing optprobe if the probe is ftrace-based, since
    anyway, it must not be optimized (or already optimized by
    ftrace).
    
    Signed-off-by: Masami Hiramatsu [off-list ref]
This works for me.
Tested-by: Naveen N. Rao <redacted>


Regards,
Naveen

quoted hunk ↗ jump to hunk
diff --git a/kernel/kprobes.c b/kernel/kprobes.c
index ebb4dad..546a8b1 100644
--- a/kernel/kprobes.c
+++ b/kernel/kprobes.c
@@ -746,13 +746,20 @@ static void kill_optimized_kprobe(struct kprobe *p)
 	arch_remove_optimized_kprobe(op);
 }

+static inline
+void __prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe *p)
+{
+	if (!kprobe_ftrace(p))
+		arch_prepare_optimized_kprobe(op, p);
+}
+
 /* Try to prepare optimized instructions */
 static void prepare_optimized_kprobe(struct kprobe *p)
 {
 	struct optimized_kprobe *op;

 	op = container_of(p, struct optimized_kprobe, kp);
-	arch_prepare_optimized_kprobe(op, p);
+	__prepare_optimized_kprobe(op, p);
 }

 /* Allocate new optimized_kprobe and try to prepare optimized instructions */
@@ -766,7 +773,7 @@ static struct kprobe *alloc_aggr_kprobe(struct kprobe *p)

 	INIT_LIST_HEAD(&op->list);
 	op->kp.addr = p->addr;
-	arch_prepare_optimized_kprobe(op, p);
+	__prepare_optimized_kprobe(op, p);

 	return &op->kp;
 }


-- 
Masami Hiramatsu <mhiramat@kernel.org>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help