All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <mhiramat@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>,
	Ingo Molnar <mingo@redhat.com>, "H . Peter Anvin" <hpa@zytor.com>,
	linux-kernel@vger.kernel.org,
	Ananth N Mavinakayanahalli <ananth@linux.vnet.ibm.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	linux-arch@vger.kernel.org,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Paul Mackerras <paulus@samba.org>,
	Michael Ellerman <mpe@ellerman.id.au>,
	linuxppc-dev@lists.ozlabs.org
Subject: [PATCH -tip v6 07/27] powerpc/kprobes: Remove jprobe powerpc implementation
Date: Wed, 20 Jun 2018 01:07:32 +0900	[thread overview]
Message-ID: <152942445234.15209.12868722778364739753.stgit@devbox> (raw)
In-Reply-To: <152942424698.15209.15245996287444292393.stgit@devbox>

Remove arch dependent setjump/longjump functions
and unused fields in kprobe_ctlblk for jprobes
from arch/powerpc. This also reverts commits
related __is_active_jprobe() function.

Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
Acked-by: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/include/asm/kprobes.h             |    2 -
 arch/powerpc/kernel/kprobes-ftrace.c           |   15 -------
 arch/powerpc/kernel/kprobes.c                  |   54 ------------------------
 arch/powerpc/kernel/trace/ftrace_64_mprofile.S |   39 ++---------------
 4 files changed, 5 insertions(+), 105 deletions(-)

diff --git a/arch/powerpc/include/asm/kprobes.h b/arch/powerpc/include/asm/kprobes.h
index 9f3be5c8a4a3..674036db558b 100644
--- a/arch/powerpc/include/asm/kprobes.h
+++ b/arch/powerpc/include/asm/kprobes.h
@@ -88,7 +88,6 @@ struct prev_kprobe {
 struct kprobe_ctlblk {
 	unsigned long kprobe_status;
 	unsigned long kprobe_saved_msr;
-	struct pt_regs jprobe_saved_regs;
 	struct prev_kprobe prev_kprobe;
 };
 
@@ -104,7 +103,6 @@ extern int kprobe_fault_handler(struct pt_regs *regs, int trapnr);
 extern int kprobe_handler(struct pt_regs *regs);
 extern int kprobe_post_handler(struct pt_regs *regs);
 #ifdef CONFIG_KPROBES_ON_FTRACE
-extern int __is_active_jprobe(unsigned long addr);
 extern int skip_singlestep(struct kprobe *p, struct pt_regs *regs,
 			   struct kprobe_ctlblk *kcb);
 #else
diff --git a/arch/powerpc/kernel/kprobes-ftrace.c b/arch/powerpc/kernel/kprobes-ftrace.c
index 7a1f99f1b47f..1b316331c2d9 100644
--- a/arch/powerpc/kernel/kprobes-ftrace.c
+++ b/arch/powerpc/kernel/kprobes-ftrace.c
@@ -25,21 +25,6 @@
 #include <linux/preempt.h>
 #include <linux/ftrace.h>
 
-/*
- * This is called from ftrace code after invoking registered handlers to
- * disambiguate regs->nip changes done by jprobes and livepatch. We check if
- * there is an active jprobe at the provided address (mcount location).
- */
-int __is_active_jprobe(unsigned long addr)
-{
-	if (!preemptible()) {
-		struct kprobe *p = raw_cpu_read(current_kprobe);
-		return (p && (unsigned long)p->addr == addr) ? 1 : 0;
-	}
-
-	return 0;
-}
-
 static nokprobe_inline
 int __skip_singlestep(struct kprobe *p, struct pt_regs *regs,
 		      struct kprobe_ctlblk *kcb, unsigned long orig_nip)
diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
index e4c5bf33970b..600678fce0a8 100644
--- a/arch/powerpc/kernel/kprobes.c
+++ b/arch/powerpc/kernel/kprobes.c
@@ -611,60 +611,6 @@ unsigned long arch_deref_entry_point(void *entry)
 }
 NOKPROBE_SYMBOL(arch_deref_entry_point);
 
-int setjmp_pre_handler(struct kprobe *p, struct pt_regs *regs)
-{
-	struct jprobe *jp = container_of(p, struct jprobe, kp);
-	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
-
-	memcpy(&kcb->jprobe_saved_regs, regs, sizeof(struct pt_regs));
-
-	/* setup return addr to the jprobe handler routine */
-	regs->nip = arch_deref_entry_point(jp->entry);
-#ifdef PPC64_ELF_ABI_v2
-	regs->gpr[12] = (unsigned long)jp->entry;
-#elif defined(PPC64_ELF_ABI_v1)
-	regs->gpr[2] = (unsigned long)(((func_descr_t *)jp->entry)->toc);
-#endif
-
-	/*
-	 * jprobes use jprobe_return() which skips the normal return
-	 * path of the function, and this messes up the accounting of the
-	 * function graph tracer.
-	 *
-	 * Pause function graph tracing while performing the jprobe function.
-	 */
-	pause_graph_tracing();
-
-	return 1;
-}
-NOKPROBE_SYMBOL(setjmp_pre_handler);
-
-void __used jprobe_return(void)
-{
-	asm volatile("jprobe_return_trap:\n"
-		     "trap\n"
-		     ::: "memory");
-}
-NOKPROBE_SYMBOL(jprobe_return);
-
-int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
-{
-	struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
-
-	if (regs->nip != ppc_kallsyms_lookup_name("jprobe_return_trap")) {
-		pr_debug("longjmp_break_handler NIP (0x%lx) does not match jprobe_return_trap (0x%lx)\n",
-				regs->nip, ppc_kallsyms_lookup_name("jprobe_return_trap"));
-		return 0;
-	}
-
-	memcpy(regs, &kcb->jprobe_saved_regs, sizeof(struct pt_regs));
-	/* It's OK to start function graph tracing again */
-	unpause_graph_tracing();
-	preempt_enable_no_resched();
-	return 1;
-}
-NOKPROBE_SYMBOL(longjmp_break_handler);
-
 static struct kprobe trampoline_p = {
 	.addr = (kprobe_opcode_t *) &kretprobe_trampoline,
 	.pre_handler = trampoline_probe_handler
diff --git a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
index 9a5b5a513604..32476a6e4e9c 100644
--- a/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
+++ b/arch/powerpc/kernel/trace/ftrace_64_mprofile.S
@@ -104,39 +104,13 @@ ftrace_regs_call:
 	bl	ftrace_stub
 	nop
 
-	/* Load the possibly modified NIP */
-	ld	r15, _NIP(r1)
-
+	/* Load ctr with the possibly modified NIP */
+	ld	r3, _NIP(r1)
+	mtctr	r3
 #ifdef CONFIG_LIVEPATCH
-	cmpd	r14, r15	/* has NIP been altered? */
+	cmpd	r14, r3		/* has NIP been altered? */
 #endif
 
-#if defined(CONFIG_LIVEPATCH) && defined(CONFIG_KPROBES_ON_FTRACE)
-	/* NIP has not been altered, skip over further checks */
-	beq	1f
-
-	/* Check if there is an active jprobe on us */
-	subi	r3, r14, 4
-	bl	__is_active_jprobe
-	nop
-
-	/*
-	 * If r3 == 1, then this is a kprobe/jprobe.
-	 * else, this is livepatched function.
-	 *
-	 * The conditional branch for livepatch_handler below will use the
-	 * result of this comparison. For kprobe/jprobe, we just need to branch to
-	 * the new NIP, not call livepatch_handler. The branch below is bne, so we
-	 * want CR0[EQ] to be true if this is a kprobe/jprobe. Which means we want
-	 * CR0[EQ] = (r3 == 1).
-	 */
-	cmpdi	r3, 1
-1:
-#endif
-
-	/* Load CTR with the possibly modified NIP */
-	mtctr	r15
-
 	/* Restore gprs */
 	REST_GPR(0,r1)
 	REST_10GPRS(2,r1)
@@ -154,10 +128,7 @@ ftrace_regs_call:
 	addi r1, r1, SWITCH_FRAME_SIZE
 
 #ifdef CONFIG_LIVEPATCH
-        /*
-	 * Based on the cmpd or cmpdi above, if the NIP was altered and we're
-	 * not on a kprobe/jprobe, then handle livepatch.
-	 */
+        /* Based on the cmpd above, if the NIP was altered handle livepatch */
 	bne-	livepatch_handler
 #endif
 


  parent reply	other threads:[~2018-06-19 16:08 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-19 16:04 [PATCH -tip v6 00/27] kprobes: Cleanup jprobe implementation Masami Hiramatsu
2018-06-19 16:04 ` [PATCH -tip v6 01/27] Documentation/kprobes: Fix to remove remaining jprobe Masami Hiramatsu
2018-06-19 16:04   ` Masami Hiramatsu
2018-06-19 16:05 ` [PATCH -tip v6 02/27] kprobes: Remove jprobe API implementation Masami Hiramatsu
2018-06-19 16:05 ` [PATCH -tip v6 03/27] kprobes/x86: Remove jprobe implementation Masami Hiramatsu
2018-06-19 16:06 ` [PATCH -tip v6 04/27] ARC: kprobes: " Masami Hiramatsu
2018-06-19 16:06   ` Masami Hiramatsu
2018-06-19 16:06 ` [PATCH -tip v6 05/27] ARM: kprobes: Remove jprobe arm implementation Masami Hiramatsu
2018-06-19 16:06   ` Masami Hiramatsu
2018-06-19 16:07 ` [PATCH -tip v6 06/27] arm64: kprobes: Remove jprobe implementation Masami Hiramatsu
2018-06-19 16:07   ` Masami Hiramatsu
2018-06-19 16:07 ` Masami Hiramatsu [this message]
2018-06-19 16:08 ` [PATCH -tip v6 08/27] ia64: " Masami Hiramatsu
2018-06-19 16:08   ` Masami Hiramatsu
2018-06-19 16:08 ` [PATCH -tip v6 09/27] MIPS: " Masami Hiramatsu
2018-06-19 16:08 ` [PATCH -tip v6 10/27] s390/kprobes: " Masami Hiramatsu
2018-06-19 16:09 ` [PATCH -tip v6 11/27] sh: kprobes: " Masami Hiramatsu
2018-06-19 16:09   ` Masami Hiramatsu
2018-06-19 16:09 ` [PATCH -tip v6 12/27] sparc64: " Masami Hiramatsu
2018-06-19 16:09   ` Masami Hiramatsu
2018-06-19 16:10 ` [PATCH -tip v6 13/27] kprobes: Don't check the ->break_handler() in generic kprobes code Masami Hiramatsu
2018-06-19 16:10 ` [PATCH -tip v6 14/27] kprobes/x86: Don't call ->break_handler() in x86 kprobes Masami Hiramatsu
2018-06-19 16:11 ` [PATCH -tip v6 15/27] ARC: kprobes: Don't call the ->break_handler() in ARC kprobes code Masami Hiramatsu
2018-06-19 16:11   ` Masami Hiramatsu
2018-06-19 16:11 ` [PATCH -tip v6 16/27] ARM: kprobes: Don't call the ->break_handler() in arm " Masami Hiramatsu
2018-06-19 16:11   ` Masami Hiramatsu
2018-06-19 16:12 ` [PATCH -tip v6 17/27] arm64: kprobes: Don't call the ->break_handler() in arm64 " Masami Hiramatsu
2018-06-19 16:12   ` Masami Hiramatsu
2018-06-19 16:12 ` [PATCH -tip v6 18/27] powerpc/kprobes: Don't call the ->break_handler() in powerpc " Masami Hiramatsu
2018-06-19 16:13 ` [PATCH -tip v6 19/27] ia64: kprobes: Don't call the ->break_handler() in ia64 " Masami Hiramatsu
2018-06-19 16:13   ` Masami Hiramatsu
2018-06-19 16:13 ` [PATCH -tip v6 20/27] MIPS: kprobes: Don't call the ->break_handler() in MIPS " Masami Hiramatsu
2018-06-19 16:14 ` [PATCH -tip v6 21/27] s390/kprobes: Don't call the ->break_handler() in s390 " Masami Hiramatsu
2018-06-19 16:14 ` [PATCH -tip v6 22/27] sh: kprobes: Don't call the ->break_handler() in SH " Masami Hiramatsu
2018-06-19 16:14   ` Masami Hiramatsu
2018-06-19 16:15 ` [PATCH -tip v6 23/27] sparc64: kprobes: Don't call the ->break_handler() in sparc64 " Masami Hiramatsu
2018-06-19 16:15   ` Masami Hiramatsu
2018-06-19 16:15 ` [PATCH -tip v6 24/27] bpf: error-inject: kprobes: Clear current_kprobe and enable preempt in kprobe Masami Hiramatsu
2018-06-19 16:15   ` Masami Hiramatsu
2018-06-19 16:15   ` Masami Hiramatsu
2018-06-19 16:15   ` Masami Hiramatsu
2018-06-19 16:15   ` Masami Hiramatsu
2018-06-19 16:16 ` [PATCH -tip v6 25/27] kprobes/x86: Do not disable preempt on int3 path Masami Hiramatsu
2018-06-19 16:16   ` Masami Hiramatsu
2018-06-19 16:16 ` [PATCH -tip v6 26/27] Documentation: kprobes: Add how to change the execution path Masami Hiramatsu
2018-06-19 16:16   ` Masami Hiramatsu
2018-06-19 16:31   ` Randy Dunlap
2018-06-19 16:31     ` Randy Dunlap
2018-06-20  8:26     ` Masami Hiramatsu
2018-06-20  8:26       ` Masami Hiramatsu
2018-06-21 10:35       ` Ingo Molnar
2018-06-21 10:35         ` Ingo Molnar
2018-06-22  6:07         ` Masami Hiramatsu
2018-06-22  6:07           ` Masami Hiramatsu
2018-06-22  6:07           ` Masami Hiramatsu
2018-06-22  9:15           ` [tip:perf/core] kprobes/Documentation: Fix various typos tip-bot for Masami Hiramatsu
2018-06-19 16:17 ` [PATCH -tip v6 27/27] kprobes: Remove jprobe stub API Masami Hiramatsu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=152942445234.15209.12868722778364739753.stgit@devbox \
    --to=mhiramat@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@linux.vnet.ibm.com \
    --cc=benh@kernel.crashing.org \
    --cc=hpa@zytor.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.