Merge tag 'hyperv-next-signed-20220807' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-microblaze.git] / net / mac80211 / mesh_hwmp.c
index 58ebdcd..9b1ce7c 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-only
 /*
  * Copyright (c) 2008, 2009 open80211s Ltd.
- * Copyright (C) 2019, 2021 Intel Corporation
+ * Copyright (C) 2019, 2021-2022 Intel Corporation
  * Author:     Luis Carlos Cobo <luisca@cozybit.com>
  */
 
@@ -247,13 +247,13 @@ int mesh_path_error_tx(struct ieee80211_sub_if_data *sdata,
                return -EAGAIN;
 
        skb = dev_alloc_skb(local->tx_headroom +
-                           sdata->encrypt_headroom +
+                           IEEE80211_ENCRYPT_HEADROOM +
                            IEEE80211_ENCRYPT_TAILROOM +
                            hdr_len +
                            2 + 15 /* PERR IE */);
        if (!skb)
                return -1;
-       skb_reserve(skb, local->tx_headroom + sdata->encrypt_headroom);
+       skb_reserve(skb, local->tx_headroom + IEEE80211_ENCRYPT_HEADROOM);
        mgmt = skb_put_zero(skb, hdr_len);
        mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
                                          IEEE80211_STYPE_ACTION);
@@ -310,7 +310,12 @@ void ieee80211s_update_metric(struct ieee80211_local *local,
                        LINK_FAIL_THRESH)
                mesh_plink_broken(sta);
 
-       sta_set_rate_info_tx(sta, &sta->deflink.tx_stats.last_rate, &rinfo);
+       /* use rate info set by the driver directly if present */
+       if (st->n_rates)
+               rinfo = sta->deflink.tx_stats.last_rate_info;
+       else
+               sta_set_rate_info_tx(sta, &sta->deflink.tx_stats.last_rate, &rinfo);
+
        ewma_mesh_tx_rate_avg_add(&sta->mesh->tx_rate_avg,
                                  cfg80211_calculate_bitrate(&rinfo));
 }
@@ -927,7 +932,7 @@ void mesh_rx_path_sel_frame(struct ieee80211_sub_if_data *sdata,
 
        baselen = (u8 *) mgmt->u.action.u.mesh_action.variable - (u8 *) mgmt;
        elems = ieee802_11_parse_elems(mgmt->u.action.u.mesh_action.variable,
-                                      len - baselen, false, mgmt->bssid, NULL);
+                                      len - baselen, false, NULL);
        if (!elems)
                return;