Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Mar 2006 12:43:02 -0500
From:      John Baldwin <jhb@freebsd.org>
To:        Oleg Sharoiko <os@rsu.ru>
Cc:        freebsd-scsi@freebsd.org, Andrey Beresovsky <and@rsu.ru>
Subject:   Re: Boot hangs on ips0: resetting adapter, this may take up to 5 minutes
Message-ID:  <200603061243.04708.jhb@freebsd.org>
In-Reply-To: <1141653998.1502.23.camel@brain.cc.rsu.ru>
References:  <20060215102749.D58480@brain.cc.rsu.ru> <20060304224419.N1270@wolf.os.rsu.ru> <1141653998.1502.23.camel@brain.cc.rsu.ru>

next in thread | previous in thread | raw e-mail | index | archive | help
On Monday 06 March 2006 09:06, Oleg Sharoiko wrote:
> On Sat, 2006-03-04 at 23:07 +0300, Oleg Sharoiko wrote:
> 
> > ips0: <Adaptec ServeRAID Adapter> mem 
> > 0xd0300000-0xd0300fff,0xd4000000-0xd7ffffff irq 11 at device 1.0 on pci3
> > ips0: Reserved 0x1000 bytes for rid 0x10 type 3 at 0xd0300000
> > ips0: irq allocation failed
> > panic: Assertion mtx_unowned(m) failed at 
> > /usr/src-HEAD-20060228-223000UTC/sys/kern/kern_mutex.c:885
> > cpuid = 0
> > KDB: enter: panic
> > [thread pid 0 tid 0 ]
> > Stopped at      kdb_enter+0x31: leave   
> > db> 
> 
> There seems to be a small bug in the ips driver. I doesn't relate to the
> hang at all, but as I suppose it needs to be fixed anyway.
> 
> ips_pci_attach() from dev/ips/ips_pci.c does "goto error;" to make a
> cleanup when something goes wrong. There we have
> 
> error:
>         ips_pci_free(sc);
>         return (ENXIO);
> 
> ips_pci_free() always calls 
> 
> mtx_destroy(&sc->queue_mtx);
> sema_destroy(&sc->cmd_sema);
> 
> but ips_pci_attach may jump to error: event before queue_mtx gets
> initialized. Unfortunately I'm not sure how to fix this in the most
> proper way. I suppose it would be nice to check in ips_pci_free() if the
> mutex is initialized or not, but I don't know how to implement this
> check. Another possible solution is to move initializition before first
> "goto error"; So I'm leaving this for the one who knows better.

Actually, you can just init the mutex and sema earlier so they are always
setup.  That's what several other drivers do.  mtx_init() is fairly
cheap in the non-WITNESS case.

-- 
John Baldwin <jhb@FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200603061243.04708.jhb>