Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a460246c authored by Masami Hiramatsu's avatar Masami Hiramatsu Committed by Michael Ellerman
Browse files

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).

Tested-by: default avatarNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Signed-off-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 97da3854
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -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;
}