From patchwork Tue Mar 14 10:52:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Cercueil X-Patchwork-Id: 69514 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:5915:0:0:0:0:0 with SMTP id v21csp1697793wrd; Tue, 14 Mar 2023 04:26:30 -0700 (PDT) X-Google-Smtp-Source: AK7set8jsYs4IYNlAYcIW3vWoGaQo3OIuk/NQ910O4/Fppiqkv/QsyZPuFLvsiv61n+9VpgqEkDS X-Received: by 2002:a05:6a20:8e10:b0:cb:f76c:e1a8 with SMTP id y16-20020a056a208e1000b000cbf76ce1a8mr15012691pzj.15.1678793190201; Tue, 14 Mar 2023 04:26:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1678793190; cv=none; d=google.com; s=arc-20160816; b=UF2ROK8gHZTDFjHCgOu03OaBGziXjiurwzeA4RwwJXbTxa/GMgwgW6yNYiVUzw+gra 4ATsWXwwWgalMJxSRVx/ukpLcQ7Nh1N225qwGnVxmXkCiAHQ5Bd7G/lkux7CPKYmZAZQ GHz8VM0UHQFMKnINYIcjszg4JipaPvARlURoJSLmtsGSA03GrmuRlt8gfeLUfCw1R5tz pxsUzsaSUSJ8hSObr2kkZeUBJNnJPEy4IcJE6314Q7haabbdf6nR2zKa6okz2RHlExKQ IKfdz78v7QhJqVICGiw1VIygS7mhw/DvgHLBD2PuJXgt4dymrqD90MuhAYS1BE+/MeP2 j/YA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jxfNorIALSXTIcdSKIDH829B6vo4dZmRww3AUKQcurM=; b=bHxNvVE/ixdqalG4htj+PlYKgT0VsAtINxzNi8bb5EcF5RVxOCrGEcfO3vkavhQ7hG UP9uVn4ybMfOYhSUAHVHc+niDv47mI07zAB5LF65GmcSzJ+nRChVm0tmT/J9wXMsrS2P Kji9Jbah/J1jG6VPI6NNMxX8CZpxXltMNo+aEHVkfPjkDZJc8z7FU+r3mc/pfhss61XV jUsMyTBCUSJY6WAJXAzpS0+02J81AlIr3DEsJyK74BNBeCHMUHuTQf+p0NQXjzQ3sRb9 CptrV/iGKm99yvl2tcMu67twBNQaWdY/NZ2fTTqL0KGpj8Wb16ffmiJjxziYhsZpoEia JpBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@crapouillou.net header.s=mail header.b=rRy0moM6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z14-20020a630a4e000000b005034a57b4d1si2105381pgk.406.2023.03.14.04.26.17; Tue, 14 Mar 2023 04:26:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@crapouillou.net header.s=mail header.b=rRy0moM6; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230131AbjCNKyI (ORCPT + 99 others); Tue, 14 Mar 2023 06:54:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34222 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229590AbjCNKyC (ORCPT ); Tue, 14 Mar 2023 06:54:02 -0400 Received: from aposti.net (aposti.net [89.234.176.197]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AA082AD20; Tue, 14 Mar 2023 03:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crapouillou.net; s=mail; t=1678791191; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jxfNorIALSXTIcdSKIDH829B6vo4dZmRww3AUKQcurM=; b=rRy0moM6paKV750d9wksROPVqQ6QxR5dF4aK91ULps8ORGUFeqgX5gQdu3rfSh7dDyjoKJ gGuVnq8VNh7gGSfMuq4KL3GJxGOMIZctpxei1I9Rof06p0zWtG+6Y4/WsOE81PcjV9Z9rS HMVEegH1qXn5y3b8AIfeOJ4eD/A3gow= From: Paul Cercueil To: Greg Kroah-Hartman , Sumit Semwal , =?utf-8?q?Christian_K=C3=B6nig?= Cc: michael.hennerich@analog.com, nuno.sa@analog.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org, Paul Cercueil Subject: [PATCH 1/2] usb: gadget: Support already-mapped DMA SGs Date: Tue, 14 Mar 2023 11:52:56 +0100 Message-Id: <20230314105257.17345-2-paul@crapouillou.net> In-Reply-To: <20230314105257.17345-1-paul@crapouillou.net> References: <20230314105257.17345-1-paul@crapouillou.net> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_PASS,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1760342248308490076?= X-GMAIL-MSGID: =?utf-8?q?1760342248308490076?= Add a new 'sg_was_mapped' field to the struct usb_request. This field can be used to indicate that the scatterlist associated to the USB transfer has already been mapped into the DMA space, and it does not have to be done internally. Signed-off-by: Paul Cercueil --- drivers/usb/gadget/udc/core.c | 7 ++++++- include/linux/usb/gadget.h | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/drivers/usb/gadget/udc/core.c b/drivers/usb/gadget/udc/core.c index 23b0629a8774..5f2c4933769d 100644 --- a/drivers/usb/gadget/udc/core.c +++ b/drivers/usb/gadget/udc/core.c @@ -829,6 +829,11 @@ int usb_gadget_map_request_by_dev(struct device *dev, if (req->length == 0) return 0; + if (req->sg_was_mapped) { + req->num_mapped_sgs = req->num_sgs; + return 0; + } + if (req->num_sgs) { int mapped; @@ -874,7 +879,7 @@ EXPORT_SYMBOL_GPL(usb_gadget_map_request); void usb_gadget_unmap_request_by_dev(struct device *dev, struct usb_request *req, int is_in) { - if (req->length == 0) + if (req->length == 0 || req->sg_was_mapped) return; if (req->num_mapped_sgs) { diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h index 00750f7020f3..9dd829b8974a 100644 --- a/include/linux/usb/gadget.h +++ b/include/linux/usb/gadget.h @@ -52,6 +52,7 @@ struct usb_ep; * @short_not_ok: When reading data, makes short packets be * treated as errors (queue stops advancing till cleanup). * @dma_mapped: Indicates if request has been mapped to DMA (internal) + * @sg_was_mapped: Set if the scatterlist has been mapped before the request * @complete: Function called when request completes, so this request and * its buffer may be re-used. The function will always be called with * interrupts disabled, and it must not sleep. @@ -111,6 +112,7 @@ struct usb_request { unsigned zero:1; unsigned short_not_ok:1; unsigned dma_mapped:1; + unsigned sg_was_mapped:1; void (*complete)(struct usb_ep *ep, struct usb_request *req);