linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alan Stern <stern@rowland.harvard.edu>
To: Anurag Kumar Vulisha <anuragku@xilinx.com>
Cc: Felipe Balbi <balbi@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Shuah Khan <shuah@kernel.org>, Johan Hovold <johan@kernel.org>,
	Jaejoong Kim <climbbb.kim@gmail.com>,
	Benjamin Herrenschmidt <benh@kernel.crashing.org>,
	Roger Quadros <rogerq@ti.com>,
	Manu Gautam <mgautam@codeaurora.org>,
	"martin.petersen@oracle.com" <martin.petersen@oracle.com>,
	Bart Van Assche <bvanassche@acm.org>,
	Mike Christie <mchristi@redhat.com>,
	Matthew Wilcox <willy@infradead.org>,
	Colin Ian King <colin.king@canonical.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"v.anuragkumar@gmail.com" <v.anuragkumar@gmail.com>,
	Thinh Nguyen <thinhn@synopsys.com>,
	Tejas Joglekar <tejas.joglekar@synopsys.com>,
	Ajay Yugalkishore Pandey <APANDEY@xilinx.com>
Subject: RE: [PATCH v7 01/10] usb: gadget: udc: Add timer support for usb requests
Date: Mon, 3 Dec 2018 18:08:19 -0500 (EST)	[thread overview]
Message-ID: <Pine.LNX.4.44L0.1812031758080.31542-100000@netrider.rowland.org> (raw)
In-Reply-To: <BL0PR02MB563382F544FBEA926452DCF1A7AE0@BL0PR02MB5633.namprd02.prod.outlook.com>

On Mon, 3 Dec 2018, Anurag Kumar Vulisha wrote:

> >On Mon, 3 Dec 2018, Anurag Kumar Vulisha wrote:
> >
> >> >First of all, if some sort of deadlock causes a transfer to fail to
> >> >complete, the host is expected to cancel and restart it.  Not the
> >> >gadget.
> >> >
> >>
> >> Thanks for spending your time in reviewing this patch.  The deadlock
> >> is  a very rare case scenario and is happening because both the gadget
> >> controller & host controllers get out of sync and are stuck waiting for the
> >> relevant event. For example this issue is observed in stream protocol where
> >> the gadget controller is waiting on Host controller to issue PRIME transaction
> >> and  Host controller is waiting on gadget to issue ERDY transaction. Since
> >> the stream protocol is gadget driven, the host may not proceed further until it
> >> receives a valid Start Stream (ERDY) transaction from gadget.
> >
> >That's not entirely true.  Can't the host cancel the transfer and then
> >restart it?
> >
> 
> Yes the host can cancel the transfer. This issue originated from the endpoints using bulk
> streaming protocol and may not occur with normal endpoints. AFAIK bulk streaming is
> gadget driven, where the gadget is allowed to select which stream id transfer the host
> should work on . Since the host doesn't have control on when the transfer would be
> selected by gadget, it may wait for longer timeouts before cancelling the transfer. 

You're missing the point.  Although the device selects which stream ID
gets transferred, the _host_ decides whether a stream transfer should
occur in the first place.  No matter how many ERDY packets the device
controller tries to send, no transfer will occur until the host wants
to do it.

In this sense, stream transfers (like all other USB interactions except
wakeup requests) are host-driven.

> >> Since the gadget
> >> controller driver is aware that the controller is stuck , makes it responsible
> >> to recover the controller from hang condition by restarting the transfer (which
> >> triggers the controller FSM to issue ERDY to host).
> >
> >Isn't there a cleaner way to recover than by cancelling the request and
> >resubmitting it?
> >
> 
> dequeuing the request issues the stop transfer command to the controller, which
> cleans all the hardware resource allocated for that endpoint. This also resets the
> hardware FSMs for that endpoint . So, when re-queuing of the transfer happens
> the controller starts allocating hardware resources again, thus avoiding the probability
> of entering into the issue. I am not sure of other controllers, but for dwc3, issuing
> the stop transfer is the only way to handle this issue. 

Again you're missing the point.  Can't the controller driver issue the
Stop Transfer command but still consider the request to be in progress
(i.e., don't dequeue the request) so that the gadget driver's
completion callback isn't invoked and the request does not need to be
explicitly resubmitted?

> @Felipe:  Can you please provide your suggestion on this.  

> >How can the gadget driver know what timeout to use?  The host is
> >allowed to be as slow as it wants; the gadget driver doesn't have any
> >way to tell when the host wants to start the transfer.
> 
> Yes , I agree with you that the timeout may vary from usage to usage. This timeout
> should be decided by the class driver which queues the request. As discussed above
> this issue was observed in streaming protocol , which  is very much faster than normal
> BOT modes and it works on super speed .

Although USB mass storage is currently the only user of the stream 
protocol, that may not be true in the future.  You should think in more 
general terms.  A timeout which is appropriate for mass storage may not 
be appropriate for some other application.

Alan Stern

>  More over the gadget controller decides
> the selection of the stream id on which the host should work , so taking all these into
> consideration I kept 50ms timeout for stream transfers, so that the performance may
> not get decreased.
> 
> Thanks,
> Anurag Kumar Vulisha


  reply	other threads:[~2018-12-03 23:08 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-01 11:13 [PATCH v7 00/10] usb: dwc3: Fix broken BULK stream support to dwc3 gadget driver Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 01/10] usb: gadget: udc: Add timer support for usb requests Anurag Kumar Vulisha
2018-12-02 16:36   ` Alan Stern
2018-12-03 10:23     ` Anurag Kumar Vulisha
2018-12-03 14:51       ` Alan Stern
2018-12-03 16:05         ` Anurag Kumar Vulisha
2018-12-03 23:08           ` Alan Stern [this message]
2018-12-04 16:18             ` Anurag Kumar Vulisha
2018-12-04 16:46               ` Alan Stern
2018-12-04 19:07                 ` Anurag Kumar Vulisha
2018-12-04 19:28                   ` Alan Stern
2018-12-05 15:43                     ` Anurag Kumar Vulisha
2018-12-07  6:05                       ` Felipe Balbi
2018-12-07 17:09                         ` Alan Stern
2018-12-12 15:11                           ` Anurag Kumar Vulisha
2019-01-04 14:17                           ` Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 02/10] usb: gadget: function: tcm: Add timeout for stream capable endpoints Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 03/10] usb: dwc3: gadget: handle stream events Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 04/10] usb: dwc3: update stream id in depcmd Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 05/10] usb: dwc3: make controller clear transfer resources after complete Anurag Kumar Vulisha
2018-12-05  9:01   ` Felipe Balbi
2018-12-05 19:05     ` Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 06/10] usb: dwc3: don't issue no-op trb for stream capable endpoints Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 07/10] usb: dwc3: check for requests in started list " Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 08/10] usb: dwc3: Correct the logic for checking TRB full in __dwc3_prepare_one_trb() Anurag Kumar Vulisha
2018-12-01 11:13 ` [PATCH v7 09/10] usb: dwc3: Check for IOC/LST bit in both event->status and TRB->ctrl fields Anurag Kumar Vulisha
2018-12-05  9:07   ` Felipe Balbi
2018-12-05 19:01     ` Anurag Kumar Vulisha
2018-12-07  6:11       ` Felipe Balbi
2018-12-08 19:03         ` Anurag Kumar Vulisha
2018-12-10  6:54           ` Felipe Balbi
2018-12-10  8:56             ` Anurag Kumar Vulisha
2018-12-10  9:03               ` Felipe Balbi
2018-12-01 11:13 ` [PATCH v7 10/10] usb: dwc3: Check MISSED ISOC bit only for ISOC endpoints Anurag Kumar Vulisha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Pine.LNX.4.44L0.1812031758080.31542-100000@netrider.rowland.org \
    --to=stern@rowland.harvard.edu \
    --cc=APANDEY@xilinx.com \
    --cc=anuragku@xilinx.com \
    --cc=balbi@kernel.org \
    --cc=benh@kernel.crashing.org \
    --cc=bvanassche@acm.org \
    --cc=climbbb.kim@gmail.com \
    --cc=colin.king@canonical.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=johan@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=mchristi@redhat.com \
    --cc=mgautam@codeaurora.org \
    --cc=rogerq@ti.com \
    --cc=shuah@kernel.org \
    --cc=tejas.joglekar@synopsys.com \
    --cc=thinhn@synopsys.com \
    --cc=v.anuragkumar@gmail.com \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).