Subject: Re: deadlocks, many processes in sleepq_block
To: Anthony Mallet <anthony.mallet@laas.fr>
From: Greg Oster <oster@cs.usask.ca>
List: tech-kern
Date: 09/20/2007 16:01:23
Anthony Mallet writes:
> Andrew Doran writes:
> | If you are running amd64 you'll need to compile the kernel with
> | -fno-omit-frame-pointer. LOCKDEBUG and DIAGNOSTIC will help to track down
> | the problem.
> 
> Actually DIAGNOSTIC triggered an assert:
> mutex_owned(&l->l_swaplock) failed: file uvm/uvm_glue.c, line 482
> 
> I see that the last commit in this file is dated from Aug 18, which is
> more or less the date at which I started to have trouble...
>  
> Since my kernel panic'ed, I was not able to use my keyboard to type
> anything in ddb (it was still attached to the X session). I was able to
> see the panic message by switching to VT1 before the panic.
> Of course I have no serial line on this machine to run kgdb.
> 
> Any idea ? :)

Of the two places that call uvm_swapin(), the one that doesn't hold 
l_swaplock is this one:

uvm_lwp_hold(struct lwp *l)
{

        /* XXXSMP mutex_enter(&l->l_swaplock); */
        if (l->l_holdcnt++ == 0 && (l->l_flag & LW_INMEM) == 0)
                uvm_swapin(l);
        /* XXXSMP mutex_exit(&l->l_swaplock); */
}

Why those lines (and two similar ones in the next function) are 
marked XXXSMP, I'm not sure :) (And that's a "not sure" as in 
"I really don't know", not as in "I think they should be" :) )

Later...

Greg Oster