Re: USB newbus livelock

From: Attilio Rao <attilio_at_freebsd.org>
Date: Tue, 18 Aug 2009 15:14:29 +0200
2009/8/18 Andrew Thompson <andy_at_fud.org.nz>:
> Hi Attilio,
>
>
> At the moment usb controller modules can not be unloaded due to a
> newbus locking problem, roughly...
>
> # kldunload ehci
> syscall()
> driver_module_handler()
>  --> newbus xlock (subr_bus.c:4127)
> usb_detach()
> usb_proc_mwait()  <- wakeup, detach and drain the usb thread
>
>
> [usb thread, detaching...]
> usb_bus_detach()
>  --> newbus xlock  (livelock, the kldunload process has this)
>
> Hans has made some changes WRT this, perforce changes 167093 and
> possibly 167087. Do you want to review this or maybe go for a similar
> fix?

The other and me are alredy aware of such a problem.
Actually, the right fix is to have attach/detach virtual functions to
be called completely locklessly (in particular the detach() path).
This also means a lot of work atm. This is why the newbus locking
change will be backed out for 8.0-REL (just backported to 8.1
proabilly though).

Attilio


-- 
Peace can only be achieved by understanding - A. Einstein
Received on Tue Aug 18 2009 - 11:14:32 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:54 UTC