Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp2482195imd; Fri, 2 Nov 2018 12:10:17 -0700 (PDT) X-Google-Smtp-Source: AJdET5dNa4Z3K+4YDDgf9xv9cpK+j8pxJztQqJXsg4IqbfaL4CQr3KysSw19iqou5Z3ioBbJKdYm X-Received: by 2002:a63:42c1:: with SMTP id p184mr11877513pga.202.1541185817146; Fri, 02 Nov 2018 12:10:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541185817; cv=none; d=google.com; s=arc-20160816; b=uELrSn9Em7b8wA/82zx4ndBYjuQuqUEr0h487KftyzSm/z6rPC+aXImaW613yNTvQq pAQ+wYRf34szO+nSx8FnmSuSE+96ZAGcIaq+OqqqrxBCZPN+D29AaC0h1nvqpzIYq9+B 3tKlNv+VkSKS4vgeB/kIqcbGggK5p6qCn+HsS5MkJERKy0bOHgD2aYkZVJpuQdgHBgN2 eOkhMcGH1nd7FqifUf0GiZ1ILpnJn8WB3D9ysTXr29gyCHS6GdcHG09pAQVsBhnSHQqm bwEjSH66b3sKzi/6PlVchtMFdKSwC0z/Dz1UGObPAge32NgLynTJYpyoiiWcUuVvzE9j DwmQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/gCtorNYFxSXxoJujz+xo1625tWpxjC0zD8GqJtN120=; b=xs4Q7IA1ZUc4zSknfTChyomI8SmZmfLIt979feqw29C0qKjN2rC5EBSeTZaE2DA7Rg P+BgduiGG3SAE7z3JtBS/eBLuPo7LtbUhP/GWSjHAWhXYsFBopGJJyJWg/KjKrcm8uaL hee2UwNIo4TBVU8PvPFib0GSoRhFCRsZ5YmOBC7jZF4FQI9OJwLE/bvhk03xOG3tm1Ve mvwCTAoYMu80arDI18ePygUGshbGstXnov+eseYFzBdtfl24262VZEoAFoiDzbY1aHWA gERDoKfaCbfJ2AAufMCCmY3tFoos4oa5ahVmuJvI0j1BHhuN4k5THzOkPfmQJNhz1afb 4qCA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wrz4GhEP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-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 b6-v6si34340164plr.267.2018.11.02.12.10.02; Fri, 02 Nov 2018 12:10:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=wrz4GhEP; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728997AbeKCDrJ (ORCPT + 99 others); Fri, 2 Nov 2018 23:47:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:41102 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728028AbeKCDrJ (ORCPT ); Fri, 2 Nov 2018 23:47:09 -0400 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id A52542082D; Fri, 2 Nov 2018 18:38:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1541183937; bh=eeNCZV0aFJLgJYVGZejGuf2z76fjxzDrFwdp/ndZHPU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wrz4GhEPcRKesDKfLUb2tW2Tz3A8tIQy7AjKBrTymmHrTZDdazqKuS9G+f8PVKGd1 mgU8Afg3e7IXPmG7biiv6SpLlLIYaRg2O6A+Il+QBDNvxUXJiYRcmurmSMqKqUuzn7 4CQz1Xr8GB4EJWeAr4SjU/30IQUgV+G8ysKGaEsI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Yuan-Chi Pang , Johannes Berg , Sasha Levin Subject: [PATCH 4.18 010/150] mac80211: fix TX status reporting for ieee80211s Date: Fri, 2 Nov 2018 19:32:52 +0100 Message-Id: <20181102182903.310807683@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181102182902.250560510@linuxfoundation.org> References: <20181102182902.250560510@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.18-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit c42055105785580563535e6d3143cad95c7ac7ee ] TX status reporting to ieee80211s is through ieee80211s_update_metric. There are two problems about ieee80211s_update_metric: 1. The purpose is to estimate the fail probability to a specific link. No need to restrict to data frame. 2. Current implementation does not work if wireless driver does not pass tx_status with skb. Fix this by removing ieee80211_is_data condition, passing ieee80211_tx_status directly to ieee80211s_update_metric, and putting it in both __ieee80211_tx_status and ieee80211_tx_status_ext. Signed-off-by: Yuan-Chi Pang Signed-off-by: Johannes Berg Signed-off-by: Sasha Levin --- net/mac80211/mesh.h | 3 ++- net/mac80211/mesh_hwmp.c | 9 +++------ net/mac80211/status.c | 4 +++- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/net/mac80211/mesh.h b/net/mac80211/mesh.h index ee56f18cad3f..21526630bf65 100644 --- a/net/mac80211/mesh.h +++ b/net/mac80211/mesh.h @@ -217,7 +217,8 @@ void mesh_rmc_free(struct ieee80211_sub_if_data *sdata); int mesh_rmc_init(struct ieee80211_sub_if_data *sdata); void ieee80211s_init(void); void ieee80211s_update_metric(struct ieee80211_local *local, - struct sta_info *sta, struct sk_buff *skb); + struct sta_info *sta, + struct ieee80211_tx_status *st); void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata); void ieee80211_mesh_teardown_sdata(struct ieee80211_sub_if_data *sdata); int ieee80211_start_mesh(struct ieee80211_sub_if_data *sdata); diff --git a/net/mac80211/mesh_hwmp.c b/net/mac80211/mesh_hwmp.c index daf9db3c8f24..6950cd0bf594 100644 --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c @@ -295,15 +295,12 @@ int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata, } void ieee80211s_update_metric(struct ieee80211_local *local, - struct sta_info *sta, struct sk_buff *skb) + struct sta_info *sta, + struct ieee80211_tx_status *st) { - struct ieee80211_tx_info *txinfo = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; + struct ieee80211_tx_info *txinfo = st->info; int failed; - if (!ieee80211_is_data(hdr->frame_control)) - return; - failed = !(txinfo->flags & IEEE80211_TX_STAT_ACK); /* moving average, scaled to 100. diff --git a/net/mac80211/status.c b/net/mac80211/status.c index 001a869c059c..91d7c0cd1882 100644 --- a/net/mac80211/status.c +++ b/net/mac80211/status.c @@ -808,7 +808,7 @@ static void __ieee80211_tx_status(struct ieee80211_hw *hw, rate_control_tx_status(local, sband, status); if (ieee80211_vif_is_mesh(&sta->sdata->vif)) - ieee80211s_update_metric(local, sta, skb); + ieee80211s_update_metric(local, sta, status); if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) ieee80211_frame_acked(sta, skb); @@ -969,6 +969,8 @@ void ieee80211_tx_status_ext(struct ieee80211_hw *hw, } rate_control_tx_status(local, sband, status); + if (ieee80211_vif_is_mesh(&sta->sdata->vif)) + ieee80211s_update_metric(local, sta, status); } if (acked || noack_success) { -- 2.17.1