Port-sparc archive

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

Re: SMP status ?



Hi,

> i've commited a change to -current that should work around this problem,
> so any stability issues should be gone.  it's just a workaround but it is
> worth updating to since it makes things mostly work, at least on my SS20.

> if you're adventurous, please try -current sources and apply this patch:
> 
>       http://www.netbsd.org/~mrg/sparc.kpreempt.diff

I've tried -current with and without this patch on two SS20's.  One has two
SM71's, the other has three RT625's (100MHz).  Both have 448MB of memory.
They both boot from disk.  I tried `build.sh -j 4` on both of them, with
/usr/src and /usr/obj NFS mounted.  I can't get past the "cleandir" phase
(there are no files to clean - obj is empty).  The SS20 with the SM71's
locks solid and has to be power cycled.  The SS20 with the RT625's crashes
with:

  Mutex error: mutex_vector_enter: locking against myself

This is repeatable for both machines and the same with or without the patch
above.  The kernel that I'm using has DIADNOSTIC, DEBUG and LOCKDEBUG, so I
was able to look at the details of the crash.  The backtrace is:

  syscall_plain -> sys_write -> dofilewrite -> vn_write -> VOP_WRITE ->
    ffs_write -> ufs_balloc_range -> mutex_enter -> lockdebug_abort1

The mutex enter call is from /usr/src/sys/ufs/ufs/ufs_inode.c:276

                goto out;
        }
        mutex_enter(&uobj->vmobjlock);
-276->  mutex_enter(&uvm_pageqlock);
        for (i = 0; i < npages; i++) {
                UVMHIST_LOG(ubchist, "got pgs[%d] %p", i, pgs[i],0,0);
                KASSERT((pgs[i]->flags & PG_RELEASED) == 0);

and the lock has "last locked  : 0x00000000f00bbf8c", which is
/usr/src/sys/miscfs/genfs/genfs_io.c:698

out:
        UVMHIST_LOG(ubchist, "succeeding, npages %d", npages,0,0,0);
        error = 0;
-698->  mutex_enter(&uvm_pageqlock);
        for (i = 0; i < npages; i++) {
                struct vm_page *pg = pgs[i];
                if (pg == NULL) {

However, it's not obvious how the lock taken here can be left unlocked.

Thanks,

J

-- 
  My other computer also runs NetBSD    /        Sailing at Newbiggin
        http://www.netbsd.org/        /   http://www.newbigginsailingclub.org/


Home | Main Index | Thread Index | Old Index