On Fri, Feb 7, 2014 at 7:17 AM, Alan Stern <st...@rowland.harvard.edu> wrote:
> On Fri, 7 Feb 2014, Dan Williams wrote:
>
>> >> +     /* power on our usb3 peer before this usb2 port to prevent a usb3
>> >> +      * device from degrading to its usb2 connection
>> >> +      */
>> >> +     if (!hub_is_superspeed(hdev) && peer)
>> >> +             pm_runtime_get_sync(&peer->dev);
>> >> +
>> >
>> > Have you considered what would happen if this runs before the ACPI data
>> > causes the peers to be re-matched?
>>
>> If userspace is sets pm_qos_no_poweroff to 0 before we have figured
>> out the peer then suspending this port may lead to a disconnect.
>
> What if userspace sets pm_qos_no_poweroff to 0 _after_ we have figured
> out the peer and _before_ the ACPI data causes us to change the peer?

You know, I believe these races would go away if we could delay port
pm runtime activation until after the initial discovery of the entire
hub topology.  One potential way of solving this is to proceed with
converting khubd to a workqueue.  Then, we could use a properly placed
drain_workqueue() to flush the chain of khubd discovery events to
completion.

Other thoughts?
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to