Hi Felipe,

Resending...

Since I am waiting on your suggestion,  thought of giving remainder.
 
Thanks,
Anurag Kumar Vulisha

>-----Original Message-----
>From: Anurag Kumar Vulisha
>Sent: Wednesday, December 12, 2018 8:41 PM
>To: 'Alan Stern' <[email protected]>; Felipe Balbi <[email protected]>
>Cc: Greg Kroah-Hartman <[email protected]>; Shuah Khan
><[email protected]>; Johan Hovold <[email protected]>; Jaejoong Kim
><[email protected]>; Benjamin Herrenschmidt <[email protected]>;
>Roger Quadros <[email protected]>; Manu Gautam <[email protected]>;
>[email protected]; Bart Van Assche <[email protected]>; Mike
>Christie <[email protected]>; Matthew Wilcox <[email protected]>; Colin Ian
>King <[email protected]>; [email protected]; linux-
>[email protected]; [email protected]; Thinh Nguyen
><[email protected]>; Tejas Joglekar <[email protected]>; Ajay
>Yugalkishore Pandey <[email protected]>
>Subject: RE: [PATCH v7 01/10] usb: gadget: udc: Add timer support for usb 
>requests
>
>
>Hi Felipe,
>
>>-----Original Message-----
>>From: Alan Stern [mailto:[email protected]]
>>Sent: Friday, December 07, 2018 10:40 PM
>>To: Felipe Balbi <[email protected]>
>>Cc: Anurag Kumar Vulisha <[email protected]>; Greg Kroah-Hartman
>><[email protected]>; Shuah Khan <[email protected]>; Johan Hovold
>><[email protected]>; Jaejoong Kim <[email protected]>; Benjamin
>>Herrenschmidt <[email protected]>; Roger Quadros <[email protected]>;
>Manu
>>Gautam <[email protected]>; [email protected]; Bart Van
>>Assche <[email protected]>; Mike Christie <[email protected]>; Matthew
>>Wilcox <[email protected]>; Colin Ian King <[email protected]>; 
>>linux-
>>[email protected]; [email protected]; [email protected];
>>Thinh Nguyen <[email protected]>; Tejas Joglekar
>><[email protected]>; Ajay Yugalkishore Pandey <[email protected]>
>>Subject: RE: [PATCH v7 01/10] usb: gadget: udc: Add timer support for usb 
>>requests
>>
>>On Fri, 7 Dec 2018, Felipe Balbi wrote:
>>
>>>
>>> hi,
>>>
>>> Anurag Kumar Vulisha <[email protected]> writes:
>>> >>Does the data book suggest a value for the timeout?
>>> >>
>>> >
>>> > No, the databook doesn't mention about the timeout value
>>> >
>>> >>> >At this point, it seems that the generic approach will be messier than 
>>> >>> >having
>>every
>>> >>> >controller driver implement its own fix.  At least, that's how it 
>>> >>> >appears to me.
>>>
>>> Why, if the UDC implementation will, anyway, be a timer?
>>
>>It's mostly a question of what happens when the timer expires.  (After
>>all, starting a timer is just as easy to do in a UDC driver as it is in
>>the core.)  When the timer expires, what can the core do?
>>
>>Don't say it can cancel the offending request and resubmit it.  That
>>leads to the sort of trouble we discussed earlier in this thread.  In
>>particular, we don't want the class driver's completion routine to be
>>called when the cancel occurs.  Furthermore, this leads to a race:
>>Suppose the class driver decides to cancel the request at the same time
>>as the core does a cancel and resubmit.  Then the class driver's cancel
>>could get lost and the request would remain on the UDC's queue.
>>
>>What you really want to do is issue the appropriate stop and restart
>>commands to the hardware, while leaving the request logically active
>>the entire time.  The UDC core can't do this, but a UDC driver can.
>>
>
>I agree with Alan's comment as it looks like there may be some corner cases
>where the issue may occur with dequeue approach. Are you okay if the timeout
>handler gets moved to the dwc3 driver (the timers still added into udc layer)?
>Please let us know your suggestion on this
>
>Thanks,
>Anurag Kumar Vulisha
>
>>> >>(Especially if dwc3 is the only driver affected.)
>>> >
>>> > As discussed above, the issue may happen with other gadgets too. As I got 
>>> > divide
>>opinions
>>> > on this implementation and both the implementations looks fine to me, I am
>little
>>confused
>>> > on which should be implemented.
>>> >
>>> > @Felipe: Do you agree with Alan's implementation? Please let us know your
>>suggestion
>>> > on this.
>>>
>>> I still think a generic timer is a better solution since it has other uses.
>>
>>Putting a struct timer into struct usb_request is okay with me, but I
>>wouldn't go any farther than that.
>>
>>> >>Since the purpose of the timeout is to detect a deadlock caused by a
>>> >>hardware bug, I suggest a fixed and relatively short timeout value such
>>> >>as one second.  Cancelling and requeuing a few requests at 1-second
>>> >>intervals shouldn't add very much overhead.
>>>
>>> I wouldn't call this a HW bug though. This is just how the UDC
>>> behaves. There are N streams and host can move data in any stream at any
>>> time. This means that host & gadget _can_ disagree on what stream to
>>> start next.
>>
>>But the USB 3 spec says what should happen when the host and gadget
>>disagree in this way, doesn't it?  And it doesn't say that they should
>>deadlock.  :-)  Or have I misread the spec?
>>
>>> One way to avoid this would be to never pre-start any streams and always
>>> rely on XferNotReady, but that would mean greatly reduced throughput for
>>> streams.
>>
>>It would be good if there was some way to actively detect the problem
>>instead of passively waiting for a timer to expire.
>>
>>Alan Stern

Reply via email to