All of lore.kernel.org
 help / color / mirror / Atom feed
From: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Ingo Molnar <mingo@elte.hu>,
	Masami Hiramatsu <mhiramat@redhat.com>,
	Mel Gorman <mel@csn.ul.ie>, Randy Dunlap <rdunlap@xenotime.net>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Roland McGrath <roland@redhat.com>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Ananth N Mavinakayanahalli <ananth@in.ibm.com>,
	Oleg Nesterov <oleg@redhat.com>, Mark Wielaard <mjw@redhat.com>,
	Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Jim Keniston <jkenisto@linux.vnet.ibm.com>,
	Frederic Weisbecker <fweisbec@gmail.com>,
	"Frank Ch. Eigler" <fche@redhat.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Hugh Dickins <hugh.dickins@tiscali.co.uk>,
	Rik van Riel <riel@redhat.com>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Subject: Re: [PATCH v3 0/10] Uprobes v3
Date: Wed, 12 May 2010 15:55:18 +0530	[thread overview]
Message-ID: <20100512102518.GA30767@linux.vnet.ibm.com> (raw)
In-Reply-To: <1273611585.1810.132.camel@laptop>

* Peter Zijlstra <peterz@infradead.org> [2010-05-11 22:59:45]:

> On Thu, 2010-05-06 at 23:31 +0530, Srikar Dronamraju wrote:
> >   - Addressed comments from Oleg, including removal of interrupt context
> >     handlers, reverting background page replacement in favour of
> >     access_process_vm(). 
> 
> 
> > +static int write_opcode(struct task_struct *tsk, unsigned long vaddr,
> > +                                               user_bkpt_opcode_t opcode)
> > +{
> > +       int ret;
> > +
> > +       if (!tsk)
> > +               return -EINVAL;
> > +
> > +       ret = access_process_vm(tsk, vaddr, &opcode, user_bkpt_opcode_sz, 1);
> > +       return (ret == user_bkpt_opcode_sz ? 0 : -EFAULT);
> > +}
> 
> Why!
> 
> That's not not the atomic sequence outlined.
> 


Yes, we had moved away from access_process_vm to background page
replacement in Version 1 and Version 2. 

One of the reasons being Mathieu suggesting to Jim in LFCS that 
for almost all architectures insertion of a breakpoint instruction on a
user page is an atomic operation, as far as the CPU is concerned.

Can you and other VM experts tell me if access_process_vm isnt going to
be atomic with respect to inserting/deleting a breakpoint instruction? 

Oleg had few questions which I didnt have answers. (Most of
which you have already answered yesterday). One thing that's still
missing is 

[ snipping from Oleg's mail: ]
-----
But suppose that the application does mprotect(PROT_WRITE)
after register_uprobe() installs the bp, now unregister_uprobe/etc
can't restore the original insn?  
---

Also I tried a write_opcode that uses background page replacement which 
addressed some of Oleg's comments.  The pseudo-code is here:
write_opcode()
{
	down_read(mmap_sem);

	get_user_pages(tsk, mm, vaddr, .. &old_page, &vma);

	anon_vma_prepare(vma);	

	new_page=alloc_page_vma(.., vma, vaddr);

	copy_user_page(new_page, old_page);

	kmap_atomic(new_page,...);

	memcpy(vaddr,..);

	kunmap_atomic(..);

	lock_page(new_page);

	old_pte = get_pte(mm,vaddr);

	replace_page(vma, new_page, old_page, old_pte);

	unlock_page(new_page);

	put_page(new_page);

	put_page(old_page);

	up_read(mmap);
}	


Will this work?

The Other VM quieries that I had were:

Is there any thing else needed for the parent process to pass on the anon_vma to
the child process. (I inserted a breakpoint in the parent and tried
removing the breakpoint in the child. 
However page_address_in_vma() (called by replace_page() returned
EFAULT because "vma->anon_vma != page_anon_vma(page)"

Do we need to take care of mem_cgroups?
Do we need to update mm counters?


--
Thanks and Regards
Srikar

  reply	other threads:[~2010-05-12 10:25 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-06 18:01 [PATCH v3 0/10] Uprobes v3 Srikar Dronamraju
2010-05-06 18:01 ` [PATCH v3 1/10] X86 instruction analysis: Move Macro W to insn.h Srikar Dronamraju
2010-05-06 18:02 ` [PATCH v3 2/10] User Space Breakpoint Assistance Layer Srikar Dronamraju
2010-05-06 18:02 ` [PATCH v3 3/10] x86 support for User space breakpoint assistance Srikar Dronamraju
2010-05-06 18:02 ` [PATCH v3 4/10] Slot allocation for execution out of line (XOL) Srikar Dronamraju
2010-05-06 18:02 ` [PATCH v3 5/10] Uprobes Implementation Srikar Dronamraju
2010-05-06 18:02 ` [PATCH v3 6/10] x86 support for Uprobes Srikar Dronamraju
2010-05-06 18:03 ` [PATCH v3 7/10] samples: Uprobes samples Srikar Dronamraju
2010-05-06 18:03 ` [PATCH v3 8/10] Uprobes documentation Srikar Dronamraju
2010-05-06 18:03 ` [PATCH v3 9/10] trace: uprobes trace_event interface Srikar Dronamraju
2010-05-06 18:03 ` [PATCH v3 10/10] perf: perf interface for uprobes Srikar Dronamraju
2010-05-06 23:13   ` Masami Hiramatsu
2010-05-07  2:24     ` Srikar Dronamraju
2010-05-07 17:53       ` Masami Hiramatsu
2010-05-09 11:18         ` Srikar Dronamraju
2010-05-11 20:59 ` [PATCH v3 0/10] Uprobes v3 Peter Zijlstra
2010-05-12 10:25   ` Srikar Dronamraju [this message]
2010-05-12 12:13     ` Peter Zijlstra
2010-05-12 13:27       ` Ananth N Mavinakayanahalli
2010-05-12 13:39         ` Peter Zijlstra
2010-05-12 14:04           ` Ananth N Mavinakayanahalli
2010-05-12 14:46             ` Mathieu Desnoyers
2010-05-12 16:55               ` H. Peter Anvin
2010-05-12 17:59                 ` Mathieu Desnoyers
2010-05-13 12:07       ` Srikar Dronamraju
2010-05-12 10:38 ` Frederic Weisbecker
2010-05-12 13:39   ` Srikar Dronamraju
2010-05-12 14:53     ` Frederic Weisbecker

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=20100512102518.GA30767@linux.vnet.ibm.com \
    --to=srikar@linux.vnet.ibm.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=ananth@in.ibm.com \
    --cc=fche@redhat.com \
    --cc=fweisbec@gmail.com \
    --cc=hpa@zytor.com \
    --cc=hugh.dickins@tiscali.co.uk \
    --cc=jkenisto@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mathieu.desnoyers@efficios.com \
    --cc=mel@csn.ul.ie \
    --cc=mhiramat@redhat.com \
    --cc=mingo@elte.hu \
    --cc=mjw@redhat.com \
    --cc=oleg@redhat.com \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=rdunlap@xenotime.net \
    --cc=riel@redhat.com \
    --cc=roland@redhat.com \
    --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 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.