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
next prev parent 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 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.