All of lore.kernel.org
 help / color / mirror / Atom feed
From: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: linux-arch@vger.kernel.org,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Sandeepa Prabhu <sandeepa.prabhu@linaro.org>,
	x86@kernel.org, lkml <linux-kernel@vger.kernel.org>,
	"Steven Rostedt (Red Hat)" <rostedt@goodmis.org>,
	Ingo Molnar <mingo@redhat.com>,
	systemtap@sourceware.org, "H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH -tip v6 21/22] kprobes/x86: Remove unneeded preempt_disable/enable in interrupt handlers
Date: Thu, 19 Dec 2013 09:04:45 +0000	[thread overview]
Message-ID: <20131219090445.14309.42834.stgit@kbuild-fedora.novalocal> (raw)
In-Reply-To: <20131219090353.14309.15496.stgit@kbuild-fedora.novalocal>

Since the int3 itself disables the local_irq and kprobes
keeps it disabled while the single step has done, the
kernel preemption never happen while processing a kprobe.
This means that we don't need to disable/enable preemption.
Also, this changes kprobe_int3_handler to use goto-out style.

Signed-off-by: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
---
 arch/x86/kernel/kprobes/core.c |   24 +++++++-----------------
 1 file changed, 7 insertions(+), 17 deletions(-)

diff --git a/arch/x86/kernel/kprobes/core.c b/arch/x86/kernel/kprobes/core.c
index 060641e..6b4d9bd 100644
--- a/arch/x86/kernel/kprobes/core.c
+++ b/arch/x86/kernel/kprobes/core.c
@@ -506,7 +506,6 @@ static void setup_singlestep(struct kprobe *p, struct pt_regs *regs,
 		 * stepping.
 		 */
 		regs->ip = (unsigned long)p->ainsn.insn;
-		preempt_enable_no_resched();
 		return;
 	}
 #endif
@@ -574,13 +573,6 @@ int kprobe_int3_handler(struct pt_regs *regs)
 	struct kprobe_ctlblk *kcb;
 
 	addr = (kprobe_opcode_t *)(regs->ip - sizeof(kprobe_opcode_t));
-	/*
-	 * We don't want to be preempted for the entire
-	 * duration of kprobe processing. We conditionally
-	 * re-enable preemption at the end of this function,
-	 * and also in reenter_kprobe() and setup_singlestep().
-	 */
-	preempt_disable();
 
 	kcb = get_kprobe_ctlblk();
 	p = get_kprobe(addr);
@@ -588,7 +580,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
 	if (p) {
 		if (kprobe_running()) {
 			if (reenter_kprobe(p, regs, kcb))
-				return 1;
+				goto handled;
 		} else {
 			set_current_kprobe(p, regs, kcb);
 			kcb->kprobe_status = KPROBE_HIT_ACTIVE;
@@ -603,7 +595,7 @@ int kprobe_int3_handler(struct pt_regs *regs)
 			 */
 			if (!p->pre_handler || !p->pre_handler(p, regs))
 				setup_singlestep(p, regs, kcb, 0);
-			return 1;
+			goto handled;
 		}
 	} else if (*addr != BREAKPOINT_INSTRUCTION) {
 		/*
@@ -616,19 +608,20 @@ int kprobe_int3_handler(struct pt_regs *regs)
 		 * the original instruction.
 		 */
 		regs->ip = (unsigned long)addr;
-		preempt_enable_no_resched();
-		return 1;
+		goto handled;
 	} else if (kprobe_running()) {
 		p = __this_cpu_read(current_kprobe);
 		if (p->break_handler && p->break_handler(p, regs)) {
 			if (!skip_singlestep(p, regs, kcb))
 				setup_singlestep(p, regs, kcb, 0);
-			return 1;
+			goto handled;
 		}
 	} /* else: not a kprobe fault; let the kernel handle it */
 
-	preempt_enable_no_resched();
 	return 0;
+
+handled:
+	return 1;
 }
 NOKPROBE_SYMBOL(kprobe_int3_handler);
 
@@ -893,7 +886,6 @@ int kprobe_debug_handler(struct pt_regs *regs)
 	}
 	reset_current_kprobe();
 out:
-	preempt_enable_no_resched();
 
 	/*
 	 * if somebody else is singlestepping across a probe point, flags
@@ -928,7 +920,6 @@ int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
 			restore_previous_kprobe(kcb);
 		else
 			reset_current_kprobe();
-		preempt_enable_no_resched();
 		break;
 	case KPROBE_HIT_ACTIVE:
 	case KPROBE_HIT_SSDONE:
@@ -1062,7 +1053,6 @@ int longjmp_break_handler(struct kprobe *p, struct pt_regs *regs)
 		memcpy((kprobe_opcode_t *)(kcb->jprobe_saved_sp),
 		       kcb->jprobes_stack,
 		       MIN_STACK_SIZE(kcb->jprobe_saved_sp));
-		preempt_enable_no_resched();
 		return 1;
 	}
 	return 0;



  parent reply	other threads:[~2013-12-19  9:14 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-19  9:03 [PATCH -tip v6 00/22] kprobes: introduce NOKPROBE_SYMBOL(), cleanup and fixes crash bugs Masami Hiramatsu
2013-12-19  9:03 ` [PATCH -tip v6 01/22] kprobes: Prohibit probing on .entry.text code Masami Hiramatsu
2013-12-19  9:03 ` [PATCH -tip v6 02/22] kprobes: Introduce NOKPROBE_SYMBOL() macro for blacklist Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 03/22] [BUGFIX] kprobes/x86: Prohibit probing on debug_stack_* Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 04/22] [BUGFIX] x86: Prohibit probing on native_set_debugreg/load_idt Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 05/22] [BUGFIX] x86: Prohibit probing on thunk functions and restore Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 06/22] [BUGFIX] x86: Prohibit probing on memcpy/memset Masami Hiramatsu
2013-12-19  9:37   ` Jovi Zhangwei
2013-12-20  2:37     ` Masami Hiramatsu
2013-12-20  3:07       ` Jovi Zhangwei
2013-12-20  4:42         ` Masami Hiramatsu
2013-12-20  8:31           ` Jovi Zhangwei
2013-12-20  9:21             ` Masami Hiramatsu
2013-12-23  4:51               ` Jovi Zhangwei
2013-12-23 10:59                 ` Masami Hiramatsu
2013-12-24  6:39                   ` Jovi Zhangwei
2013-12-24  8:32                     ` Masami Hiramatsu
2013-12-24  9:53                       ` Jovi Zhangwei
2013-12-24 15:58                         ` Masami Hiramatsu
2013-12-25 14:44                           ` Jovi Zhangwei
2013-12-19  9:04 ` [PATCH -tip v6 07/22] kprobes/x86: Call exception handlers directly from do_int3/do_debug Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 08/22] kprobes/x86: Allow probe on some kprobe preparation functions Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 09/22] kprobes: Allow probe on some kprobe functions Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 10/22] ftrace/kprobes: Allow probing on some preparation functions Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 11/22] x86: Allow kprobes on text_poke/hw_breakpoint Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 12/22] x86: Use NOKPROBE_SYMBOL() instead of __kprobes annotation Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 13/22] kprobes: Use NOKPROBE_SYMBOL macro instead of __kprobes Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 14/22] ftrace/kprobes: Use NOKPROBE_SYMBOL macro in ftrace Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 15/22] notifier: Use NOKPROBE_SYMBOL macro in notifier Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 16/22] sched: Use NOKPROBE_SYMBOL macro in sched Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 17/22] kprobes: Show blacklist entries via debugfs Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 18/22] kprobes: Support blacklist functions in module Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 19/22] kprobes: Use NOKPROBE_SYMBOL() in sample modules Masami Hiramatsu
2013-12-19  9:04 ` [PATCH -tip v6 20/22] kprobes/x86: Use kprobe_blacklist for .kprobes.text and .entry.text Masami Hiramatsu
2013-12-19  9:04 ` Masami Hiramatsu [this message]
2013-12-19  9:04 ` [PATCH -tip v6 22/22] [RFC] kprobes/x86: Add emergency recovery process for bad kprobes Masami Hiramatsu
2013-12-19 20:46 ` [PATCH -tip v6 00/22] kprobes: introduce NOKPROBE_SYMBOL(), cleanup and fixes crash bugs Frank Ch. Eigler
2013-12-20  4:21   ` Masami Hiramatsu
2013-12-20  8:20     ` Ingo Molnar
2013-12-20  9:31       ` Masami Hiramatsu
2013-12-20 10:46         ` Ingo Molnar
2013-12-22 21:10           ` Masami Hiramatsu
2013-12-23 13:04             ` Ingo Molnar
2013-12-24  1:19               ` Masami Hiramatsu
2014-01-29 11:22           ` Masami Hiramatsu
2014-02-09 14:37             ` Ingo Molnar
2014-02-09 21:27               ` Frank Ch. Eigler
2014-02-10  4:02               ` Masami Hiramatsu
2014-02-10 11:31                 ` Masami Hiramatsu
2013-12-20 13:40       ` Frank Ch. Eigler
2013-12-22 21:32         ` 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=20131219090445.14309.42834.stgit@kbuild-fedora.novalocal \
    --to=masami.hiramatsu.pt@hitachi.com \
    --cc=ananth@in.ibm.com \
    --cc=davem@davemloft.net \
    --cc=hpa@zytor.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=mingo@redhat.com \
    --cc=rostedt@goodmis.org \
    --cc=sandeepa.prabhu@linaro.org \
    --cc=systemtap@sourceware.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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.