linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>,
	Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Linux-mm <linux-mm@kvack.org>, Ingo Molnar <mingo@elte.hu>,
	Andi Kleen <andi@firstfloor.org>,
	Christoph Hellwig <hch@infradead.org>,
	Steven Rostedt <rostedt@goodmis.org>,
	Roland McGrath <roland@hack.frob.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
	Arnaldo Carvalho de Melo <acme@infradead.org>,
	Anton Arapov <anton@redhat.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Jim Keniston <jkenisto@linux.vnet.ibm.com>,
	Stephen Wilson <wilsons@start.ca>
Subject: [PATCH v6 3.2-rc1 25/28]   uprobes: call post_xol() unconditionally
Date: Fri, 11 Nov 2011 00:12:37 +0530	[thread overview]
Message-ID: <20111110184237.11361.87061.sendpatchset@srdronam.in.ibm.com> (raw)
In-Reply-To: <20111110183725.11361.57827.sendpatchset@srdronam.in.ibm.com>


Kill sstep_complete(), change uprobe_notify_resume() to use
post_xol() unconditionally.

It is wrong to assume that regs->ip always changes after the step.
rep or jmp/call to self for example. We know that this task has
already done the step, we can rely on DIE_DEBUG notification.

Original-patch-from: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
---
 include/linux/uprobes.h |    3 ++-
 kernel/uprobes.c        |   40 ++++++++++++----------------------------
 2 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/include/linux/uprobes.h b/include/linux/uprobes.h
index add5222..70d639c 100644
--- a/include/linux/uprobes.h
+++ b/include/linux/uprobes.h
@@ -74,7 +74,8 @@ struct uprobe {
 enum uprobe_task_state {
 	UTASK_RUNNING,
 	UTASK_BP_HIT,
-	UTASK_SSTEP
+	UTASK_SSTEP,
+	UTASK_SSTEP_ACK,
 };
 
 /*
diff --git a/kernel/uprobes.c b/kernel/uprobes.c
index 9e73cef..13b1d68 100644
--- a/kernel/uprobes.c
+++ b/kernel/uprobes.c
@@ -1316,24 +1316,6 @@ static int pre_ssout(struct uprobe *uprobe, struct pt_regs *regs,
 }
 
 /*
- * Verify from Instruction Pointer if singlestep has indeed occurred.
- * If Singlestep has occurred, then do post singlestep fix-ups.
- */
-static bool sstep_complete(struct uprobe *uprobe, struct pt_regs *regs)
-{
-	unsigned long vaddr = instruction_pointer(regs);
-
-	/*
-	 * If we have executed out of line, Instruction pointer
-	 * cannot be same as virtual address of XOL slot.
-	 */
-	if (vaddr == current->utask->xol_vaddr)
-		return false;
-	post_xol(uprobe, regs);
-	return true;
-}
-
-/*
  * uprobe_notify_resume gets called in task context just before returning
  * to userspace.
  *
@@ -1381,17 +1363,18 @@ void uprobe_notify_resume(struct pt_regs *regs)
 		else
 			/* Cannot Singlestep; re-execute the instruction. */
 			goto cleanup_ret;
-	} else if (utask->state == UTASK_SSTEP) {
+	} else {
 		u = utask->active_uprobe;
-		if (sstep_complete(u, regs)) {
-			put_uprobe(u);
-			utask->active_uprobe = NULL;
-			utask->state = UTASK_RUNNING;
-			user_disable_single_step(current);
-			xol_free_insn_slot(current);
-
-			/* TODO Stop queueing signals. */
-		}
+		if (utask->state == UTASK_SSTEP_ACK)
+			post_xol(u, regs);
+		else
+			WARN_ON_ONCE(1);
+
+		put_uprobe(u);
+		utask->active_uprobe = NULL;
+		utask->state = UTASK_RUNNING;
+		user_disable_single_step(current);
+		xol_free_insn_slot(current);
 	}
 	return;
 
@@ -1441,6 +1424,7 @@ int uprobe_post_notifier(struct pt_regs *regs)
 		/* task is currently not uprobed */
 		return 0;
 
+	utask->state = UTASK_SSTEP_ACK;
 	set_thread_flag(TIF_UPROBE);
 	return 1;
 }

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Fight unfair telecom internet charges in Canada: sign http://stopthemeter.ca/
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  parent reply	other threads:[~2011-11-10 19:07 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-10 18:37 [PATCH v6 3.2-rc1 0/28] Uprobes patchset with perf probe support Srikar Dronamraju
2011-11-10 18:37 ` [PATCH v6 3.2-rc1 1/28] uprobes: Auxillary routines to insert, find, delete uprobes Srikar Dronamraju
2011-11-10 18:37 ` [PATCH v6 3.2-rc1 2/28] Uprobes: Allow multiple consumers for an uprobe Srikar Dronamraju
2011-11-10 18:37 ` [PATCH v6 3.2-rc1 3/28] Uprobes: register/unregister probes Srikar Dronamraju
2011-11-10 18:38 ` [PATCH v6 3.2-rc1 4/28] uprobes: Define hooks for mmap/munmap Srikar Dronamraju
2011-11-10 18:38 ` [PATCH v6 3.2-rc1 5/28] Uprobes: copy of the original instruction Srikar Dronamraju
2011-11-10 18:38 ` [PATCH v6 3.2-rc1 6/28] Uprobes: define fixups Srikar Dronamraju
2011-11-10 18:38 ` [PATCH v6 3.2-rc1 7/28] Uprobes: uprobes arch info Srikar Dronamraju
2011-11-10 18:39 ` [PATCH v6 3.2-rc1 8/28] x86: analyze instruction and determine fixups Srikar Dronamraju
2011-11-10 18:39 ` [PATCH v6 3.2-rc1 9/28] Uprobes: Background page replacement Srikar Dronamraju
2011-11-10 18:39 ` [PATCH v6 3.2-rc1 10/28] x86: Set instruction pointer Srikar Dronamraju
2011-11-10 18:39 ` [PATCH v6 3.2-rc1 11/28] x86: Introduce TIF_UPROBE FLAG Srikar Dronamraju
2011-11-10 18:39 ` [PATCH v6 3.2-rc1 12/28] Uprobes: Handle breakpoint and Singlestep Srikar Dronamraju
2011-11-10 18:40 ` [PATCH v6 3.2-rc1 13/28] x86: define a x86 specific exception notifier Srikar Dronamraju
2011-11-10 18:40 ` [PATCH v6 3.2-rc1 14/28] uprobe: register " Srikar Dronamraju
2011-11-10 18:40 ` [PATCH v6 3.2-rc1 15/28] x86: Define x86_64 specific uprobe_task_arch_info structure Srikar Dronamraju
2011-11-10 18:40 ` [PATCH v6 3.2-rc1 16/28] uprobes: Introduce " Srikar Dronamraju
2011-11-10 18:40 ` [PATCH v6 3.2-rc1 17/28] x86: arch specific hooks for pre/post singlestep handling Srikar Dronamraju
2011-11-10 18:41 ` [PATCH v6 3.2-rc1 18/28] uprobes: slot allocation Srikar Dronamraju
2011-11-10 18:41 ` [PATCH v6 3.2-rc1 19/28] tracing: modify is_delete, is_return from ints to bool Srikar Dronamraju
2011-11-10 18:41 ` [PATCH v6 3.2-rc1 20/28] tracing: Extract out common code for kprobes/uprobes traceevents Srikar Dronamraju
2011-11-10 18:41 ` [PATCH v6 3.2-rc1 21/28] tracing: uprobes trace_event interface Srikar Dronamraju
2011-11-10 18:41 ` [PATCH v6 3.2-rc1 22/28] perf: rename target_module to target Srikar Dronamraju
2011-11-10 18:42 ` [PATCH v6 3.2-rc1 23/28] perf: perf interface for uprobes Srikar Dronamraju
2011-11-10 18:42 ` [PATCH v6 3.2-rc1 24/28] perf: show possible probes in a given executable file or library Srikar Dronamraju
2011-11-10 18:42 ` Srikar Dronamraju [this message]
2011-11-10 18:42 ` [PATCH v6 3.2-rc1 26/28] uprobes: introduce uprobe_deny_signal() Srikar Dronamraju
2011-11-10 18:42 ` [PATCH v6 3.2-rc1 27/28] uprobes: x86: introduce xol_was_trapped() Srikar Dronamraju
2011-11-10 18:43 ` [PATCH v6 3.2-rc1 28/28] uprobes: introduce UTASK_SSTEP_TRAPPED logic Srikar Dronamraju
2011-11-14 16:39   ` Oleg Nesterov
2011-11-15  7:44     ` Srikar Dronamraju

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=20111110184237.11361.87061.sendpatchset@srdronam.in.ibm.com \
    --to=srikar@linux.vnet.ibm.com \
    --cc=acme@infradead.org \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=andi@firstfloor.org \
    --cc=anton@redhat.com \
    --cc=hch@infradead.org \
    --cc=jkenisto@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=masami.hiramatsu.pt@hitachi.com \
    --cc=mingo@elte.hu \
    --cc=oleg@redhat.com \
    --cc=peterz@infradead.org \
    --cc=roland@hack.frob.com \
    --cc=rostedt@goodmis.org \
    --cc=tglx@linutronix.de \
    --cc=torvalds@linux-foundation.org \
    --cc=wilsons@start.ca \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox