From patchwork Tue Apr 7 09:46:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johan Hovold X-Patchwork-Id: 458609 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 1EFE81402B3 for ; Tue, 7 Apr 2015 19:47:25 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="verification failed; unprotected key" header.d=gmail.com header.i=@gmail.com header.b=rZyzr0rL; dkim-adsp=none (unprotected policy); dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752824AbbDGJrX (ORCPT ); Tue, 7 Apr 2015 05:47:23 -0400 Received: from mail-lb0-f170.google.com ([209.85.217.170]:35610 "EHLO mail-lb0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753475AbbDGJrS (ORCPT ); Tue, 7 Apr 2015 05:47:18 -0400 Received: by lbbuc2 with SMTP id uc2so34873917lbb.2; Tue, 07 Apr 2015 02:47:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=TpZ6rVOrAYTv/d2iTcEzu9fBvZOdbn9EKxN2+sQhGqQ=; b=rZyzr0rLOUv32Z9KgHRE2dEccOlOPkHkFwccBq1oBXaaRQYCyBJl0fJsya16xdSW3s VfIJBoSUG86DGE8HPC4EMK6MFu+OHBi/LTzIda7j5sOdXtHlQ8m3TULzN4lUjZ9L5EnT bVNPxglKa7ev5WhXUlVdee3OgAbQS2y/nsQuvGequmKKESfNL65mNvuIVmbwI0UD0qYu IeH79/3eMGDt9v51UcdF8QRJ5XpRl57bpSDgAtyk/w1nxwtoEsmI9h2wxvJPrK6+T844 kfOM+3ZSQJtBcm5r6UnImD+EAse2acOOkf3JIC1wXI5uP+wQbFqrvzmvKr05KxixxlQZ YGfw== X-Received: by 10.112.157.164 with SMTP id wn4mr9653991lbb.100.1428400036232; Tue, 07 Apr 2015 02:47:16 -0700 (PDT) Received: from xi.terra (c193-14-96-226.cust.tele2.se. [193.14.96.226]) by mx.google.com with ESMTPSA id g19sm1647588lbh.13.2015.04.07.02.47.14 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Apr 2015 02:47:14 -0700 (PDT) Received: from johan by xi.terra with local (Exim 4.84) (envelope-from ) id 1YfQ6E-0001yg-I7; Tue, 07 Apr 2015 11:47:14 +0200 From: Johan Hovold To: Greg Kroah-Hartman , Felipe Balbi , Alan Stern Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Stephen Warren , Thierry Reding , Alexandre Courbot , linux-tegra@vger.kernel.org, Johan Hovold , stable Subject: [PATCH 1/2] USB: musb: fix inefficient copy of unaligned buffers Date: Tue, 7 Apr 2015 11:46:51 +0200 Message-Id: <1428400012-7563-2-git-send-email-johan@kernel.org> X-Mailer: git-send-email 2.0.5 In-Reply-To: <1428400012-7563-1-git-send-email-johan@kernel.org> References: <1428400012-7563-1-git-send-email-johan@kernel.org> Sender: linux-tegra-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-tegra@vger.kernel.org Make sure only to copy any actual data rather than the whole buffer, when releasing the temporary buffer used for unaligned transfer buffers. Note that this also fixes a lockup on disconnect, where repeated failed transfers would starve the hub workqueue from processing the disconnect, which would have prevented the urbs from being resubmitted. In this case there is no data to forward, but the full buffer length was being copied nonetheless. The disconnect lockup can easily be reproduced using four unaligned 4k-bulk-in urbs on Beaglebone Black. Fixes: 8408fd1d83e3 ("usb: musb: implement (un)map_urb_for_dma hooks") Cc: stable # v3.10 Signed-off-by: Johan Hovold --- drivers/usb/musb/musb_host.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/musb/musb_host.c b/drivers/usb/musb/musb_host.c index c3d5fc9dfb5b..d8327ec19a1f 100644 --- a/drivers/usb/musb/musb_host.c +++ b/drivers/usb/musb/musb_host.c @@ -2523,7 +2523,7 @@ static void musb_free_temp_buffer(struct urb *urb) if (dir == DMA_FROM_DEVICE) { memcpy(temp->old_xfer_buffer, temp->data, - urb->transfer_buffer_length); + urb->actual_length); } urb->transfer_buffer = temp->old_xfer_buffer; kfree(temp->kmalloc_ptr);