From: jmerkey@wolfmountaingroup.com
To: "Stefan Richter" <stefanr@s5r6.in-berlin.de>
Cc: jmerkey@wolfmountaingroup.com, paulmck@linux.vnet.ibm.com,
"Peter Zijlstra" <peterz@infradead.org>,
linux-kernel@vger.kernel.org,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Nick Piggin" <nickpiggin@yahoo.com.au>,
"David Howells" <dhowells@redhat.com>
Subject: Re: [ANNOUNCE] mdb: Merkey's Linux Kernel Debugger 2.6.27-rc4 released
Date: Thu, 21 Aug 2008 08:08:58 -0600 (MDT) [thread overview]
Message-ID: <2820.69.2.248.210.1219327738.squirrel@webmail.wolfmountaingroup.com> (raw)
In-Reply-To: <48AD757A.8000608@s5r6.in-berlin.de>
> 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.
>
> I'm having a quick look at mdb-2.6.27-rc4-ia32-08-20-08.patch at the
> moment. Speaking of debug_lock()...:
>
> You use spin_trylock_irqsave((spinlock_t *)&rlock->lock, rlock->flags)
> in there. Minor nit: The pointer type cast is unnecessary.
>
> Major problem: rlock->flags is wrong in this call. Use an on-stack
> flags variable for the initial spin_trylock_irqsave. Ditto in the
> following call of spin_trylock_irqsave.
>
> Next major problem with debug_lock() and debug_unlock(): The reference
> counting doesn't work. You need an atomic_t counter. Have a look at
> the struct kref accessors for example, or even make use of the kref API.
> Or if it isn't feasible to fix with atomic_t, add a second spinlock to
> rlock_t to ensure integrity of .count (and of the .processor if
> necessary).
>
> Furthermore, I have doubts about the loop which is entered by CPU B
> while CPU A holds the rlock. You are fully aware that atomic_read(a) &&
> !atomic_read(b) in its entirety is not atomic, I hope.
>
> All this aside, I don't see *anything* in debug_lock and _unlock which
> would necessitate volatile. Well, volatile might have papered over some
> of these bugs.
>
> PS:
> Try to cut down on #if/#endif clutter. It should be possible to reduce
> them at least in .c files; .h are a different matter. For example,
> #if MDB_DEBUG_DEBUGGER
> DBGPrint("something");
> #endif
> can be trivially reduced to
> dbg_mdb_printk("something");
> where dbg_mdb_printk() is defined as an inline function which does
> nothing when MDB_DEBUG_DEBUGGER is false.
>
> PS2:
> Why are there this many debug printks anyway?
> --
> Stefan Richter
> -=====-==--- =--- =-=-=
> http://arcgraph.de/sr/
>
The code works in debug lock provided this memory location is actually
SHARED between the processors. The various race conditions you describe
are valid cases, but he only modifier of .count and .lock is the processor
that obtains the spinlock -- the rest are readers. This code works well,
of course, when this memory location is actually SHARED between the
processors and the read/write operations serialized.
Even in SMP, at various times it is necessary for the processors to
perform serializing operations. You cannot in checker-scoreboard land for
everything.
Jeff
next prev parent reply other threads:[~2008-08-21 14:34 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
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 [this message]
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=2820.69.2.248.210.1219327738.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®