new USB driver
Hans Petter Selasky
hselasky at c2i.net
Thu Nov 11 08:05:59 PST 2004
On Thu, Nov 11, 2004 at 01:10:53AM +0000, Ian Dowse wrote:
> In message <20041109232129.A283 at curly.tele2.no>, Hans Petter Selasky writes:
> >
> >Does the USB developers agree that the USB-core should use and support
> >mutexes? If you want mutex support you will need to to call the callback the
> >way I have done, else you get reverse locking problems ...
>
> Yes, we would certainly like to see the USB code brought out from
> under Giant (it's probably not quite as critical as having it
> function reliably, but still very important). What is it about
> callbacks that needs to be changed?
The callback cannot be called from usb_transfer_complete(), like it is
currently done, due to the locking situation:
starting a transfer:
lock(priv)
// setup data
// I don't think it is a good idea
// to unlock priv before accessing
// the hardware, because if another
// thread is about to stop the same
// transfer, one doesn't know which
// thread will run first, because
// there is no lock held.
lock(usb)
// access and start hardware
unlock(usb)
unlock(priv)
when the HC interrupts:
lock(usb)
// check if the transfer is complete and
// enqueue transfer for completion if it has not been
// queued for completion by another thread already
// (NOTE: the queue is on the stack)
// cannot lock priv here because then the locking
// order will reverse which might cause a dead-lock
unlock(usb)
lock(priv)
// check if another thread has stopped the transfer
// or called the callback (e.g. timeout)
// call callback
unlock(priv)
See the file _uhci.c and the functions uhci_timeout() and uhci_interrupt().
>
> >> Do you have time to bring your driver up to date with -current, and
> >> start undoing some of the unnecessary changes?
> >
> >Yes, but it might take some time. When will USB 2.0 HUB support be in place?
>
> Basic support is there already, but only for talking to USB2 devices
> through USB2 hubs. How much more works with your driver?
I have not added more USB HUB support than there is in FreeBSD-5-current.
Yours
-HPS
More information about the freebsd-usb
mailing list