From patchwork Wed May 3 11:48:42 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xinming Hu X-Patchwork-Id: 9709505 X-Patchwork-Delegate: kvalo@adurom.com Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 656436021C for ; Wed, 3 May 2017 11:49:10 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5036B28601 for ; Wed, 3 May 2017 11:49:10 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4496A2860D; Wed, 3 May 2017 11:49:10 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id C4E2528601 for ; Wed, 3 May 2017 11:49:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751966AbdECLtJ (ORCPT ); Wed, 3 May 2017 07:49:09 -0400 Received: from mail-pf0-f194.google.com ([209.85.192.194]:35925 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751264AbdECLtF (ORCPT ); Wed, 3 May 2017 07:49:05 -0400 Received: by mail-pf0-f194.google.com with SMTP id v14so3980366pfd.3 for ; Wed, 03 May 2017 04:49:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=lV+tgMHNXJSsWeqG8JkEsx3RZm86TJ9EG1fF8fSC1eo=; b=PL0xWvvj+nYC0Z18qJjezY+eG0Y9NxomQ+UGrcbFf/saxDay1lBEKOVpK7CHYw7+Ml vJqW7shfFrMW5DC9mVsEVk6Qw0iFqXLMmobokePadShlC39eiSraAqXH0yJSi6I7fV3r 8nkmsQQcwimN+/TZKSGedpoJE9DuKJNd3vakYWHTK2Vs4QKj80mcnZFsqHAbvi55TGf3 rxWVpS96xC5hcsUStbEmZByL9LmejJ2lzxPWljJONOdR3q3nM+/9YA+jTDzOm6BxK1iE QRTLW8p6tOjjwMmCRWF4pOv4HLU7Zo+ig4FNbnIxvw6sAl8EBUsduh1+ORuQn+ivkXWc tvbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=lV+tgMHNXJSsWeqG8JkEsx3RZm86TJ9EG1fF8fSC1eo=; b=t4fBj2BItaKgdR/X+ejfkyHYjGQdIArMB/H7zzbPPeBbHclQfAiCKzCARk8MeK0Dd8 Y/ynrN3MjLb9MOfF9L5c607oOOB7TXcXQEzOQ3+vnaGl4h9315AOQ/qObbws0yJg/hQK ZfgARQRlxY/Lph3hH9erYkmfGrVJ01PsYjXIHaoyolWM1dY+w8lpvZp/Td5d2xNp0BBT vT7RzhM3g23Yi24e1xf/Rz2z4mRwwt2peKe0gzLznxfIk4uCSdknVyqyvpgBsmwsBqd7 awc9fJVLiwVN+uC/jVdN/w+QTyS2vjFUMnfc5BkSctB/mNLZgm77Xq1GMUOf9aaycwC+ wIQQ== X-Gm-Message-State: AN3rC/6ieoUBso7tsVMn1In0IDpOz4qYVQpoUhd6Jg9ROuyyK6G1PsT4 Ik9FfngjbPxgdg== X-Received: by 10.84.148.203 with SMTP id y11mr49580861plg.10.1493812144687; Wed, 03 May 2017 04:49:04 -0700 (PDT) Received: from ubuntu.members.linode.com ([2400:8902::f03c:91ff:fee7:7cf1]) by smtp.gmail.com with ESMTPSA id f80sm4571976pff.84.2017.05.03.04.49.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 03 May 2017 04:49:04 -0700 (PDT) From: Xinming Hu To: Linux Wireless Cc: Kalle Valo , Brian Norris , Dmitry Torokhov , rajatja@google.com, Zhiyuan Yang , Cathy Luo , Xinming Hu , Ganapathi Bhat Subject: [PATCH 5/6] mwifiex: do not aggregate tcp ack in usb tx aggregation queue Date: Wed, 3 May 2017 11:48:42 +0000 Message-Id: <1493812123-12053-5-git-send-email-huxinming820@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1493812123-12053-1-git-send-email-huxinming820@gmail.com> References: <1493812123-12053-1-git-send-email-huxinming820@gmail.com> Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Xinming Hu Tcp ack should be send as soon to avoid throuput drop during receive tcp traffic. Signed-off-by: Xinming Hu Signed-off-by: Cathy Luo Signed-off-by: Ganapathi Bhat --- drivers/net/wireless/marvell/mwifiex/11n_aggr.c | 4 ++++ drivers/net/wireless/marvell/mwifiex/decl.h | 1 + drivers/net/wireless/marvell/mwifiex/main.c | 26 +++++++++++++++++++++++++ drivers/net/wireless/marvell/mwifiex/main.h | 1 + drivers/net/wireless/marvell/mwifiex/usb.c | 6 ++++-- 5 files changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c index e8ffb26..cbf3bc2 100644 --- a/drivers/net/wireless/marvell/mwifiex/11n_aggr.c +++ b/drivers/net/wireless/marvell/mwifiex/11n_aggr.c @@ -194,6 +194,10 @@ if (tx_info_src->flags & MWIFIEX_BUF_FLAG_TDLS_PKT) tx_info_aggr->flags |= MWIFIEX_BUF_FLAG_TDLS_PKT; + + if (tx_info_src->flags & MWIFIEX_BUF_FLAG_TCP_ACK) + tx_info_aggr->flags |= MWIFIEX_BUF_FLAG_TCP_ACK; + tx_info_aggr->flags |= MWIFIEX_BUF_FLAG_AGGR_PKT; skb_aggr->priority = skb_src->priority; skb_aggr->tstamp = skb_src->tstamp; diff --git a/drivers/net/wireless/marvell/mwifiex/decl.h b/drivers/net/wireless/marvell/mwifiex/decl.h index 188e4c3..0487420 100644 --- a/drivers/net/wireless/marvell/mwifiex/decl.h +++ b/drivers/net/wireless/marvell/mwifiex/decl.h @@ -89,6 +89,7 @@ #define MWIFIEX_BUF_FLAG_EAPOL_TX_STATUS BIT(3) #define MWIFIEX_BUF_FLAG_ACTION_TX_STATUS BIT(4) #define MWIFIEX_BUF_FLAG_AGGR_PKT BIT(5) +#define MWIFIEX_BUF_FLAG_TCP_ACK BIT(6) #define MWIFIEX_BRIDGED_PKTS_THR_HIGH 1024 #define MWIFIEX_BRIDGED_PKTS_THR_LOW 128 diff --git a/drivers/net/wireless/marvell/mwifiex/main.c b/drivers/net/wireless/marvell/mwifiex/main.c index dc79d1a..5c7fbc6 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.c +++ b/drivers/net/wireless/marvell/mwifiex/main.c @@ -851,6 +851,30 @@ struct sk_buff * return skb; } +static bool is_piggyback_tcp_ack(struct sk_buff *skb) +{ + struct ethhdr *ethh = NULL; + struct iphdr *iph = NULL; + struct tcphdr *tcph = NULL; + + ethh = (struct ethhdr *)skb->data; + if (ntohs(ethh->h_proto) != ETH_P_IP) + return false; + + iph = (struct iphdr *)((u8 *)ethh + sizeof(struct ethhdr)); + if (iph->protocol != IPPROTO_TCP) + return false; + + tcph = (struct tcphdr *)((u8 *)iph + iph->ihl * 4); + /* Piggyback ack without payload*/ + if (*((u8 *)tcph + 13) == 0x10 && + ntohs(iph->tot_len) <= (iph->ihl + tcph->doff) * 4) { + return true; + } + + return false; +} + /* * CFG802.11 network device handler for data transmission. */ @@ -904,6 +928,8 @@ struct sk_buff * tx_info->bss_num = priv->bss_num; tx_info->bss_type = priv->bss_type; tx_info->pkt_len = skb->len; + if (is_piggyback_tcp_ack(skb)) + tx_info->flags |= MWIFIEX_BUF_FLAG_TCP_ACK; multicast = is_multicast_ether_addr(skb->data); diff --git a/drivers/net/wireless/marvell/mwifiex/main.h b/drivers/net/wireless/marvell/mwifiex/main.h index a85b89e..a947825 100644 --- a/drivers/net/wireless/marvell/mwifiex/main.h +++ b/drivers/net/wireless/marvell/mwifiex/main.h @@ -49,6 +49,7 @@ #include #include #include +#include #include "decl.h" #include "ioctl.h" diff --git a/drivers/net/wireless/marvell/mwifiex/usb.c b/drivers/net/wireless/marvell/mwifiex/usb.c index 3587268..ea49a88 100644 --- a/drivers/net/wireless/marvell/mwifiex/usb.c +++ b/drivers/net/wireless/marvell/mwifiex/usb.c @@ -943,6 +943,7 @@ static int mwifiex_usb_aggr_tx_data(struct mwifiex_adapter *adapter, u8 ep, struct urb_context *context = NULL; struct txpd *local_tx_pd = (struct txpd *)((u8 *)skb->data + adapter->intf_hdr_len); + struct mwifiex_txinfo *tx_info = MWIFIEX_SKB_TXCB(skb); u8 f_send_aggr_buf = 0; u8 f_send_cur_buf = 0; u8 f_precopy_cur_buf = 0; @@ -998,8 +999,9 @@ static int mwifiex_usb_aggr_tx_data(struct mwifiex_adapter *adapter, u8 ep, } } - if (local_tx_pd->flags & MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET) { - /* Send NULL packet immediately*/ + if (local_tx_pd->flags & MWIFIEX_TxPD_POWER_MGMT_NULL_PACKET || + tx_info->flags & MWIFIEX_BUF_FLAG_TCP_ACK) { + /* Send NULL data/TCP ACK packet immediately*/ if (f_precopy_cur_buf) { if (skb_queue_empty(&port->tx_aggr.aggr_list)) { f_precopy_cur_buf = 0;