From patchwork Fri Sep 9 10:01:51 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 101822 Delivered-To: patch@linaro.org Received: by 10.140.106.11 with SMTP id d11csp259454qgf; Fri, 9 Sep 2016 03:02:21 -0700 (PDT) X-Received: by 10.98.198.147 with SMTP id x19mr1430938pfk.77.1473415341374; Fri, 09 Sep 2016 03:02:21 -0700 (PDT) Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i132si3267507pfe.18.2016.09.09.03.02.21; Fri, 09 Sep 2016 03:02:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753513AbcIIKCR (ORCPT + 27 others); Fri, 9 Sep 2016 06:02:17 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:49264 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750839AbcIIKCP (ORCPT ); Fri, 9 Sep 2016 06:02:15 -0400 Received: from wuerfel.lan. ([78.43.20.153]) by mrelayeu.kundenserver.de (mreue103) with ESMTPA (Nemesis) id 0M4Bbn-1arA770L1n-00rqmY; Fri, 09 Sep 2016 12:02:02 +0200 From: Arnd Bergmann To: Felipe Balbi Cc: Arnd Bergmann , Greg Kroah-Hartman , John Youn , linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] usb: dwc3: avoid -Wmaybe-uninitialized warning Date: Fri, 9 Sep 2016 12:01:51 +0200 Message-Id: <20160909100159.1081681-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:FKpV9thxA+MZA5/WPNZs5M0tU7LnxwqlxaG6kkjb3+sFI/LE3OW qhbDnEHy8jt5+ATSSbPXb/sFpsC0/LJhfD/5LcIq4ZajhAal/geE4LkLNDMU/kaQqY5dC+O 2RwtZ7fgGPRjm9qG8GirxvlQhImjOF1sUIzHTn/WOc2SHmCx3evm1WNLIsYXSRN6nnALx5S 8lTspkYwQJ53cPOK9H0sA== X-UI-Out-Filterresults: notjunk:1; V01:K0:66y6q6Eaohc=:YnBmhca3w0GPdyTxfg6HR6 ndVvMkrJj/Qk+Ia9tWskS3ewXJSfGr24H4eP1Lt6aam8M0tbtbShM2rzYERMLEYEZg4QqQmFZ Ww2SH1Kdkn5uj8i8HCdarefl6y6OMMxLj50oi5HSLoGEbktzXwuYnKLANysJ98OxP2+v6Yga5 3Qp5F39v2e2GEmSYmugjR6FGhuB+4TiWiRJw0dsttXIq3rhZftlRUgC4zsMmcz3qqnEIuCLO7 /kWzITzd+Glp956+iDI2iaruHYrOGSDX8dJouAOaRZMLVvXBCWnaWvusO0czaV5CJ0aOQFzk9 tudbcd5SzmzOtdmLEIO47apHtkL7G/WQ65MEqmihjG0eNQmshGYEuPbVDWzADhqz2CTRX0CW8 muqWw1kdUoU2JC24MvLD+DC1KK0eZks5vZjOKapY17I76z1oY+1wvkDb6YCb/MDrntkVBHrKq az1mtLC3tkL6hMFsYw03agT20JuUMQdSncSLqPUcbp+o5yFW+FvIF1QYirdRDsWrPmZvKQpO2 iH+cVfbmn0UMHPG895eKdXWrW68LbldIIojMZIns6JyUm5OG+VXsVm4xcu372pBceBPrR1y69 16Ix4wuIsYYsicgkuE62QzFwGNLLqQmL4Lv9V1nXRrjkByq3WPRsIqP7tLh7jZCni7z94lpOm jhJNsMjoxCXtSSU9XmgKHsSz6QVbm/7CV34ZciRlAjhipALatnqSPY3mL9cYrY8NTKzQ= Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Cleaning up the loop in dwc3_cleanup_done_reqs() introduced a gcc warning if built with "-Wmaybe-uninitialized": drivers/usb/dwc3/gadget.c: In function 'dwc3_endpoint_transfer_complete': drivers/usb/dwc3/gadget.c:2015:9: 'trb' may be used uninitialized in this function [-Wmaybe-uninitialized] I believe it is a false positive and we always have a valid 'trb' pointer at the end of the function, but neither I nor the compiler are able to prove that. This works around the warning by computing a flag earlier in the function when it's guaranteed to be valid, which tells the compiler that it's safe and makes it easier to understand to me. Signed-off-by: Arnd Bergmann Fixes: 31162af447d7 ("usb: dwc3: gadget: avoid while (1) loop on completion") --- drivers/usb/dwc3/gadget.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) -- 2.9.0 diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index 7f4b48cf31aa..8456962e0a92 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c @@ -1934,6 +1934,7 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, { struct dwc3_request *req, *n; struct dwc3_trb *trb; + bool ioc = false; int ret; list_for_each_entry_safe(req, n, &dep->started_list, list) { @@ -1981,8 +1982,12 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, dwc3_gadget_giveback(dep, req, status); - if (ret) + if (ret) { + if ((event->status & DEPEVT_STATUS_IOC) && + (trb->ctrl & DWC3_TRB_CTRL_IOC)) + ioc = true; break; + } } /* @@ -2010,10 +2015,9 @@ static int dwc3_cleanup_done_reqs(struct dwc3 *dwc, struct dwc3_ep *dep, return 1; } - if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) - if ((event->status & DEPEVT_STATUS_IOC) && - (trb->ctrl & DWC3_TRB_CTRL_IOC)) - return 0; + if (usb_endpoint_xfer_isoc(dep->endpoint.desc) && ioc) + return 0; + return 1; }