Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp4553132pxj; Wed, 12 May 2021 08:04:56 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyVnn+9Lw7lNWi83goFOQeqnwzoThYHsj9KWPOj/j2usb8MfpHsK8o/JsxZbeJkmUKXY+0n X-Received: by 2002:a05:6830:4da:: with SMTP id s26mr30909315otd.77.1620831896490; Wed, 12 May 2021 08:04:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620831896; cv=none; d=google.com; s=arc-20160816; b=jPNOlfslPxHHggUmwGxtcgbUHxheq8WdrnIWzk3QV2lw0qAfEjNid+pzb2CmBXDgls lDZ1b3Oz/LkvgZ7SLCN9kI08GkBw3B5kro8UOWHKSVOF2GU3FH6Zmsxe70jRc0OZsi1M 0abQ2cLs7/HHlhhwubmjK7l4k0avmRgULI+o6YSfunapIzZLLCkX8Bu9+06GAKVJbbuc WlEhM4Qfx+Dj/s12D5m8yAlJgJpKBQ5tviUVKEeK269O8IE1MY+vknCqsZaSsKrOAM/m TSQNfeZo+WE6cB8hq259dCcuH9XBXA91XECryiVHNejAwKdORrVHvC83J1MvF1v0l879 mwSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ksk2Nb2L7YidlrpKlVoyKlR6WXsgSzGj8mMzEfkK7ww=; b=yY3YOKnXBt9E5k0R6PNhGYPvZxONtE4eC0F5HPLIhRpGNVf4D5CrKPmWx8VAdjolNj Z5yGdexpkN/SNJvV9sE5hR/P7Iqew+EdnFM3Q2gXrcooL1icWCWruQf7NkuAW8YjMqq5 g1k13ZeH/fnrkZS8eV9IYHo8hoDfuUrz/4EvLVo1Tc1MHUCG1P4wzXExo3jWewh9CdN5 rozVXZY4MLr+sYtlpNifJYkVvAkXBGTgE/B+gMe6xj1L29cvLhgqcKiNnhHYjLdYhcpg 5Z+nBgT6wty+rZOMmCAZCsry/0nj9sq9ZuE7OLwFhX8698zAOeIG00a6e0FRUCODroow hpTQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=urkZR981; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v16si140575ota.243.2021.05.12.08.04.41; Wed, 12 May 2021 08:04:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=urkZR981; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231874AbhELPCy (ORCPT + 99 others); Wed, 12 May 2021 11:02:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:47322 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232388AbhELO6v (ORCPT ); Wed, 12 May 2021 10:58:51 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1549461459; Wed, 12 May 2021 14:56:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1620831388; bh=6FvWqTgZNAKtX4D/cYA1FwGewyV828mWfseORfBeQTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=urkZR981XPAtVb4WxxNnRPNxDX4kB1zwkRMCfBlykPq8CKHPHU3ZoXh2FM4AYBst/ syOAFTSCv1dq5e2nnxcvqhAAXPiMhJaSzZomRLok5wOmMiFZ4DFyZJf/MZ1UkoAKZl jnKNDLua1QznxhpW+OLTGQKXkHfkuCSD1MkUe4gc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Joel Stanley , Tao Ren , Sasha Levin Subject: [PATCH 5.4 100/244] usb: gadget: aspeed: fix dma map failure Date: Wed, 12 May 2021 16:47:51 +0200 Message-Id: <20210512144746.234661107@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210512144743.039977287@linuxfoundation.org> References: <20210512144743.039977287@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tao Ren [ Upstream commit bd4d607044b961cecbf8c4c2f3bb5da4fb156993 ] Currently the virtual port_dev device is passed to DMA API, and this is wrong because the device passed to DMA API calls must be the actual hardware device performing the DMA. The patch replaces usb_gadget_map_request/usb_gadget_unmap_request APIs with usb_gadget_map_request_by_dev/usb_gadget_unmap_request_by_dev APIs so the DMA capable platform device can be passed to the DMA APIs. The patch fixes below backtrace detected on Facebook AST2500 OpenBMC platforms: [<80106550>] show_stack+0x20/0x24 [<80106868>] dump_stack+0x28/0x30 [<80823540>] __warn+0xfc/0x110 [<8011ac30>] warn_slowpath_fmt+0xb0/0xc0 [<8011ad44>] dma_map_page_attrs+0x24c/0x314 [<8016a27c>] usb_gadget_map_request_by_dev+0x100/0x1e4 [<805cedd8>] usb_gadget_map_request+0x1c/0x20 [<805cefbc>] ast_vhub_epn_queue+0xa0/0x1d8 [<7f02f710>] usb_ep_queue+0x48/0xc4 [<805cd3e8>] ecm_do_notify+0xf8/0x248 [<7f145920>] ecm_set_alt+0xc8/0x1d0 [<7f145c34>] composite_setup+0x680/0x1d30 [<7f00deb8>] ast_vhub_ep0_handle_setup+0xa4/0x1bc [<7f02ee94>] ast_vhub_dev_irq+0x58/0x84 [<7f0309e0>] ast_vhub_irq+0xb0/0x1c8 [<7f02e118>] __handle_irq_event_percpu+0x50/0x19c [<8015e5bc>] handle_irq_event_percpu+0x38/0x8c [<8015e758>] handle_irq_event+0x38/0x4c Fixes: 7ecca2a4080c ("usb/gadget: Add driver for Aspeed SoC virtual hub") Reviewed-by: Joel Stanley Signed-off-by: Tao Ren Link: https://lore.kernel.org/r/20210331045831.28700-1-rentao.bupt@gmail.com Signed-off-by: Greg Kroah-Hartman Signed-off-by: Sasha Levin --- drivers/usb/gadget/udc/aspeed-vhub/core.c | 3 ++- drivers/usb/gadget/udc/aspeed-vhub/epn.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/udc/aspeed-vhub/core.c b/drivers/usb/gadget/udc/aspeed-vhub/core.c index 90b134d5dca9..c1bfbfd9491d 100644 --- a/drivers/usb/gadget/udc/aspeed-vhub/core.c +++ b/drivers/usb/gadget/udc/aspeed-vhub/core.c @@ -36,6 +36,7 @@ void ast_vhub_done(struct ast_vhub_ep *ep, struct ast_vhub_req *req, int status) { bool internal = req->internal; + struct ast_vhub *vhub = ep->vhub; EPVDBG(ep, "completing request @%p, status %d\n", req, status); @@ -46,7 +47,7 @@ void ast_vhub_done(struct ast_vhub_ep *ep, struct ast_vhub_req *req, if (req->req.dma) { if (!WARN_ON(!ep->dev)) - usb_gadget_unmap_request(&ep->dev->gadget, + usb_gadget_unmap_request_by_dev(&vhub->pdev->dev, &req->req, ep->epn.is_in); req->req.dma = 0; } diff --git a/drivers/usb/gadget/udc/aspeed-vhub/epn.c b/drivers/usb/gadget/udc/aspeed-vhub/epn.c index 66d8884615f0..2cd406e8dd99 100644 --- a/drivers/usb/gadget/udc/aspeed-vhub/epn.c +++ b/drivers/usb/gadget/udc/aspeed-vhub/epn.c @@ -376,7 +376,7 @@ static int ast_vhub_epn_queue(struct usb_ep* u_ep, struct usb_request *u_req, if (ep->epn.desc_mode || ((((unsigned long)u_req->buf & 7) == 0) && (ep->epn.is_in || !(u_req->length & (u_ep->maxpacket - 1))))) { - rc = usb_gadget_map_request(&ep->dev->gadget, u_req, + rc = usb_gadget_map_request_by_dev(&vhub->pdev->dev, u_req, ep->epn.is_in); if (rc) { dev_warn(&vhub->pdev->dev, -- 2.30.2