Patch to convert usb2 to use cdev

Rink Springer rink at FreeBSD.org
Sun Nov 9 07:47:22 PST 2008


Hi Hans,

On Sun, Nov 09, 2008 at 03:15:25PM +0100, Hans Petter Selasky wrote:
> 1) You don't have to create an alias in "usb2_fifo_attach". The 
> alias /dev/usbX.Y.Z.T is mostly for internal usage.
> 
> +               make_dev_alias(f_sc->dev, buf);

OK, I'll remove it - I assumed it might be used elsewhere, but
appearantly this is not the case.

> 
> 2) struct usb2_privdata
> 
> I would call the structure "usb2_fs_privdata" so that it is clear that this is 
> File-System related private data. There is also a field 
> called "xfer->priv_sc" so it might be confusing?

Yeah, after some though that is way too generic - I've renamed it to
'usb2_cdev_privdata' as it's really private cdev data.

> 3) You need to solve the problem about a per-open-call context 
> for /dev/ugenX.Y . This device is supposed to be cloneable, that means 
> multiple processes are allowed to open it and establish independant 
> connections to the USB stack. Here are also some tricky issues with 
> permissions, because I allow trunking of multiple endpoints through the same 
> file-handle, called USB FS, and you have to verify that the current thread 
> has permission to open the endpoint inside an ioctl function.

Well, multiple opens aren't a problem to implement - but I fail the
permissions problem. I think allowing multiple opens is useful for
as you can do ioctl() to them - but why would you ever want to be able
to read/write the same endpoint from multiple processes?

> 4) You need to generate dummy /dev/ugenX.Y.0 ... 15 inclusivly, endpoint 
> holders. Typically there are not 15 endpoints, but it is difficult to 
> in-advance figure out this number.

OK, will do.

> 5) Given that you use "destroy_dev_sched_cb" it becomes very easy to end up in 
> a situation with multiple cdev instances having identical names, because 
> the "destroy_dev_sched_cb" does not delete the device until the process which 
> has the device opened closes it. Especially when re-attaching an USB device.

Yeah, I agree this is a problem. Robert Watson suggested that maybe a
worker thread that does all make_dev and destroy_dev calls may be a good
idea (appearantly, pccard does this already) - so they can be adequately
serialized to prevent duplicant devices from existing. I'll think about
this some more and talk to pccard people about how they did it.

-- 
Rink P.W. Springer                                - http://rink.nu
"Anyway boys, this is America. Just because you get more votes doesn't
 mean you win." - Fox Mulder


More information about the freebsd-usb mailing list