> i can't see how this could be unless on very first
> reference of the lock there is a race with the looser
> evaluateing !l->isilock before that processor can see
> the winner setting l->isilock to 1.
> 
> if this diagnosis is correct, what is the proper fix?

take the test out.

this is my fault.  (ironically, i put it in while debugging
some of your code, years ago.)

change:

                /*
                 * Cannot also check l->pc and l->m here because
                 * they might just not be set yet, or the lock might 
                 * even have been let go.
                 */
                if(!l->isilock){
                        dumplockmem("ilock:", l);
                        panic("corrupt ilock %p pc=%luX m=%p isilock=%d", 
                                l, l->pc, l->m, l->isilock);
                }

to

                /*
                 * Cannot also check l->pc, l->m, or l->isilock here
                 * because they might just not be set yet, or
                 * (for pc and m) the lock might have just been unlocked.
                 */

two out of three isn't bad.  ;-)

russ


Reply via email to