mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: jmerkey@wolfmountaingroup.com
To: "Stefan Richter" <stefanr@s5r6.in-berlin.de>
Cc: "Nick Piggin" <nickpiggin@yahoo.com.au>,
	jmerkey@wolfmountaingroup.com, paulmck@linux.vnet.ibm.com,
	"Peter Zijlstra" <peterz@infradead.org>,
	linux-kernel@vger.kernel.org,
	"Linus Torvalds" <torvalds@linux-foundation.org>,
	"David Howells" <dhowells@redhat.com>
Subject: Re: [ANNOUNCE] mdb: Merkey's Linux Kernel Debugger  2.6.27-rc4  released
Date: Fri, 22 Aug 2008 05:54:00 -0600 (MDT)	[thread overview]
Message-ID: <42930.166.70.238.46.1219406040.squirrel@webmail.wolfmountaingroup.com> (raw)
In-Reply-To: <tkrat.28e983dc4d04d109@s5r6.in-berlin.de>

> On 22 Aug, Nick Piggin wrote:
>> On Friday 22 August 2008 00:09, Stefan Richter wrote:
>>> Nick Piggin wrote:
>>> > On Thursday 21 August 2008 22:26, jmerkey@wolfmountaingroup.com
>>> wrote:
>>> >> It's simple to reproduce.  Take away the volatile declaration for
>>> the
>>> >> rlock_t structure in mdb-ia32.c (rlock_t debug_lock) in all code
>>> >> references and watch the thing lock up in SMP with multiple
>>> processors
>>> >> in the debugger each stuck with their own local copy of debug_lock.
>>> >
>>> > You should disable preempt before getting the processor id. Can't see
>>> any
>>> > other possible bugs, but you should be able to see from the
>>> disassembly
>>> > pretty easily.
>>>
>>> debug_lock() is AFAICS only called from contexts which have preemption
>>> disabled.  Last time around I recommended to Jeff to document this
>>> requirement on the calling context.
>>
>> I'm not talking about where debug_lock gets called, I'm talking about
>> where the processor id is derived that eventually filters down to
>> debug_lock.
>
> You are right, I replied to fast.  debug_unlock() retrieves the
> processor itself, but not debug_lock().
>
>>> But even though preemption is disabled, debug_lock() is still incorrect
>>> as I mentioned in my other post a minute ago.  It corrupts its .flags
>>> and .count members.  (Or maybe it coincidentally doesn't as long as
>>> volatile is around.)
>>
>> I don't think so. And flags should only be restored by the processor
>> that saved it because the spinlock should disable preemption, right?
>
> OK; the .count seems alright due to restrictions of the calling
> contexts.  About .flags:  Jeff, can the following happen?
>
>   - Context A on CPU A has interrupts enabled.  Enters debug_lock(),
>     thus disables its interrupts.  (Saves its flags in rlock->flags with
>     the plan to enable interrupts later when leaving debug_unlock()
>     provided it does so as last holder.)

ints should already be off here.
>
>   - Context B on CPU B happens to have interrupts disabled.  Enters
>     debug_lock(), overwrites rlock->flags with its different value.
>     (Spins on the rlock which is held by CPU A.)

ints are disabled on both here (should be).

>
>   - Context A on CPU A leaves debug_unlock.  Doesn't re-enable its
>     interrupts as planned, since rlock->flags is the one from CPU B.
> --

It should be benign since both procs have ints off here.

Stefan,

The flags needs fixing, you are right, however, since this case only
occurs when two processors both have an int1 exception (or some exception
other than an NMI) and ints are disabled here anyway, its benign.   That
being said, it needs to be perfect.  So I moved the flags to a stack
variable.

I will post a new patch series correcting the flags issue along with code
fragments showing the gcc breakage with debug lock later tonight.  I have
a lot to get done at omega8 on appliance releases this week, and being a
48 years old this year, I am slower than I used to be.

:-)

Jeff




  reply	other threads:[~2008-08-22 12:20 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-21  2:50 jmerkey
2008-08-21 10:07 ` Peter Zijlstra
2008-08-21 10:57   ` Stefan Richter
2008-08-21 11:02     ` Peter Zijlstra
2008-08-21 11:47       ` Paul E. McKenney
2008-08-21 12:03         ` Peter Zijlstra
2008-08-21 14:53           ` Paul E. McKenney
2008-08-21 14:58             ` jmerkey
2008-08-21 12:05         ` Stefan Richter
2008-08-21 12:26           ` jmerkey
     [not found]             ` <43593.166.70.238.46.1219321595.squirrel@webmail.wolfmountaingroup.com >
2008-08-21 12:35               ` jmerkey
2008-08-21 13:37             ` Nick Piggin
2008-08-21 14:09               ` Stefan Richter
2008-08-22  1:40                 ` Nick Piggin
2008-08-22  6:32                   ` Stefan Richter
2008-08-22 11:54                     ` jmerkey [this message]
2008-08-22 12:36                       ` Stefan Richter
2008-08-21 14:09               ` Peter Zijlstra
2008-08-21 14:30                 ` Paul E. McKenney
2008-08-21 14:14                   ` jmerkey
2008-08-21 14:48                   ` Peter Zijlstra
2008-08-21 16:21                 ` Avi Kivity
2008-08-21 21:06               ` Jeremy Fitzhardinge
2008-08-21 21:18                 ` Linus Torvalds
2008-08-21 21:21                   ` Jeremy Fitzhardinge
2008-08-24  4:25                   ` jmerkey
2008-08-26  8:26                     ` Andi Kleen
2008-08-27  1:49                       ` jmerkey
2008-08-22  1:37                 ` Nick Piggin
2008-08-21 14:02             ` Stefan Richter
2008-08-21 14:08               ` jmerkey
2008-08-21 15:22                 ` Stefan Richter
2008-08-21 15:02                   ` jmerkey
2008-08-21 15:57         ` Linus Torvalds
2008-08-21 16:18           ` Linus Torvalds
2008-08-21 16:48             ` Paul E. McKenney
2008-09-24  0:01               ` Paul E. McKenney
2008-08-21 16:43           ` Paul E. McKenney

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=42930.166.70.238.46.1219406040.squirrel@webmail.wolfmountaingroup.com \
    --to=jmerkey@wolfmountaingroup.com \
    --cc=dhowells@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nickpiggin@yahoo.com.au \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=stefanr@s5r6.in-berlin.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®