tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: mutexes, locks and so on...



On 2010-11-19 01:13, Andrew Doran wrote:
On Wed, Nov 17, 2010 at 12:30:59PM +0100, Johnny Billquist wrote:
On 11/17/10 11:38, Johnny Billquist wrote:
On 11/17/10 05:15, Matt Thomas wrote:

On Nov 16, 2010, at 8:04 PM, Johnny Billquist wrote:

On 2010-11-17 04:52, Matt Thomas wrote:

Not true. Spinlocks must enter through mutex_spin_enter and adaptive
mutexes
enter through mutex_enter. The corresponding is true for exiting as
well.
The only reason mutex_vector_{enter,exit} is called to cause a panic.

That may be true in theory, but I happen to know (now) that it's not
true in reality. I've found atleast one place in the kernel where
this is done.

Then that is a bug and should be fixed. File a PR.

Ouch. Should I also file bugs for mutexes that are released, but already
appear to be free? Because that also happens.

I actually wonder if it is a bug, or just a chosen design. I'd rather
say we should get rid of the mutex_spin_{} functions, since the kernel
is so confused about the whole thing anyway.

I'm adding a bunch of counters now, and will come back with how often
these things are abused in a minute...

Oh, and mutex_vector_exit will not cause a panic, just because it was
called from mmutex_spin_exit with a adaptive mutex. mutex_vector_exit
will simply just handle it as an adaptive mutex, and release it.

That should probably be fixed.

How? mutex_vector_{enter,exit} have been written to handle both spin and
adaptive mutexes. And it don't know that it might have been called from
mutex_spin_{} with an adaptive mutex. It might in fact be the only
function available for both kinds... You don't have to write your own
mutex_[]_{enter,exit} functions, and if not, the mutex_vector ones will
be used directly.

Some results from having put in a bunch of counters. This on a
freshly booted system:

mutex exit adapt with unlocked                    0        0 misc
mutex exit spin with unlocked                  1004        2 misc
mutex enter spin with lock                        0        0 misc
mutex exit adapt with spin                    41864       92 misc
mutex exit spin with adapt                        0        0 misc
mutex enter adapt with spin                   40935       89 misc
mutex enter spin with adapt                       0        0 misc

It would be interesting to learn what's giving you those results.
On a running and very busy system mutex_enter/exit are "rarely" called
with spin mutexes as argument.

Well, since this was pretty soon after reboot, it was (I guess) mostly calls during the autoconf phase, and the starting of various daemons.

mutex exit spin with unlock appears to totally have been because some spin locks were managed to be taken though mutex_vector_enter, even though I have a mutex_spin_enter. I have no idea how on earth that path would be possible, but after changing the code that takes spin locks in mutex_vector_enter to match the code I have in mutex_spin_enter, that counter is now zero.

        Johnny

--
Johnny Billquist                  || "I'm on a bus
                                  ||  on a psychedelic trip
email: bqt%softjar.se@localhost             ||  Reading murder books
pdp is alive!                     ||  tryin' to stay hip" - B. Idol


Home | Main Index | Thread Index | Old Index