On Wed, 30 Mar 2016, Ivaylo Dimitrov wrote:
> >>> seems to be created twice :). Maybe the problem is that the first time
> >>> musb-hdrc is probed it fails with -EPROBE_DEFER, however that failure is
> >>> after gadget drivers got loaded and noone unloads them.
> >>
> >> gadget drivers will get added to a pending list, then later they'll
> >> bind. But they shouldn't bind() twice, unless there are multiple
> >> interfaces for them.
> >>
> >
> > Well, then it seems we have problem, as the 2 unbind() calls are with
> > one and the same "common" pointer (again, from memory).
> >
> >>> Just some wild guesses based on my memories as I've lost the logs (power
> >>> outage). For sure I can recreate them if needed.
> >>
> >> okay.
> >
> > I will redo dump_stack() and printks and will provide logs as soon as I
> > have some time, so to stop counting on my memories.
> >
>
> Please find attached the relevant logs. It really seems that g_nokia is
> probed twice, with all the gadgets in it created two times. I am
> starting to suspect 855ed04a3758b205e84b269f92d26ab36ed8e2f7 ("usb:
> gadget: udc-core: independent registration of gadgets and gadget
> drivers") has something to do with the problem, though reverting it
> resulted in g_nokia not being probed at all :)
The problem is not caused by nokia_bind() getting called twice. The
log clearly shows that nokia_bind() is called only once, but it calls
usb_add_config() from two different places:
Jan 1 02:00:10 Nokia-N900 kernel: [ 8.002838] [<c040c5b4>] (usb_add_config)
from [<c041b274>] (nokia_bind+0x160/0x2f0)
Jan 1 02:00:10 Nokia-N900 kernel: [ 8.014526] [<c041b274>] (nokia_bind)
from [<c040e128>] (composite_bind+0x68/0x1a0)
...
Jan 1 02:00:10 Nokia-N900 kernel: [ 8.381286] [<c040c5b4>] (usb_add_config)
from [<c041b28c>] (nokia_bind+0x178/0x2f0)
Jan 1 02:00:10 Nokia-N900 kernel: [ 8.394348] [<c041b28c>] (nokia_bind)
from [<c040e128>] (composite_bind+0x68/0x1a0)
Everything else along the two pathways is the same, so this is where
the multiple binds come from. And indeed, looking at the code in
nokia_bind() you can see the two calls:
/* finally register the configuration */
status = usb_add_config(cdev, &nokia_config_500ma_driver,
nokia_bind_config);
if (status < 0)
goto err_msg_luns;
status = usb_add_config(cdev, &nokia_config_100ma_driver,
nokia_bind_config);
This isn't supposed to cause any problems. The two instances should
never run at the same time, because they belong to different configs.
Alan Stern
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html