tech-kern archive

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

Re: Bug in mutex_owned() ?



On Sun, Oct 25, 2009 at 05:31:53PM +0100, Hans Petter Selasky wrote:
> On Sunday 25 October 2009 15:37:43 Mindaugas Rasiukevicius wrote:
> > Hans Petter Selasky <hselasky%c2i.net@localhost> wrote:
> > >    39 static __inline int
> > >    40 __SIMPLELOCK_LOCKED_P(__cpu_simple_lock_t *__ptr)
> > >    41 {
> > >    42         return *__ptr == __SIMPLELOCK_LOCKED;
> > >    43 }
> > >
> > >    72 #define __SIMPLELOCK_LOCKED     1
> > >    73 #define __SIMPLELOCK_UNLOCKED   0
> > >
> > > mutex_owned() == 1 for spin locks ???
> >
> > Yes, it is a comparison.  Which is correct for the purpose.
> 
> And what is the purpose of that function? Internal only?
> 
> The comparison is right when done by the locking CPU, but if there are two 
> CPU's and the non-locking CPU checks this flag at the same time, it gets a 1 
> aswell, which is wrong.

I think you should read the NetBSD man page of that function.  From what
you say it appears to me you might have the semantics of FreeBSD's
mtx_owned(9) in mind, although it's not clear from their man page what
is supposed to happen with spin locks.

-- 
Quentin Garnier - cube%cubidou.net@localhost - cube%NetBSD.org@localhost
"See the look on my face from staying too long in one place
[...] every time the morning breaks I know I'm closer to falling"
KT Tunstall, Saving My Face, Drastic Fantastic, 2007.

Attachment: pgp8_p_bz1gf4.pgp
Description: PGP signature



Home | Main Index | Thread Index | Old Index