From: Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com>
To: Felipe Balbi <balbi@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Shuah Khan <shuah@kernel.org>,
Alan Stern <stern@rowland.harvard.edu>,
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>,
Bart Van Assche <bvanassche@acm.org>,
Mike Christie <mchristi@redhat.com>,
Matthew Wilcox <willy@infradead.org>,
Colin Ian King <colin.king@canonical.com>
Cc: <linux-usb@vger.kernel.org>, <linux-kernel@vger.kernel.org>,
<v.anuragkumar@gmail.com>, Thinh Nguyen <thinhn@synopsys.com>,
Tejas Joglekar <tejas.joglekar@synopsys.com>,
Ajay Yugalkishore Pandey <APANDEY@xilinx.com>,
Anurag Kumar Vulisha <anurag.kumar.vulisha@xilinx.com>
Subject: [PATCH v7 00/10] usb: dwc3: Fix broken BULK stream support to dwc3 gadget driver
Date: Sat, 1 Dec 2018 16:43:21 +0530 [thread overview]
Message-ID: <1543662811-5194-1-git-send-email-anurag.kumar.vulisha@xilinx.com> (raw)
This patch series fixes the broken BULK streaming support in
dwc3 gadget driver and also adds timers in udc/core.c for
the endpoints which may go out of sync with host and enter into
deadlock. For example when bulk streams are enabled for an
endpoint, there can be a condition where the gadget controller
waits for the host to issue prime transaction and the host
controller waits for the gadget to issue ERDY. This condition
could create a deadlock. To avoid such potential deadlocks, a
timer is started after queuing any request for the endpoint in
usb_ep_queue(). The gadget driver is expected to stop the timer
if a valid event is found (ex: stream event for stream capable
endpoints). If no valid event is found, the timer expires after
the programmed timeout value and a timeout callback function
registered would be called. This callback function dequeues the
request and re-queues it again, doing so makes the controller
restart the transfer, thus avoiding deadlocks.
This kind of behaviour is observed in dwc3 controller and expected
to be generic issue with other controllers supporting bulk streams.
Changes in v7:
1. Added timer timeout handler into udc/core.c
2. Started timer per request instead of per endpoint as suggested by
"Felipe Balbi"
3. Added usb_ep_dequeue() & usb_ep_queue() logic into timeout handler
as suggested by "Felipe Balbi"
Changes in v6:
1. Added timer into udc/core.c for stream capable endpoint
as suggested by "Felipe Balbi"
Changes in v5:
1. Removed the dev_dbg prints as suggested bt "Thinh Nguyen"
Changes in v4:
1. Corrected the commit message and stream timeout description
as suggested by "Thinh Nguyen"
Changes in v3:
1. Added the changes suggested by "Thinh Nguyen"
Changes in v2:
1. Added "usb: dwc3:" in subject heading
Anurag Kumar Vulisha (10):
usb: gadget: udc: Add timer support for usb requests
usb: gadget: function: tcm: Add timeout for stream capable endpoints
usb: dwc3: gadget: handle stream events
usb: dwc3: update stream id in depcmd
usb: dwc3: make controller clear transfer resources after complete
usb: dwc3: don't issue no-op trb for stream capable endpoints
usb: dwc3: check for requests in started list for stream capable
endpoints
usb: dwc3: Correct the logic for checking TRB full in
__dwc3_prepare_one_trb()
usb: dwc3: Check for IOC/LST bit in both event->status and TRB->ctrl
fields
usb: dwc3: Check MISSED ISOC bit only for ISOC endpoints
drivers/usb/dwc3/gadget.c | 67 +++++++++++++++++---
drivers/usb/gadget/function/f_tcm.c | 25 +++++---
drivers/usb/gadget/udc/core.c | 119 +++++++++++++++++++++++++++++++-----
include/linux/usb/gadget.h | 15 +++++
4 files changed, 197 insertions(+), 29 deletions(-)
--
2.1.1
next reply other threads:[~2018-12-01 11:14 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-01 11:13 Anurag Kumar Vulisha [this message]
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
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=1543662811-5194-1-git-send-email-anurag.kumar.vulisha@xilinx.com \
--to=anurag.kumar.vulisha@xilinx.com \
--cc=APANDEY@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=stern@rowland.harvard.edu \
--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).