From: Peter Zijlstra <peterz@infradead.org>
To: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@elte.hu>, Steven Rostedt <rostedt@goodmis.org>,
Linux-mm <linux-mm@kvack.org>,
Arnaldo Carvalho de Melo <acme@infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
Andi Kleen <andi@firstfloor.org>, Hugh Dickins <hughd@google.com>,
Christoph Hellwig <hch@infradead.org>,
Jonathan Corbet <corbet@lwn.net>,
Thomas Gleixner <tglx@linutronix.de>,
Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>,
Oleg Nesterov <oleg@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
Jim Keniston <jkenisto@linux.vnet.ibm.com>,
Roland McGrath <roland@hack.frob.com>,
Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v4 3.0-rc2-tip 7/22] 7: uprobes: mmap and fork hooks.
Date: Fri, 17 Jun 2011 11:41:05 +0200 [thread overview]
Message-ID: <1308303665.2355.11.camel@twins> (raw)
In-Reply-To: <20110617090504.GN4952@linux.vnet.ibm.com>
On Fri, 2011-06-17 at 14:35 +0530, Srikar Dronamraju wrote:
> > > > int mmap_uprobe(...)
> > > > {
> > > > spin_lock(&uprobes_treelock);
> > > > for_each_probe_in_inode() {
> > > > // create list;
>
> Here again if we have multiple mmaps for the same inode occuring on two
> process contexts (I mean two different mm's), we have to manage how we
> add the same uprobe to more than one list. Atleast my current
> uprobe->pending_list wouldnt work.
Sure, wasn't concerned about that particular problem.
> > > > }
> > > > spin_unlock(..);
> > > >
> > > > list_for_each_entry_safe() {
> > > > // remove from list
> > > > ret = install_breakpoint();
> > > > if (ret)
> > > > goto fail;
> > > > if (!uprobe_still_there()) // takes treelock
> > > > remove_breakpoint();
> > > > }
> > > >
> > > > return 0;
> > > >
> > > > fail:
> > > > list_for_each_entry_safe() {
> > > > // destroy list
> > > > }
> > > > return ret;
> > > > }
> > > >
> > >
> > >
> > > register_uprobe will race with mmap_uprobe's first pass.
> > > So we might end up with a vma that doesnot have a breakpoint inserted
> > > but inserted in all other vma that map to the same inode.
> >
> > I'm not seeing this though, if mmap_uprobe() is before register_uprobe()
> > inserts the probe in the tree, the vma is already in the rmap and
> > register_uprobe() will find it in its vma walk. If its after,
> > mmap_uprobe() will find it and install, if a concurrent
> > register_uprobe()'s vma walk also finds it, it will -EEXISTS and ignore
> > the error.
> >
>
> You are right here.
>
> What happens if the register_uprobe comes first and walks around the
> vmas, Between mmap comes in does the insertion including the second pass
> and returns. register_uprobe now finds that it cannot insert breakpoint
> on one of the vmas and hence has to roll-back. The vma on which
> mmap_uprobe inserted will not be in the list of vmas from which we try
> to remove the breakpoint.
Yes it will, remember __register_uprobe() will call
__unregister_uprobe() on fail, which does a new vma-rmap walk which will
then see the newly added mmap.
> How about something like this:
> if (!mutex_trylock(uprobes_mutex)) {
>
> /*
> * Unable to get uprobes_mutex; Probably contending with
> * someother thread. Drop mmap_sem; acquire uprobes_mutex
> * and mmap_sem and then verify vma.
> */
>
> up_write(&mm->mmap_sem);
> mutex_lock&(uprobes_mutex);
> down_write(&mm->mmap_sem);
> vma = find_vma(mm, start);
> /* Not the same vma */
> if (!vma || vma->vm_start != start ||
> vma->vm_pgoff != pgoff || !valid_vma(vma) ||
> inode->i_mapping != vma->vm_file->f_mapping)
> goto mmap_out;
> }
Only if we have to, I really don't like dropping mmap_sem in the middle
of mmap. I'm fairly sure we can come up with some ordering scheme that
ought to make mmap_uprobe() work without the uprobes_mutex.
On thing I was thinking of to fix that initial problem of spurious traps
was to leave the uprobe in the tree but skip all probes without
consumers in mmap_uprobe().
--
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>
next prev parent reply other threads:[~2011-06-17 9:42 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-07 12:58 [PATCH v4 3.0-rc2-tip 0/22] 0: Uprobes patchset with perf probe support Srikar Dronamraju
2011-06-07 12:58 ` [PATCH v4 3.0-rc2-tip 1/22] 1: X86 specific breakpoint definitions Srikar Dronamraju
2011-06-07 12:58 ` [PATCH v4 3.0-rc2-tip 2/22] 2: uprobes: Breakground page replacement Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-13 8:48 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-13 8:50 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-09 23:03 ` Peter Zijlstra
2011-06-13 8:59 ` Srikar Dronamraju
2011-06-14 12:57 ` Peter Zijlstra
2011-06-14 14:57 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-13 9:14 ` Srikar Dronamraju
2011-06-13 13:46 ` Oleg Nesterov
2011-06-13 17:00 ` Oleg Nesterov
2011-06-14 12:35 ` Srikar Dronamraju
2011-06-14 14:20 ` Oleg Nesterov
2011-06-15 8:55 ` Srikar Dronamraju
2011-06-15 17:54 ` Oleg Nesterov
2011-06-14 13:01 ` Peter Zijlstra
2011-06-14 14:27 ` Oleg Nesterov
2011-06-14 15:07 ` Peter Zijlstra
2011-06-14 15:40 ` Oleg Nesterov
2011-06-14 18:22 ` Peter Zijlstra
2011-06-16 12:48 ` Peter Zijlstra
2011-06-07 12:58 ` [PATCH v4 3.0-rc2-tip 3/22] 3: uprobes: Adding and remove a uprobe in a rb tree Srikar Dronamraju
2011-06-08 4:12 ` Stephen Wilson
2011-06-08 7:04 ` Josh Stone
2011-06-08 10:29 ` Srikar Dronamraju
2011-06-08 10:30 ` Srikar Dronamraju
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 4/22] 4: Uprobes: register/unregister probes Srikar Dronamraju
2011-06-08 22:10 ` Stephen Wilson
2011-06-09 5:43 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-16 5:40 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-13 16:50 ` Steven Rostedt
2011-06-16 5:26 ` Srikar Dronamraju
2011-06-16 9:42 ` Peter Zijlstra
2011-06-13 19:57 ` Oleg Nesterov
2011-06-14 12:00 ` Srikar Dronamraju
2011-06-14 14:29 ` Oleg Nesterov
2011-06-15 17:30 ` Oleg Nesterov
2011-06-16 5:09 ` Srikar Dronamraju
2011-06-15 17:41 ` Peter Zijlstra
2011-06-16 4:11 ` Srikar Dronamraju
2011-06-16 9:46 ` Peter Zijlstra
2011-06-16 9:54 ` Srikar Dronamraju
2011-06-16 10:09 ` Peter Zijlstra
2011-06-16 13:51 ` Oleg Nesterov
2011-06-17 9:29 ` Srikar Dronamraju
2011-06-15 18:01 ` Peter Zijlstra
2011-07-24 18:07 ` Oleg Nesterov
2011-07-25 12:17 ` Srikar Dronamraju
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 5/22] 5: x86: analyze instruction and determine fixups Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 6/22] 6: uprobes: store/restore original instruction Srikar Dronamraju
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 7/22] 7: uprobes: mmap and fork hooks Srikar Dronamraju
2011-06-08 22:12 ` Stephen Wilson
2011-06-09 5:50 ` Srikar Dronamraju
2011-06-15 18:11 ` Peter Zijlstra
2011-06-16 3:26 ` Srikar Dronamraju
2011-06-16 12:00 ` Peter Zijlstra
2011-06-16 13:00 ` Srikar Dronamraju
2011-06-16 18:23 ` Peter Zijlstra
2011-06-16 18:25 ` Peter Zijlstra
2011-06-17 4:50 ` Srikar Dronamraju
2011-06-17 8:03 ` Peter Zijlstra
2011-06-17 9:05 ` Srikar Dronamraju
2011-06-17 9:41 ` Peter Zijlstra [this message]
2011-06-21 13:17 ` Peter Zijlstra
2011-06-22 14:39 ` Srikar Dronamraju
2011-06-24 2:06 ` Srikar Dronamraju
2011-06-24 7:42 ` Peter Zijlstra
2011-06-27 6:45 ` Srikar Dronamraju
2011-06-27 8:57 ` Peter Zijlstra
2011-07-18 9:20 ` Srikar Dronamraju
2011-07-18 14:31 ` Peter Zijlstra
2011-07-19 6:53 ` Srikar Dronamraju
2011-07-20 11:56 ` Peter Zijlstra
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 8/22] 8: x86: architecture specific task information Srikar Dronamraju
2011-06-07 12:59 ` [PATCH v4 3.0-rc2-tip 9/22] 9: uprobes: task specific information Srikar Dronamraju
2011-06-07 13:00 ` [PATCH v4 3.0-rc2-tip 10/22] 10: uprobes: slot allocation for uprobes Srikar Dronamraju
2011-06-07 13:00 ` [PATCH v4 3.0-rc2-tip 11/22] 11: uprobes: get the breakpoint address Srikar Dronamraju
2011-06-07 13:00 ` [PATCH v4 3.0-rc2-tip 12/22] 12: x86: x86 specific probe handling Srikar Dronamraju
2011-06-07 13:00 ` [PATCH v4 3.0-rc2-tip 13/22] 13: uprobes: Handing int3 and singlestep exception Srikar Dronamraju
2011-06-08 22:11 ` Stephen Wilson
2011-06-09 5:47 ` Srikar Dronamraju
2011-06-16 11:52 ` Peter Zijlstra
2011-06-16 12:04 ` Srikar Dronamraju
2011-06-16 12:35 ` Peter Zijlstra
2011-06-07 13:01 ` [PATCH v4 3.0-rc2-tip 14/22] 14: x86: uprobes exception notifier for x86 Srikar Dronamraju
2011-06-21 13:31 ` Peter Zijlstra
2011-06-21 13:32 ` Peter Zijlstra
2011-06-22 14:54 ` Srikar Dronamraju
2011-06-22 16:40 ` Roland McGrath
2011-06-07 13:01 ` [PATCH v4 3.0-rc2-tip 15/22] 15: uprobes: register a notifier for uprobes Srikar Dronamraju
2011-06-07 13:01 ` [PATCH v4 3.0-rc2-tip 16/22] 16: tracing: Extract out common code for kprobes/uprobes traceevents Srikar Dronamraju
2011-06-07 13:01 ` [PATCH v4 3.0-rc2-tip 17/22] 17: tracing: uprobes trace_event interface Srikar Dronamraju
2011-06-07 13:01 ` [PATCH v4 3.0-rc2-tip 18/22] 18: tracing: Uprobe tracer documentation Srikar Dronamraju
2011-06-07 13:02 ` [PATCH v4 3.0-rc2-tip 19/22] 19: perf: rename target_module to target Srikar Dronamraju
2011-06-07 13:02 ` [PATCH v4 3.0-rc2-tip 20/22] 20: perf: perf interface for uprobes Srikar Dronamraju
2011-06-07 13:30 ` Christoph Hellwig
2011-06-07 13:38 ` Ananth N Mavinakayanahalli
2011-06-07 14:21 ` Arnaldo Carvalho de Melo
2011-06-07 16:06 ` Srikar Dronamraju
2011-06-08 3:41 ` Masami Hiramatsu
2011-06-07 19:59 ` Josh Stone
2011-06-08 3:44 ` Srikar Dronamraju
2011-06-10 11:50 ` Masami Hiramatsu
2011-06-07 13:02 ` [PATCH v4 3.0-rc2-tip 21/22] 21: perf: show possible probes in a given executable file or library Srikar Dronamraju
2011-06-07 13:02 ` [PATCH v4 3.0-rc2-tip 22/22] 22: perf: Documentation for perf uprobes Srikar Dronamraju
2011-06-10 12:03 ` Masami Hiramatsu
2011-06-09 18:42 ` [PATCH v4 3.0-rc2-tip 0/22] 0: Uprobes patchset with perf probe support Peter Zijlstra
2011-06-10 5:56 ` Ananth N Mavinakayanahalli
2011-06-13 9:23 ` Srikar Dronamraju
2011-06-09 23:03 ` Peter Zijlstra
2011-06-10 6:15 ` Masami Hiramatsu
2011-06-13 10:08 ` 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=1308303665.2355.11.camel@twins \
--to=peterz@infradead.org \
--cc=acme@infradead.org \
--cc=akpm@linux-foundation.org \
--cc=ananth@in.ibm.com \
--cc=andi@firstfloor.org \
--cc=corbet@lwn.net \
--cc=hch@infradead.org \
--cc=hughd@google.com \
--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=roland@hack.frob.com \
--cc=rostedt@goodmis.org \
--cc=srikar@linux.vnet.ibm.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).