From patchwork Tue Jun 16 12:34:44 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Macpaul Lin X-Patchwork-Id: 11607327 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D172314E3 for ; Tue, 16 Jun 2020 12:35:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B990920B1F for ; Tue, 16 Jun 2020 12:35:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="ry5TuPar" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728549AbgFPMfC (ORCPT ); Tue, 16 Jun 2020 08:35:02 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:51647 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1726452AbgFPMfA (ORCPT ); Tue, 16 Jun 2020 08:35:00 -0400 X-UUID: 18f0da544a59497f86ccb810d66781e8-20200616 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=+GHnm45hE2jvr2nHAZ9rbe0xkhq/hG963s3MyoZ72c0=; b=ry5TuParlmxjOx5nT33uoyGIJz056/Nosl70ASUWDDsrb5z9G4U0BVQwv7hHKAGYbYN0087MwM6V3RcO904MgVdYFkiKKHGhH2hk/ORdNmX9zTJ0FDLshfQ6zx2evja7vu2FX3d9eFT2grb3zV3vVvIrYUtYug/DMMJzjm8mvtU=; X-UUID: 18f0da544a59497f86ccb810d66781e8-20200616 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.10 Build 0809 with TLS) with ESMTP id 1834094559; Tue, 16 Jun 2020 20:34:53 +0800 Received: from mtkcas08.mediatek.inc (172.21.101.126) by mtkmbs01n2.mediatek.inc (172.21.101.79) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Tue, 16 Jun 2020 20:34:49 +0800 Received: from mtkswgap22.mediatek.inc (172.21.77.33) by mtkcas08.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Tue, 16 Jun 2020 20:34:50 +0800 From: Macpaul Lin To: Chunfeng Yun , Greg Kroah-Hartman , Felipe Balbi , Matthias Brugger , =?utf-8?b?TWljaGHFgiBNaXJvc8WCYXc=?= , Sergey Organov , Fabrice Gasnier , , , , CC: Mediatek WSD Upstream , Macpaul Lin , Macpaul Lin Subject: [PATCH 2/2] usb: gadget: u_serial: improve performance for large data Date: Tue, 16 Jun 2020 20:34:44 +0800 Message-ID: <1592310884-4307-2-git-send-email-macpaul.lin@mediatek.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1592310884-4307-1-git-send-email-macpaul.lin@mediatek.com> References: <1592310884-4307-1-git-send-email-macpaul.lin@mediatek.com> MIME-Version: 1.0 X-TM-SNTS-SMTP: EDECF17A48CB3E8AC57607178CD1F115DB62B0B3FEBF009D4986F0C9798111442000:8 X-MTK: N Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org If the hardware (like DMA engine) could support large usb request exceeds maximum packet size, use larger buffer when performing Rx/Tx could reduce request numbers and improve performance. Signed-off-by: Macpaul Lin --- drivers/usb/gadget/function/u_serial.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c index 3cfc6e2..cdcc070 100644 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c @@ -80,6 +80,8 @@ #define QUEUE_SIZE 16 #define WRITE_BUF_SIZE 8192 /* TX only */ #define GS_CONSOLE_BUF_SIZE 8192 +/* for hardware can do more than max packet */ +#define REQ_BUF_SIZE 4096 /* console info */ struct gs_console { @@ -247,7 +249,8 @@ static int gs_start_tx(struct gs_port *port) break; req = list_entry(pool->next, struct usb_request, list); - len = gs_send_packet(port, req->buf, in->maxpacket); + len = gs_send_packet(port, req->buf, in->can_exceed_maxp ? + REQ_BUF_SIZE : in->maxpacket); if (len == 0) { wake_up_interruptible(&port->drain_wait); break; @@ -514,7 +517,9 @@ static int gs_alloc_requests(struct usb_ep *ep, struct list_head *head, * be as speedy as we might otherwise be. */ for (i = 0; i < n; i++) { - req = gs_alloc_req(ep, ep->maxpacket, GFP_ATOMIC); + req = gs_alloc_req(ep, ep->can_exceed_maxp ? + REQ_BUF_SIZE : ep->maxpacket, + GFP_ATOMIC); if (!req) return list_empty(head) ? -ENOMEM : 0; req->complete = fn;