Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp4580108ybl; Mon, 9 Dec 2019 13:17:52 -0800 (PST) X-Google-Smtp-Source: APXvYqy/Gc9AhMFVAshP+Y/701/WCSp/gOxWHgaEcSzT5pH/AmsyGicO6UYA2GFNtKeJWCcIhqsQ X-Received: by 2002:aca:dd04:: with SMTP id u4mr1064269oig.94.1575926272736; Mon, 09 Dec 2019 13:17:52 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575926272; cv=none; d=google.com; s=arc-20160816; b=KyUpT9w05xvIxM0Ma3OFbaqgl1glthXlB88lzobXv+ZH9oEKPgWPOY6SWRsn/DD3IS Z3M6iHThnqqAR59OqNZFVvQMZp8svQ5dhsuihfYOp9Cea9uhPTFAQFdqSd7opKArx8u7 98P17XroUR04lFELOYLvlJcuUPeWZqKoOWzd0fCACYFnKZK4n+uBVP9aJnUt64FGMtcX vHug3UHxbbKaz5h1g+Ti/klfkqD+GgKfW2SicAgn8KzjORkXrhYpv5dLWzCiKHk3xeDP ZLRHmwKOG0n1ax54rEywosM6mLCF93H8eV1IMHEoCD6drHI4RFLHeBMf3t74aNCio9iL 8sYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=R64eX+R1OJb+Vd+fYX/GQMLtFnkOtcS7hBblneV6NTo=; b=KnUIa9xrXGYwRnU0Ci2f++IsDAEA/b1yZ75/pf9LecDG7E9Hn8NMSV9Zw/9cNuGBwP yWF2c3Oz4A/SPZtQhNHDbqjZCilGgjoTNJ4dIsSYaROMb0H5ch7yt9fw7iwYR88caYhk BK2atohxcETYgEefmG41zGFXQbvzUzGd5qv8Z8ciiK9ISfLzKRiCGZj23COkeq57ImKC ZPjBNG72bsUl78VX1Nxw0ZGeYXMyfd5xPkwRfK4nFm1sZwRhGkMUGDWyf1+Ww5k4qJ1G bL+pHgzIz6RsjNKTGBvMCHEquN1LBktGzRDbZ12yUoi2yh6WSb4YKpdL0yAA+s1srDeg PqoQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y14si600134otk.237.2019.12.09.13.17.29; Mon, 09 Dec 2019 13:17:52 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-wireless-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726598AbfLIVRO (ORCPT + 99 others); Mon, 9 Dec 2019 16:17:14 -0500 Received: from smail.rz.tu-ilmenau.de ([141.24.186.67]:41535 "EHLO smail.rz.tu-ilmenau.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726483AbfLIVRO (ORCPT ); Mon, 9 Dec 2019 16:17:14 -0500 Received: from isengard.fritz.box (unknown [92.195.99.143]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smail.rz.tu-ilmenau.de (Postfix) with ESMTPSA id 964F8580074; Mon, 9 Dec 2019 22:17:11 +0100 (CET) From: Markus Theil To: nbd@nbd.name Cc: linux-wireless@vger.kernel.org, lorenzo.bianconi@redhat.com, Stanislaw Gruszka , Markus Theil Subject: [PATCH] mt76: use AC specific reorder timeout Date: Mon, 9 Dec 2019 22:15:27 +0100 Message-Id: <20191209211527.13977-1-markus.theil@tu-ilmenau.de> X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org Before this patch, mt76 handled rx traffic for all TIDs equally, when released from reorder buffer early. This patch uses an AC specific reorder timeout, in order to release partial aggregated frames for voice or video ACs earlier. For example, ath10k also uses AC specific reorder timeouts (reported by firmware in that case). Signed-off-by: Markus Theil --- drivers/net/wireless/mediatek/mt76/agg-rx.c | 30 ++++++++++++++++++--- drivers/net/wireless/mediatek/mt76/mt76.h | 2 ++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/mediatek/mt76/agg-rx.c b/drivers/net/wireless/mediatek/mt76/agg-rx.c index 53b5a4b2dcc5..3832be7d14f3 100644 --- a/drivers/net/wireless/mediatek/mt76/agg-rx.c +++ b/drivers/net/wireless/mediatek/mt76/agg-rx.c @@ -4,7 +4,27 @@ */ #include "mt76.h" -#define REORDER_TIMEOUT (HZ / 10) +static unsigned long mt76_aggr_tid_to_timeo(u8 tidno) +{ + const int ieee802_1d_to_ac[8] = { + IEEE80211_AC_BE, + IEEE80211_AC_BK, + IEEE80211_AC_BK, + IEEE80211_AC_BE, + IEEE80211_AC_VI, + IEEE80211_AC_VI, + IEEE80211_AC_VO, + IEEE80211_AC_VO + }; + const int ac_to_timeout[] = { + [IEEE80211_AC_VO] = HZ / 30, + [IEEE80211_AC_VI] = HZ / 25, + [IEEE80211_AC_BE] = HZ / 10, + [IEEE80211_AC_BK] = HZ / 10 + }; + + return ac_to_timeout[ieee802_1d_to_ac[tidno & 7]]; +} static void mt76_aggr_release(struct mt76_rx_tid *tid, struct sk_buff_head *frames, int idx) @@ -71,7 +91,8 @@ mt76_rx_aggr_check_release(struct mt76_rx_tid *tid, struct sk_buff_head *frames) nframes--; status = (struct mt76_rx_status *)skb->cb; if (!time_after(jiffies, - status->reorder_time + REORDER_TIMEOUT)) + status->reorder_time + + mt76_aggr_tid_to_timeo(tid->num))) continue; mt76_rx_aggr_release_frames(tid, frames, status->seqno); @@ -101,7 +122,7 @@ mt76_rx_aggr_reorder_work(struct work_struct *work) if (nframes) ieee80211_queue_delayed_work(tid->dev->hw, &tid->reorder_work, - REORDER_TIMEOUT); + mt76_aggr_tid_to_timeo(tid->num)); mt76_rx_complete(dev, &frames, NULL); rcu_read_unlock(); @@ -225,7 +246,7 @@ void mt76_rx_aggr_reorder(struct sk_buff *skb, struct sk_buff_head *frames) mt76_rx_aggr_release_head(tid, frames); ieee80211_queue_delayed_work(tid->dev->hw, &tid->reorder_work, - REORDER_TIMEOUT); + mt76_aggr_tid_to_timeo(tid->num)); out: spin_unlock_bh(&tid->lock); @@ -245,6 +266,7 @@ int mt76_rx_aggr_start(struct mt76_dev *dev, struct mt76_wcid *wcid, u8 tidno, tid->dev = dev; tid->head = ssn; tid->size = size; + tid->num = tidno; INIT_DELAYED_WORK(&tid->reorder_work, mt76_rx_aggr_reorder_work); spin_lock_init(&tid->lock); diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h index c268c3d76b3d..b604d8d5f0bc 100644 --- a/drivers/net/wireless/mediatek/mt76/mt76.h +++ b/drivers/net/wireless/mediatek/mt76/mt76.h @@ -237,6 +237,8 @@ struct mt76_rx_tid { u8 size; u8 nframes; + u8 num; + u8 started:1, stopped:1, timer_pending:1; struct sk_buff *reorder_buf[]; -- 2.24.0