On Tue, 3 Jun 2014, Pantelis  Koukousoulas wrote:

> On Mon, Jun 2, 2014 at 6:04 PM, Alan Stern <[email protected]> wrote:
> > No, this is completely wrong.  When the driver uses SuperSpeed support,
> > there are two hcds: the high speed one and the SuperSpeed one.  They
> > are different structures and they both need to be initialized.
> >
> > It sounds like you have confused struct dummy (there's only one of
> > these) with struct dummy_hcd (there are two of these).
> 
> I think that indeed I was completely wrong but I wasn't confused about the
> structures, but regarding some details of what is executed when, in which
> order and in which context.
> 
> The reason was that when I simply removed the timer / list initialization
> from dummy_start_ss(), (because they belong to the shared struct dummy_hcd
> so they better only be initialized in one place)

That's the same mistake as before -- struct dummy_hcd _isn't_ shared.  
Only struct dummy is shared.

>  I got a hard lockup
> during testing,
> when I started dummy_hcd in superspeed mode and added a device.
> 
> I think that now I understand why this happened, but I will read the
> relevant bits
> from dummy_hcd and xhci once more (especially what happens if there is
> a suspend / resume between the initialization of the highspeed hcd and the
> superspeed hcd) and come back with a different approach that will hopefully
> be both correct and DRY.

The current version of xhci-pci prevents any suspends from occurring
between the initialization of the two hcds; see commit bcffae7708eb.  
You might need to make dummy-hcd do the same thing.

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

Reply via email to