Re: about possible port reset when disconnect

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



hi Alan:
>> Your log contains the explanation:
>>
>>> Platform-ehci Platform-ehci.0: port 1 reset
>>
>> This is where the reset starts.
>>
>>> Platform-ehci Platform-ehci.0: in port reset sequence, GetStatus
>>> port:1 status 000100 0  ACK sig=se0 RESET
>>> usb 4-1: USB disconnect, device number 20
>>
>> And this is where US_FLIDX_DISCONNECTING gets set -- after the reset
>> has already begun.
>>
>>> 2. shall we add below determination before port reset?
>>> --- a/linux-3.8.2/drivers/usb/host/ehci-hub.c
>>> ++ b/linux-3.8.2/drivers/usb/host/ehci-hub.c
>>> @@ -1139,6 +1139,9 @@ static int ehci_hub_control (
>>>                 case USB_PORT_FEAT_RESET:
>>>                         if (temp & PORT_RESUME)
>>>                                 goto error;
>>> +
>>> +                       if (!(temp & PORT_CONNECT))
>>> +                               goto disconnect;
>>>                         /* line status bits may report this as low speed,
>>>                          * which can be fine if this root hub has a
>>>                          * transaction translator built in.
>>
>> We could add this, but it's not a big deal.  The real question is why
>> did this happen:
>>
>>> hub 4-0:1.0: hub_port_status failed (err = -32)
>>
>> hub_port_status should not return an error.  It should have returned
>> valid data, and the port status should have shown that the device was
>> disconnected.  Can you figure out why hub_port_status didn't work?
I add more description.
in Below #1, since connect status is zero, handshake will fail with
return -ETIMEDOUT.
Then go to #2 error label.
and finally hub_port_status  get -32, -EPIPE.

1. Platform-ehci Platform-ehci.0: port 1 reset error -110
    the -110 is due to below handshake timeout.
          retval = handshake(ehci, status_reg,
                     PORT_RESET, 0, 1000);
          if (retval != 0) {
                 ehci_err (ehci, "port %d reset error %d\n",
                     wIndex + 1, retval);
                 goto error;
             }

 2. hub 4-0:1.0: hub_port_status failed (err = -32)
     the -32 is due to below error label we set retval = -EPIPE
     error:
         /* "stall" on error */
         retval = -EPIPE;

thanks for your kind reply ^^
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux