tech-kern archive

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

Re: Modules loading modules?



On Mon Aug 02 2010 at 16:30:03 +1000, matthew green wrote:
> this is an incomplete reading of the manual page, and you can not
> use mutex_owned() the way you are trying to (regardless of what
> pooka posted.) you can't even using it in various forms of assertions
> safely.  from the man page:
> 
>       It should not be used to make locking decisions at run time, or to
>       verify that a lock is not held.

That's the mantra, yes.

> ie, you can not even KASSERT(!mutex_owned()).

Strictly speaking you can in a case where you have two locks always
are taken as l1,l2 and released as l2,l1 provided you're not dealing
with a spin mutex.  Does it make any sense?  no (l2 is useless).
Is it possible?  yes.

Now, on to sensible stuff.  I'm quite certain that warning was written
to make people avoid writing bad code without understanding locking --
if you need to used mutex_owned() to decide if you should lock a normal
mutex, your code is broken.  The other less likely possibility is that
someone plans to change mutex_owned in the future.

Further data point: the same warning is in rw_held, yet it was used to
implement recursive locking in vlockmgr until its very recent demise.

Ignoring man page mantras and focusing on how the code works, I do not
see anything wrong with Paul's use of mutex_owned().

> but i'm still not sure why we're going to such lengths to hold a
> lock across such a heavy weight operation like loading a module.
> that may involve disk speeds, and so you're looking at waiting
> millions of cycles for the lock.  aka, what eeh posted.

It's held for millions of cycles already now and nobody has pointed out
measurable problems.  But if it is deemed necessary, you can certainly
hide a cv underneath.  The efficiency requirements for the module lock
are probably anyway in the "who cares wins ... not" spectrum.  At least
I'm not aware of any fastpath wanting to use it.

Anyway, no real opinion there.  A cv most likely is the safe, no-brainer
choice.


Home | Main Index | Thread Index | Old Index