From: Peter Senna Tschudin <peter.senna@gmail.com>
To: balbi@ti.com, stern@rowland.harvard.edu,
sergei.shtylyov@cogentembedded.com, standby24x7@gmail.com,
pmladek@suse.cz, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org
Cc: Peter Senna Tschudin <peter.senna@gmail.com>
Subject: [PATCH 10/14] RFC: usb/host/fotg210: Add function scan_frame_queue()
Date: Mon, 21 Sep 2015 17:01:14 +0200 [thread overview]
Message-ID: <1442847678-7970-11-git-send-email-peter.senna@gmail.com> (raw)
In-Reply-To: <1442847678-7970-1-git-send-email-peter.senna@gmail.com>
checkpatch complains about too many leading tabs because the if
statement starts after 6 tabs:
scan_iosoc() -> for() -> while() -> switch() -> if() -> for() -> if()
There is also a goto statement going backwards in case of failure. This
patch creates a new inline function named scan_frame_queue() containing
the last 4 nesting levels, and removes the need of backwards goto,
making the code easier to read. After the patch it becomes:
scan_iosoc() -> for() -> while() -> scan_frame_queue()
Signed-off-by: Peter Senna Tschudin <peter.senna@gmail.com>
---
drivers/usb/host/fotg210-hcd.c | 142 ++++++++++++++++++++++-------------------
1 file changed, 76 insertions(+), 66 deletions(-)
diff --git a/drivers/usb/host/fotg210-hcd.c b/drivers/usb/host/fotg210-hcd.c
index 13cca41..e60a239 100644
--- a/drivers/usb/host/fotg210-hcd.c
+++ b/drivers/usb/host/fotg210-hcd.c
@@ -4645,13 +4645,81 @@ done:
return status;
}
-/*-------------------------------------------------------------------------*/
+static inline int scan_frame_queue(struct fotg210_hcd *fotg210, unsigned frame,
+ unsigned now_frame, bool live)
+{
+ unsigned uf;
+ bool modified;
+ union fotg210_shadow q, *q_p;
+ __hc32 type, *hw_p;
+
+ /* scan each element in frame's queue for completions */
+ q_p = &fotg210->pshadow[frame];
+ hw_p = &fotg210->periodic[frame];
+ q.ptr = q_p->ptr;
+ type = Q_NEXT_TYPE(fotg210, *hw_p);
+ modified = false;
+
+ while (q.ptr != NULL) {
+ switch (hc32_to_cpu(fotg210, type)) {
+ case Q_TYPE_ITD:
+ /* If this ITD is still active, leave it for
+ * later processing ... check the next entry.
+ * No need to check for activity unless the
+ * frame is current.
+ */
+ if (frame == now_frame && live) {
+ rmb();
+ for (uf = 0; uf < 8; uf++) {
+ if (q.itd->hw_transaction[uf] &
+ ITD_ACTIVE(fotg210))
+ break;
+ }
+ if (uf < 8) {
+ q_p = &q.itd->itd_next;
+ hw_p = &q.itd->hw_next;
+ type = Q_NEXT_TYPE(fotg210,
+ q.itd->hw_next);
+ q = *q_p;
+ break;
+ }
+ }
+
+ /* Take finished ITDs out of the schedule
+ * and process them: recycle, maybe report
+ * URB completion. HC won't cache the
+ * pointer for much longer, if at all.
+ */
+ *q_p = q.itd->itd_next;
+ *hw_p = q.itd->hw_next;
+ type = Q_NEXT_TYPE(fotg210, q.itd->hw_next);
+ wmb();
+ modified = itd_complete(fotg210, q.itd);
+ q = *q_p;
+ break;
+ default:
+ fotg210_dbg(fotg210, "corrupt type %d frame %d shadow %p\n",
+ type, frame, q.ptr);
+ /* FALL THROUGH */
+ case Q_TYPE_QH:
+ case Q_TYPE_FSTN:
+ /* End of the iTDs and siTDs */
+ q.ptr = NULL;
+ break;
+ }
+
+ /* assume completion callbacks modify the queue */
+ if (unlikely(modified && fotg210->isoc_count > 0))
+ return -1;
+ }
+ return 0;
+}
static void scan_isoc(struct fotg210_hcd *fotg210)
{
- unsigned uf, now_frame, frame;
- unsigned fmask = fotg210->periodic_size - 1;
- bool modified, live;
+ unsigned uf, now_frame, frame, ret;
+ unsigned fmask = fotg210->periodic_size - 1;
+ bool live;
/*
* When running, scan from last scan point up to "now"
@@ -4670,69 +4738,11 @@ static void scan_isoc(struct fotg210_hcd *fotg210)
frame = fotg210->next_frame;
for (;;) {
- union fotg210_shadow q, *q_p;
- __hc32 type, *hw_p;
-restart:
- /* scan each element in frame's queue for completions */
- q_p = &fotg210->pshadow[frame];
- hw_p = &fotg210->periodic[frame];
- q.ptr = q_p->ptr;
- type = Q_NEXT_TYPE(fotg210, *hw_p);
- modified = false;
-
- while (q.ptr != NULL) {
- switch (hc32_to_cpu(fotg210, type)) {
- case Q_TYPE_ITD:
- /* If this ITD is still active, leave it for
- * later processing ... check the next entry.
- * No need to check for activity unless the
- * frame is current.
- */
- if (frame == now_frame && live) {
- rmb();
- for (uf = 0; uf < 8; uf++) {
- if (q.itd->hw_transaction[uf] &
- ITD_ACTIVE(fotg210))
- break;
- }
- if (uf < 8) {
- q_p = &q.itd->itd_next;
- hw_p = &q.itd->hw_next;
- type = Q_NEXT_TYPE(fotg210,
- q.itd->hw_next);
- q = *q_p;
- break;
- }
- }
-
- /* Take finished ITDs out of the schedule
- * and process them: recycle, maybe report
- * URB completion. HC won't cache the
- * pointer for much longer, if at all.
- */
- *q_p = q.itd->itd_next;
- *hw_p = q.itd->hw_next;
- type = Q_NEXT_TYPE(fotg210, q.itd->hw_next);
- wmb();
- modified = itd_complete(fotg210, q.itd);
- q = *q_p;
- break;
- default:
- fotg210_dbg(fotg210, "corrupt type %d frame %d shadow %p\n",
- type, frame, q.ptr);
- /* FALL THROUGH */
- case Q_TYPE_QH:
- case Q_TYPE_FSTN:
- /* End of the iTDs and siTDs */
- q.ptr = NULL;
- break;
- }
-
- /* assume completion callbacks modify the queue */
- if (unlikely(modified && fotg210->isoc_count > 0))
- goto restart;
- }
+ ret = 1;
+ while (ret != 0)
+ ret = scan_frame_queue(fotg210, frame, now_frame,
+ live);
/* Stop when we have reached the current frame */
if (frame == now_frame)
--
2.1.0
next prev parent reply other threads:[~2015-09-21 15:04 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-07 14:47 similar files: fusbh200-hcd.c and fotg210-hcd.c Peter Senna Tschudin
2015-09-08 15:52 ` Felipe Balbi
2015-09-12 13:14 ` Peter Senna Tschudin
2015-09-14 15:01 ` Felipe Balbi
2015-09-14 17:50 ` Peter Senna Tschudin
2015-09-15 14:33 ` Felipe Balbi
2015-09-15 16:41 ` Peter Senna Tschudin
2015-09-15 16:50 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 00/14] RFC: Consolidation: FUSB200 and FOTG210 Peter Senna Tschudin
2015-09-21 15:01 ` [PATCH 01/14] RFC: usb/host/fotg210: Fix coding style issues Peter Senna Tschudin
2015-10-02 17:29 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 02/14] RFC: usb/host/fotg210: remove KERN_WARNING from pr_info Peter Senna Tschudin
2015-09-21 18:54 ` Sergei Shtylyov
2015-10-02 17:30 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 03/14] RFC: usb/host/fotg210: Remove useless else statement Peter Senna Tschudin
2015-10-02 17:30 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 04/14] RFC: usb/host/fotg210: Remove NULL checks dma_pool_destroy Peter Senna Tschudin
2015-10-02 17:30 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 05/14] RFC: usb/host/fotg210: change kmalloc by kmalloc_array Peter Senna Tschudin
2015-09-21 18:56 ` Sergei Shtylyov
2015-10-02 17:30 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 06/14] RFC: usb/host/fotg210: replace msleep by usleep_range Peter Senna Tschudin
2015-10-02 17:31 ` Felipe Balbi
2015-10-02 17:52 ` Alan Stern
2015-10-04 9:58 ` Peter Senna Tschudin
2015-10-04 15:20 ` Alan Stern
2015-09-21 15:01 ` [PATCH 07/14] RFC: usb/host/fotg210: Remove a macro from snprintf Peter Senna Tschudin
2015-10-02 17:31 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 08/14] RFC: usb/host/fotg210: convert macro to inline function Peter Senna Tschudin
2015-10-02 17:32 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 09/14] RFC: usb/host/fotg210: Add function: output_buf_tds_dir() Peter Senna Tschudin
2015-09-21 19:15 ` Sergei Shtylyov
2015-10-02 17:32 ` Felipe Balbi
2015-09-21 15:01 ` Peter Senna Tschudin [this message]
2015-10-02 17:35 ` [PATCH 10/14] RFC: usb/host/fotg210: Add function scan_frame_queue() Felipe Balbi
2015-09-21 15:01 ` [PATCH 11/14] RFC: usb/host: Rename fotg210-hcd to faraday-hcd Peter Senna Tschudin
2015-10-02 17:35 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 12/14] RFC: usb/host/faraday-hcd: Replace fotg210 by fhcd2xx Peter Senna Tschudin
2015-10-02 17:36 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 13/14] RFC: usb/host/faraday-hcd: Move #defines outside struct Peter Senna Tschudin
2015-10-02 17:37 ` Felipe Balbi
2015-09-21 15:01 ` [PATCH 14/14] RFC: usb/host/faraday-hcd: Import FUSBH200 parameters Peter Senna Tschudin
2015-10-02 17:38 ` Felipe Balbi
2015-10-02 11:18 ` [PATCH] usb-host: Remove fusbh200 driver Peter Senna Tschudin
2015-10-02 17:39 ` Felipe Balbi
2015-10-03 9:56 ` Peter Senna Tschudin
2015-10-03 21:21 ` Felipe Balbi
2015-10-05 0:25 ` John Feng-Hsin Chiang(江峰興)
2015-10-12 21:22 ` [PATCH 0/9] usb/host/fotg210: code style and warning fixes Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 1/9] usb/host/fotg210: Fix coding style issues Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 2/9] usb/host/fotg210: remove KERN_WARNING from pr_warn Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 3/9] usb/host/fotg210: Remove useless else statement Peter Senna Tschudin
2015-10-12 22:06 ` Joe Perches
2015-10-17 19:28 ` [PATCH 3/9 V2] usb/host/fotg210: Remove return statement inside if Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 4/9] usb/host/fotg210: Remove NULL checks dma_pool_destroy Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 5/9] usb/host/fotg210: change kmalloc by kmalloc_array Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 6/9] usb/host/fotg210: replace msleep by usleep_range Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 7/9] usb/host/fotg210: convert macro to inline function Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 8/9] usb/host/fotg210: Add function: output_buf_tds_dir() Peter Senna Tschudin
2015-10-12 21:22 ` [PATCH 9/9] usb/host/fotg210: Add function scan_frame_queue() Peter Senna Tschudin
2015-09-25 13:04 ` similar files: fusbh200-hcd.c and fotg210-hcd.c Peter Senna Tschudin
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=1442847678-7970-11-git-send-email-peter.senna@gmail.com \
--to=peter.senna@gmail.com \
--cc=balbi@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=pmladek@suse.cz \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=standby24x7@gmail.com \
--cc=stern@rowland.harvard.edu \
/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
Powered by JetHome