On Tue, Oct 16, 2007 at 10:55:54AM -0400, Alan Stern wrote: > On Tue, 16 Oct 2007, Dave Young wrote: > > > > I finally duplicated this on one of my machines here at boot time, with > > > USB built into the kernel. I'll work tomorrow on tracking this down > > > further... > > Hi, > > I add some printk messages, dump_stack and some others, here is the > > dmesg dump with debug info(lines begin with "hidave"): > > Okay, good, the extra printk messages show exactly where the problem > lies. > > In usb_set_configuration(), each new interfaces is registered and then > usb_create_sysfs_intf_files() gets called for that interface. This > makes sense, because obviously we can't create sysfs files for an > interface before it is registered. > > The problem is that during registration drivers get probed, and drivers > sometimes call usb_set_interface() from their probe method. This > routine also calls usb_create_sysfs_intf_files(), and the result is > that the sysfs files get created twice: > > First by usb_set_interface, from the driver probe; > > Then by usb_set_configuration, when registration is > finished. > > I can think of two possible ways around the problem. One is to add a > bit to the usb_interface structure, recording whether the sysfs files > have been created. The other is always to remove the files just before > trying to create them. I haven't looked at this code at all, but neither approach feels right to me. How does this work at all? Even if you load a driver later, wouldn't it call usb_set_interface(), which would call usb_create_sysfs_intf_files() and hit the same issue? Heck, why do both call usb_create_sysfs_intf_file()? I would guess if you're *changing* the active configuration you would need to do that, but why in usb_set_interface() at all? Matt -- Matthew Dharm Home: [email protected] Maintainer, Linux USB Mass Storage Driver I say, what are all those naked people doing? -- Big client to Stef User Friendly, 12/14/1997
Attachment:
pgp3Wjs80pM4O.pgp
Description: PGP signature
- Follow-Ups:
- References:
- Prev by Date: [patch 3/3] Use BOOTMEM_EXCLUSIVE on x86
- Next by Date: Re: NVIDIA Ethernet & invalid MAC
- Previous by thread: Re: [linux-usb-devel] usb+sysfs: duplicate filename 'bInterfaceNumber'
- Next by thread: Re: [linux-usb-devel] usb+sysfs: duplicate filename 'bInterfaceNumber'
- Index(es):