public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Keshavamurthy Anil S <anil.s.keshavamurthy@intel.com>
To: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
	Anderw Morton <akpm@osdl.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Keith Owens <kaos@americas.sgi.com>,
	Dean Nelson <dnc@americas.sgi.com>,
	Tony Luck <tony.luck@intel.com>,
	Prasanna Panchamukhi <prasanna@in.ibm.com>,
	Dave M <davem@davemloft.net>, Andi Kleen <ak@suse.de>,
	Robin Holt <holt@sgi.com>
Subject: Re: [(resend)patch 7/7] Kprobes - Register for page fault notify on active probes
Date: Wed, 19 Apr 2006 21:53:00 -0700	[thread overview]
Message-ID: <20060419215300.C6150@unix-os.sc.intel.com> (raw)
In-Reply-To: <20060420035735.GA3637@in.ibm.com>; from ananth@in.ibm.com on Thu, Apr 20, 2006 at 09:27:35AM +0530

On Thu, Apr 20, 2006 at 09:27:35AM +0530, Ananth N Mavinakayanahalli wrote:
> On Wed, Apr 19, 2006 at 03:14:26PM -0700, Anil S Keshavamurthy wrote:
> > With this patch Kprobes now registers for page fault notifications only
> > when their is an active probe registered. Once all the active probes are
> > unregistered their is no need to be notified of page faults and kprobes
> > unregisters itself from the page fault notifications. Hence we
> > will have ZERO side effects when no probes are active.
> 
> This patch isn't complete yet... comments below.
>  
> > Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
> > ---
> >  kernel/kprobes.c |   25 +++++++++++++++++--------
> >  1 file changed, 17 insertions(+), 8 deletions(-)
> > 
> > Index: linux-2.6.17-rc1-mm3/kernel/kprobes.c
> > ===================================================================
> > --- linux-2.6.17-rc1-mm3.orig/kernel/kprobes.c
> > +++ linux-2.6.17-rc1-mm3/kernel/kprobes.c
> > @@ -47,11 +47,17 @@
> >  
> >  static struct hlist_head kprobe_table[KPROBE_TABLE_SIZE];
> >  static struct hlist_head kretprobe_inst_table[KPROBE_TABLE_SIZE];
> > +static atomic_t kprobe_count;
> >  
> >  DEFINE_MUTEX(kprobe_mutex);		/* Protects kprobe_table */
> >  DEFINE_SPINLOCK(kretprobe_lock);	/* Protects kretprobe_inst_table */
> >  static DEFINE_PER_CPU(struct kprobe *, kprobe_instance) = NULL;
> >  
> > +static struct notifier_block kprobe_page_fault_nb = {
> > +	.notifier_call = kprobe_exceptions_notify,
> > +	.priority = 0x7fffffff /* we need to notified first */
> > +};
> > +
> >  #ifdef __ARCH_WANT_KPROBES_INSN_SLOT
> >  /*
> >   * kprobe->ainsn.insn points to the copy of the instruction to be
> > @@ -464,6 +470,8 @@ static int __kprobes __register_kprobe(s
> >  	old_p = get_kprobe(p->addr);
> >  	if (old_p) {
> >  		ret = register_aggr_kprobe(old_p, p);
> > +		if (!ret)
> > +			atomic_inc(&kprobe_count);
> >  		goto out;
> >  	}
> >  
> > @@ -474,6 +482,9 @@ static int __kprobes __register_kprobe(s
> >  	hlist_add_head_rcu(&p->hlist,
> >  		       &kprobe_table[hash_ptr(p->addr, KPROBE_HASH_BITS)]);
> >  
> > +	if(atomic_add_return(1, &kprobe_count) == 2)
> 	^^^
> 	if (..) please, here and elsewhere
> 
> This will not work as desired for i386 (i386 no longer has a kprobe on the
> trampoline) and sparc64 (no retprobe support).
Instead of hardcoding value 2, #define KPROBE_ARCH_INITIAL_COUNT x
should do the trick.
> 
> > +		register_page_fault_notifier(&kprobe_page_fault_nb);
> > +
> >    	arch_arm_kprobe(p);
> >  
> >  out:
> > @@ -523,9 +534,13 @@ valid_p:
> >  		cleanup_p = 0;
> >  	}
> >  
> > +	if(atomic_add_return(-1, &kprobe_count) == 1)
> > +		unregister_page_fault_notifier(&kprobe_page_fault_nb);
> 
> Same here - i386 and sparc64 need different checks.
Yup, will take care in my next version.

> 
> > +	else
> > +		synchronize_rcu();
> 
> As of now, synchronize_sched() is aliased to synchronize_rcu() but I am
> told its scheduled to change in the future.
> 
> Please revert this back to synchronize_sched().
> 
I will revert it back in my take2 :)

Thanks again for your valuable feedback.

-Anil Keshavamurthy

  reply	other threads:[~2006-04-20  4:55 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-19 22:14 [(resend)patch 0/7] Notify page fault call chain Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 1/7] Notify page fault call chain for i386 Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 2/7] Notify page fault call chain for x86_64 Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 3/7] Notify page fault call chain for ia64 Anil S Keshavamurthy
2006-04-20  2:18   ` Keith Owens
2006-04-20  4:47     ` Keshavamurthy Anil S
2006-04-19 22:14 ` [(resend)patch 4/7] Notify page fault call chain for powerpc Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 5/7] Notify page fault call chain for sparc64 Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 6/7] Kprobes registers for notify page fault Anil S Keshavamurthy
2006-04-19 22:14 ` [(resend)patch 7/7] Kprobes - Register for page fault notify on active probes Anil S Keshavamurthy
2006-04-20  3:57   ` Ananth N Mavinakayanahalli
2006-04-20  4:53     ` Keshavamurthy Anil S [this message]
2006-04-20  0:27 ` [(resend)patch 0/7] Notify page fault call chain Keith Owens
2006-04-20  4:37   ` Keshavamurthy Anil S

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=20060419215300.C6150@unix-os.sc.intel.com \
    --to=anil.s.keshavamurthy@intel.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=ananth@in.ibm.com \
    --cc=davem@davemloft.net \
    --cc=dnc@americas.sgi.com \
    --cc=holt@sgi.com \
    --cc=kaos@americas.sgi.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=prasanna@in.ibm.com \
    --cc=tony.luck@intel.com \
    /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