All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
To: Alan Stern <stern@rowland.harvard.edu>
Cc: "K.Prasad" <prasad@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,
	naren@linux.vnet.ibm.com
Subject: Re: [RFC Patch 1/10] Introducing generic hardware breakpoint handler interfaces
Date: Sun, 1 Feb 2009 05:54:34 -0800	[thread overview]
Message-ID: <20090201135433.GE7021@linux.vnet.ibm.com> (raw)
In-Reply-To: <Pine.LNX.4.44L0.0901301044540.2466-100000@iolanthe.rowland.org>

On Fri, Jan 30, 2009 at 10:55:39AM -0500, Alan Stern wrote:
> On Fri, 30 Jan 2009, K.Prasad wrote:
> 
> > > A few RCU-related questions below.
> > > 
> > > 							Thanx, Paul
> 
> Paul, you've got to learn to trim your replies!  It's not nice to have
> to skim over hundreds and hundreds lines of quoted text while searching
> for your interpolated comments.  In fact, the phrase "needle in a 
> haystack" springs to mind...

I should have said "search for empty lines", but yes, I should have
trimmed a bit.  My apologies!!!

> > > > +	thr_kbpdata = chbi->cur_kbpdata;
> > > > +	barrier();
> > > 
> > > Couldn't the above two lines instead be:
> > > 
> > > 	thr_kbpdata = ACCESS_ONCE(chbi->cur_kbpdata);
> > > 
> > > This would prevent the pointer aliasing, but would make it very clear
> > > exactly how the compiler was to be restricted.
> > 
> > Ok. Using a barrier() could be an overkill. I will change it.
> 
> IIRC, the original code above was written before ACCESS_ONCE came into
> being.  But I could be wrong about that...

Could well be, ACCESS_ONCE() showed up in 2.6.24, and moved out of
rcupdate.h a couple of releases later.

> > > > +/*
> > > > + * Tell all CPUs to update their debug registers.
> > > > + *
> > > > + * The caller must hold hw_breakpoint_mutex.
> > > > + */
> > > > +static void update_all_cpus(void)
> > > > +{
> > > > +	/* We don't need to use any sort of memory barrier.  The IPI
> > > > +	 * carried out by on_each_cpu() includes its own barriers.
> > > > +	 */
> > > > +	on_each_cpu(update_this_cpu, NULL, 0);
> > > > +	synchronize_rcu();
> > > 
> > > Don't we need the rcu_read_lock() / rcu_read_unlock() pair from
> > > load_debug_registers() to move down into update_this_cpu() in order
> > > for this to be guaranteed to work?  As the code reads now, the
> > > update_this_cpu() calls running on other CPUs are not running under
> > > RCU protection, right?
> 
> Maybe I'm misunderstanding the question.  update_this_cpu() is called
> from only two places: on_each_cpu() as shown above, and
> load_debug_registers().  It seems clear that contexts resulting from
> on_each_cpu() don't need RCU protection, because on_each_cpu() won't
> return until those routines have completed.
> 
> This leaves only contexts resulting from load_debug_registers().  But
> the first thing load_debug_registers() does is disable local
> interrupts, thus blocking IPI delivery.  Hence any simultaneous
> on_each_cpu() won't complete until after load_debug_registers() is
> done.
> 
> So there doesn't seem to be any need for RCU protection in
> update_this_cpu().
> 
> > 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?

							Thanx, Paul

  reply	other threads:[~2009-02-01 13:54 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 [this message]
2009-02-01 18:05           ` Alan Stern
2009-02-03 17:23             ` K.Prasad
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=20090201135433.GE7021@linux.vnet.ibm.com \
    --to=paulmck@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=naren@linux.vnet.ibm.com \
    --cc=prasad@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.