From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 81EDEC7618B for ; Wed, 24 Jul 2019 15:43:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 4F05D21951 for ; Wed, 24 Jul 2019 15:43:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1563983032; bh=9tWRby3jQb6aRSsOq+zrT0tQIkPbdPmRucNEZy2i/uk=; h=Subject:To:Cc:From:Date:List-ID:From; b=NQ0pHX5MwYzykLouJL7yIgSOuhH6dcCE3Yn76ZboE+l3sKvkMvlZAZmP+FaWd9xUG V2Jq02M+G5Nta2vA7ukG0ybigSlNtFK7kCYvTuwsjA/newsAsbJNCt819slDQ95oB4 HJd7AmGd6ttVmUyT/Y55Pl7Eg9R+Wic0LP+k2iug= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728120AbfGXPnw (ORCPT ); Wed, 24 Jul 2019 11:43:52 -0400 Received: from out1-smtp.messagingengine.com ([66.111.4.25]:39683 "EHLO out1-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728051AbfGXPnv (ORCPT ); Wed, 24 Jul 2019 11:43:51 -0400 Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 65D8B21AFB; Wed, 24 Jul 2019 11:43:50 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Wed, 24 Jul 2019 11:43:50 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :date:from:message-id:mime-version:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=0UTo8Z pK6pozVRVY7pM8PZOC3dplPvxyL/vhF9h07r8=; b=P/n3Vtmc5mdLvJHnkQ53Y9 sViYcvjEOiPd4yI1WUGusd4DO3wbOPu/MfppeaJfZVsQFv75Gzy4Glm3pE2yfnR6 MLwJxtRS3s35OUCm2u01I1nxF/jZv6dX/Lx9CFPyLXQFPxqcrwXr379G7o1+3dWH /RnNqc6T9uvAOFdjgEm/xbeCl6ILodAfUeq3O8aLYoWzKywWjpsCKKBQeuvinkoS RD18DdFODFVmSfGmtAauut/+k+dfdHCdePiqyjflHat83986EQjYx2sK/xe1hwUq TFwQZfggFXLdgGrMx0Kxt/7uVm/BNXOvQ7+uTxJoyAIk4bJ54rHaUcaxtVvlNjwA == X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduvddrkedtgdekiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurhepuffvhfffkfggtgfgsehtkeertddttd flnecuhfhrohhmpeeoghhrvghgkhhhsehlihhnuhigfhhouhhnuggrthhiohhnrdhorhhg qeenucfkphepkeefrdekiedrkeelrddutdejnecurfgrrhgrmhepmhgrihhlfhhrohhmpe hgrhgvgheskhhrohgrhhdrtghomhenucevlhhushhtvghrufhiiigvpedt X-ME-Proxy: Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) by mail.messagingengine.com (Postfix) with ESMTPA id E0F49380087; Wed, 24 Jul 2019 11:43:48 -0400 (EDT) Subject: FAILED: patch "[PATCH] xhci: Fix immediate data transfer if buffer is already DMA" failed to apply to 5.2-stable tree To: mathias.nyman@linux.intel.com, gregkh@linuxfoundation.org, m.szyprowski@samsung.com, nsaenzjulienne@suse.de Cc: From: Date: Wed, 24 Jul 2019 17:43:47 +0200 Message-ID: <1563983027111159@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: 8bit Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org The patch below does not apply to the 5.2-stable tree. If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to . thanks, greg k-h ------------------ original commit in Linus's tree ------------------ >From 13b82b746310b51b064bc855993a1c84bf862726 Mon Sep 17 00:00:00 2001 From: Mathias Nyman Date: Wed, 22 May 2019 14:34:00 +0300 Subject: [PATCH] xhci: Fix immediate data transfer if buffer is already DMA mapped xhci immediate data transfer (IDT) support in 5.2-rc1 caused regression on various Samsung Exynos boards with ASIX USB 2.0 ethernet dongle. If the transfer buffer in the URB is already DMA mapped then IDT should not be used. urb->transfer_dma will already contain a valid dma address, and there is no guarantee the data in urb->transfer_buffer is valid. The IDT support patch used urb->transfer_dma as a temporary storage, copying data from urb->transfer_buffer into it. Issue was solved by preventing IDT if transfer buffer is already dma mapped, and by not using urb->transfer_dma as temporary storage. Fixes: 33e39350ebd2 ("usb: xhci: add Immediate Data Transfer support") Reported-by: Marek Szyprowski Tested-by: Marek Szyprowski CC: Nicolas Saenz Julienne Signed-off-by: Mathias Nyman Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index ef7c8698772e..88392aa65722 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -3432,11 +3432,14 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, if (urb->transfer_buffer_length > 0) { u32 length_field, remainder; + u64 addr; if (xhci_urb_suitable_for_idt(urb)) { - memcpy(&urb->transfer_dma, urb->transfer_buffer, + memcpy(&addr, urb->transfer_buffer, urb->transfer_buffer_length); field |= TRB_IDT; + } else { + addr = (u64) urb->transfer_dma; } remainder = xhci_td_remainder(xhci, 0, @@ -3449,8 +3452,8 @@ int xhci_queue_ctrl_tx(struct xhci_hcd *xhci, gfp_t mem_flags, if (setup->bRequestType & USB_DIR_IN) field |= TRB_DIR_IN; queue_trb(xhci, ep_ring, true, - lower_32_bits(urb->transfer_dma), - upper_32_bits(urb->transfer_dma), + lower_32_bits(addr), + upper_32_bits(addr), length_field, field | ep_ring->cycle_state); } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index a450a99e90eb..7f8b950d1a73 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -2160,7 +2160,8 @@ static inline bool xhci_urb_suitable_for_idt(struct urb *urb) { if (!usb_endpoint_xfer_isoc(&urb->ep->desc) && usb_urb_dir_out(urb) && usb_endpoint_maxp(&urb->ep->desc) >= TRB_IDT_MAX_SIZE && - urb->transfer_buffer_length <= TRB_IDT_MAX_SIZE) + urb->transfer_buffer_length <= TRB_IDT_MAX_SIZE && + !(urb->transfer_flags & URB_NO_TRANSFER_DMA_MAP)) return true; return false;