From: "K.Prasad" <prasad@linux.vnet.ibm.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Roland McGrath <roland@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
mingo@elte.hu, richardj_moore@uk.ibm.com
Subject: Re: [RFC Patch 1/10] Introducing generic hardware breakpoint handler interfaces
Date: Tue, 3 Feb 2009 22:53:31 +0530 [thread overview]
Message-ID: <20090203172331.GA8300@in.ibm.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0902011246090.27579-100000@netrider.rowland.org>
On Sun, Feb 01, 2009 at 01:05:35PM -0500, Alan Stern wrote:
> On Sun, 1 Feb 2009, Paul E. McKenney wrote:
>
> > > > Yes, indeed. With the current implementation, there's a possibility of
> > > > two instances of update_this_cpu() function executing - one with an
> > > > rcu_read_lock() taken (when called from load_debug_registers) while the
> > > > other without (when invoked through update_all_cpus()).
> > >
> > > No, this isn't possible unless I have misunderstood the nature of
> > > IPIs. Isn't is true that calling local_irq_save() will block delivery
> > > of IPIs?
> >
> > Touche! ;-)
> >
> > But in that case, why do you need the synchronize_rcu() following the
> > on_each_cpu() above? Is this needed to make sure that any concurrent
> > load_debug_registers() call has completed?
>
> No; it's needed to make sure that any concurrent
> switch_to_thread_hw_breakpoint() call has completed. That's where the
> important RCU read lock is taken. The routine is called not just by
> update_this_cpu() (and indirectly by load_debug_registers()) but also
> by __register_user_hw_breakpoint(), __unregister_user_hw_breakpoint(),
> and the task-switch routine.
>
> It's possible that the IPI from on_each_cpu() could interrupt an
> instance of switch_to_thread_hw_breakpoint() -- thereby causing it to
> run recursively. After the inner instance returns and the IPI is over,
> the outer instance will realize what has happened and restart itself.
> synchronize_rcu() insures that update_all_cpus() will wait until the
> outer instance is done.
>
> In fact, the RCU read lock in load_debug_registers() probably isn't
> necessary. But it's cleaner to leave it in; it points out that the
> routine accesses data structures which are protected by RCU.
>
> Alan Stern
>
Hi Alan,
After a better understanding about RCU usage in this patch, I'm
thinking if the list traversals in kernel/hw_breakpoint.c should be
changed into their RCU equivalent i.e. list_for_each_entry_rcu() instead
of list_for_each_entry() and list_del_rcu() instead of list_del() -
given that we are considering the list of thread HW breakpoints
(thread_bps) and kernel breakpoints (cur_kbpdata) which are also
accessed from exception-handler contexts.
I think that with the possibility of parallel execution of
the 'update' sections which would alter the protected data structures
(mentioned above) through functions such as - say insert_bp_in_list(),
balance_kernel_vs_user() and various other routines and the read-side
critical regions which need to be identified after converting the list
traversal routines it would be necessary to wrap the code around them
with rcu_read_(un)lock() routines.
What do you think? Is there something grossly incorrect in this
assessment of locking requirements?
Thanks,
K.Prasad
next prev parent reply other threads:[~2009-02-03 17:24 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-22 13:56 [RFC Patch 0/9] Hardware Breakpoint interfaces - v4 K.Prasad
2009-01-22 14:00 ` [RFC Patch 1/10] Introducing generic hardware breakpoint handler interfaces K.Prasad
2009-01-29 3:55 ` Paul E. McKenney
2009-01-30 11:19 ` K.Prasad
2009-01-30 15:55 ` Alan Stern
2009-02-01 13:54 ` Paul E. McKenney
2009-02-01 18:05 ` Alan Stern
2009-02-03 17:23 ` K.Prasad [this message]
2009-02-03 20:07 ` Alan Stern
2009-01-22 14:04 ` [RFC Patch 2/10] x86 architecture implementation of Hardware Breakpoint interfaces K.Prasad
2009-01-22 14:05 ` [RFC Patch 3/10] Modifying generic debug exception to use virtual debug registers K.Prasad
2009-01-22 14:05 ` [RFC Patch 4/10] Modify kprobe exception handler to recognise single-stepping by HW Breakpoint handler K.Prasad
2009-01-22 14:06 ` [RFC Patch 5/10] Use wrapper routines around debug registers in processor related functions K.Prasad
2009-01-22 14:07 ` [RFC Patch 6/10] Use virtual debug registers in process/thread handling code K.Prasad
2009-01-22 14:08 ` [RFC Patch 7/10] Modify signal handling code to refrain from re-enabling HW Breakpoints K.Prasad
2009-01-22 14:09 ` [RFC Patch 8/10] Modify Ptrace routines to access breakpoint registers K.Prasad
2009-01-22 14:10 ` [RFC Patch 9/10] Cleanup HW Breakpoint registers before kexec K.Prasad
2009-01-22 14:12 ` [RFC Patch 10/10] Sample HW breakpoint over kernel data address K.Prasad
2009-01-22 15:42 ` [RFC Patch 0/9] Hardware Breakpoint interfaces - v4 Alan Stern
2009-01-23 11:07 ` K.Prasad
2009-01-29 7:05 ` K.Prasad
2009-01-28 0:15 ` Andrew Morton
2009-01-28 18:08 ` K.Prasad
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=20090203172331.GA8300@in.ibm.com \
--to=prasad@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=paulmck@linux.vnet.ibm.com \
--cc=richardj_moore@uk.ibm.com \
--cc=roland@redhat.com \
--cc=stern@rowland.harvard.edu \
/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.