From patchwork Thu Jan 21 05:04:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Doug Anderson X-Patchwork-Id: 8077531 Return-Path: X-Original-To: patchwork-linux-rockchip@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 297BA9FC34 for ; Thu, 21 Jan 2016 05:05:43 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 0A41B205DB for ; Thu, 21 Jan 2016 05:05:42 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 34997205DD for ; Thu, 21 Jan 2016 05:05:41 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1aM7RE-0000kB-Jc; Thu, 21 Jan 2016 05:05:40 +0000 Received: from mail-pf0-x233.google.com ([2607:f8b0:400e:c00::233]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1aM7R3-0000Z0-Mu for linux-rockchip@lists.infradead.org; Thu, 21 Jan 2016 05:05:31 +0000 Received: by mail-pf0-x233.google.com with SMTP id n128so16840501pfn.3 for ; Wed, 20 Jan 2016 21:05:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hbhZz9vWY4qINABjkfGcfgmsE8JC7Wfc1bHtHjHJXYY=; b=ksFA/ykVXYRc2LLl2ec7jq+KK3kWaoZl16lelfCo1tA7Jk7Vh1K0K+hwP/UaaTVORi Nn45sTZuwRD/ouY9c4h/KnJ0lZfC6rpEEfzSJgZoN7YaYUn7Hl3j+Br5jDRxeIo1ajzt npqswnoMV9qI4B4g+mcfNb3zUXVtCx0Cw7ljk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hbhZz9vWY4qINABjkfGcfgmsE8JC7Wfc1bHtHjHJXYY=; b=gdxphP1R0CN4VRkDaht6ZcyW/JM4A0Bbqmq6c1crYH5ZTxRgo1cNdPlJ6ZXWoqqczD IZ2zz9dY3RJIihxOOf4xJu0UGW6KBdG6dJcPehcrsw9kQlLo3Vt6LMvc5GFqkl7CFVYm zH66jTzH5i1vgbg9yxo0hV7/4sTAZW7AulrGnmoZN9yVcIT90s1tAE98tGJacvEc1Do/ /V8BQNVr1MEtL0VJa0/EUso60vQ6yVO1hkezvgBEyCJtNVFz2zFT478blCcjx5J1A57M 9qKNmbCSm08A+UinRsuiPDYUu88kKccWsp4KG8yKI0/+B/vdZf1ZIcv/A1mhWGQDc8Ob PWJg== X-Gm-Message-State: ALoCoQkVQeQrXM/fultffIWuKd1kX7wTlOAxXEV1KylRaMC8VBtQiKCSlvodlNr03WoGbEuWiD7G68kFXvp5yfOBLbJY4ek3mw== X-Received: by 10.98.12.131 with SMTP id 3mr59037604pfm.155.1453352712595; Wed, 20 Jan 2016 21:05:12 -0800 (PST) Received: from tictac.mtv.corp.google.com ([172.22.65.76]) by smtp.gmail.com with ESMTPSA id z28sm52255589pfi.19.2016.01.20.21.05.11 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 20 Jan 2016 21:05:12 -0800 (PST) From: Douglas Anderson To: John Youn , balbi@ti.com, kever.yang@rock-chips.com Subject: [PATCH v4 10/21] usb: dwc2: host: Giveback URB in tasklet context Date: Wed, 20 Jan 2016 21:04:21 -0800 Message-Id: <1453352672-27890-11-git-send-email-dianders@chromium.org> X-Mailer: git-send-email 2.7.0.rc3.207.g0ac5344 In-Reply-To: <1453352672-27890-1-git-send-email-dianders@chromium.org> References: <1453352672-27890-1-git-send-email-dianders@chromium.org> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20160120_210529_949459_58497901 X-CRM114-Status: GOOD ( 11.70 ) X-Spam-Score: -2.7 (--) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: gregory.herrero@intel.com, =?UTF-8?q?Heiko=20St=C3=BCbner?= , johnyoun@synopsys.com, gregkh@linuxfoundation.org, ming.lei@canonical.com, linux-usb@vger.kernel.org, Douglas Anderson , linux-kernel@vger.kernel.org, linux-rockchip@lists.infradead.org, yousaf.kaukab@intel.com, stern@rowland.harvard.edu, Julius Werner , dinguyen@opensource.altera.com MIME-Version: 1.0 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+patchwork-linux-rockchip=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In commit 94dfd7edfd5c ("USB: HCD: support giveback of URB in tasklet context") support was added to give back the URB in tasklet context. Let's take advantage of this in dwc2. This speeds up the dwc2 interrupt handler considerably. Note that this requires the change ("usb: dwc2: host: Add a delay before releasing periodic bandwidth") to come first. Note that, as per Alan Stern in , we also need to make sure that the extra delay before the device drivers submit more data doesn't break the scheduler. At the moment the scheduler is pretty broken (see future patches) so it's hard to be 100% certain, but I have yet to see any new breakage introduced by this delay. ...and speeding up interrupt processing for dwc2 is a huge deal because it means we've got a better chance of not missing SOF interrupts. That means we've got an overall win here. Note that when playing USB audio and using a USB webcam and having several USB keyboards plugged in, the crackling on the USB audio device is noticably reduced with this patch. Signed-off-by: Douglas Anderson Tested-by: Heiko Stuebner --- Changes in v4: - A bit earlier in the list of patches than in v3. Changes in v3: None Changes in v2: - Commit message now says that URB giveback change needs delay change. drivers/usb/dwc2/hcd.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index d2356d52ac7b..fa684c68b8f6 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -2336,9 +2336,7 @@ void dwc2_host_complete(struct dwc2_hsotg *hsotg, struct dwc2_qtd *qtd, kfree(qtd->urb); qtd->urb = NULL; - spin_unlock(&hsotg->lock); usb_hcd_giveback_urb(dwc2_hsotg_to_hcd(hsotg), urb, status); - spin_lock(&hsotg->lock); } /* @@ -2957,7 +2955,7 @@ static struct hc_driver dwc2_hc_driver = { .hcd_priv_size = sizeof(struct wrapper_priv_data), .irq = _dwc2_hcd_irq, - .flags = HCD_MEMORY | HCD_USB2, + .flags = HCD_MEMORY | HCD_USB2 | HCD_BH, .start = _dwc2_hcd_start, .stop = _dwc2_hcd_stop,