merge coming soon: jmcneill-usbmp

hi folks.
i think the usbmp branch is ready to merge into -current. i've
built a couple of i386/amd64 GENERIC kernels for people to test
in the next week or so. i've also tested on sparc64 and powerpc
but if anyone else would like a kernel please let me know (or
checkout the jmcneill-usbmp branch, src/sys only.) macppc would
be a good test contender :)
i'd like to merge next weekend barring any major problems found.
the main changes are something like:
- usbd_bus_methods{} gains a get_lock() to enable the
host controller to provide a lock for the USB code.
if the lock isn't provided, old-style protection is
(partially) applied.
- ehci/ohci/uhci have been converted to the new
interfaces, including mutex/cv/etc conversion.
- usbdivar.h contains a discussion about locking and
what locks are held for which method calls. more
to come for usbdi(9) here.
- audio drivers (uaudio, umidi, auvitek) have been
properly SMPified now that USB is ready.
- scsi drivers have been modified to take the kernel
lock explicitly before calling into scsi code.
- usb pipes are associated with a lock, that is the
same as the controller lock. (this could be split
up further in the future.)
- several usbfoo_locked() or usbfoo_unlocked()
functions have been added to the usbdi(9) to
enable functionality with or without the USB
lock (per controller) already being held.
see the TODO.usbmp file for information about which devices
have already been tested. i haven't had any good testing on
ugen(4) or much on uhid(4)/uhidev(4) yet, nor for ulpt(4).
i'd prefer to get back success stories of those before the
merge if possible. this file also contains a list of what
else can/should be done for full SMPification. there are
still many drivers exporting non-SMP interfaces to the
higher levels (eg, see the D_MPSAFE section.)
i huge thanks goes to jared mcneill for starting this and
getting the first few drivers working. i would never have
done this myself. extra thanks to the various folks who
have tested things so far for me.
diff:
http://www.netbsd.org/~mrg/usbmp.2012-06-02.diff
amd64 GENERIC:
http://www.netbsd.org/~mrg/netbsd.GENERIC.usbmp.amd64.bz2
i386 GENERIC:
http://www.netbsd.org/~mrg/netbsd.GENERIC.usbmp.i386.bz2
thanks!
.mrg.