Commit 1347775d authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files
Kalle Valo says:

====================
wireless fixes for v6.8-rc2

The most visible fix here is the ath11k crash fix which was introduced
in v6.7. We also have a fix for iwlwifi memory corruption and few
smaller fixes in the stack.

* tag 'wireless-2024-01-22' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless:
  wifi: mac80211: fix race condition on enabling fast-xmit
  wifi: iwlwifi: fix a memory corruption
  wifi: mac80211: fix potential sta-link leak
  wifi: cfg80211/mac80211: remove dependency on non-existing option
  wifi: cfg80211: fix missing interfaces when dumping
  wifi: ath11k: rely on mac80211 debugfs handling for vif
  wifi: p54: fix GCC format truncation warning with wiphy->fw_version
====================

Link: https://lore.kernel.org/r/20240122153434.E0254C433C7@smtp.kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 435e202d bcbc84af
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -368,10 +368,6 @@ struct ath11k_vif {
	struct ieee80211_chanctx_conf chanctx;
	struct ath11k_arp_ns_offload arp_ns_offload;
	struct ath11k_rekey_data rekey_data;

#ifdef CONFIG_ATH11K_DEBUGFS
	struct dentry *debugfs_twt;
#endif /* CONFIG_ATH11K_DEBUGFS */
};

struct ath11k_vif_iter {
+10 −15
Original line number Diff line number Diff line
@@ -1894,35 +1894,30 @@ static const struct file_operations ath11k_fops_twt_resume_dialog = {
	.open = simple_open
};

void ath11k_debugfs_add_interface(struct ath11k_vif *arvif)
void ath11k_debugfs_op_vif_add(struct ieee80211_hw *hw,
			       struct ieee80211_vif *vif)
{
	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
	struct ath11k_base *ab = arvif->ar->ab;
	struct dentry *debugfs_twt;

	if (arvif->vif->type != NL80211_IFTYPE_AP &&
	    !(arvif->vif->type == NL80211_IFTYPE_STATION &&
	      test_bit(WMI_TLV_SERVICE_STA_TWT, ab->wmi_ab.svc_map)))
		return;

	arvif->debugfs_twt = debugfs_create_dir("twt",
	debugfs_twt = debugfs_create_dir("twt",
					 arvif->vif->debugfs_dir);
	debugfs_create_file("add_dialog", 0200, arvif->debugfs_twt,
	debugfs_create_file("add_dialog", 0200, debugfs_twt,
			    arvif, &ath11k_fops_twt_add_dialog);

	debugfs_create_file("del_dialog", 0200, arvif->debugfs_twt,
	debugfs_create_file("del_dialog", 0200, debugfs_twt,
			    arvif, &ath11k_fops_twt_del_dialog);

	debugfs_create_file("pause_dialog", 0200, arvif->debugfs_twt,
	debugfs_create_file("pause_dialog", 0200, debugfs_twt,
			    arvif, &ath11k_fops_twt_pause_dialog);

	debugfs_create_file("resume_dialog", 0200, arvif->debugfs_twt,
	debugfs_create_file("resume_dialog", 0200, debugfs_twt,
			    arvif, &ath11k_fops_twt_resume_dialog);
}
void ath11k_debugfs_remove_interface(struct ath11k_vif *arvif)
{
	if (!arvif->debugfs_twt)
		return;

	debugfs_remove_recursive(arvif->debugfs_twt);
	arvif->debugfs_twt = NULL;
}
+2 −10
Original line number Diff line number Diff line
@@ -307,8 +307,8 @@ static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)
	return ar->debug.rx_filter;
}

void ath11k_debugfs_add_interface(struct ath11k_vif *arvif);
void ath11k_debugfs_remove_interface(struct ath11k_vif *arvif);
void ath11k_debugfs_op_vif_add(struct ieee80211_hw *hw,
			       struct ieee80211_vif *vif);
void ath11k_debugfs_add_dbring_entry(struct ath11k *ar,
				     enum wmi_direct_buffer_module id,
				     enum ath11k_dbg_dbr_event event,
@@ -387,14 +387,6 @@ static inline int ath11k_debugfs_get_fw_stats(struct ath11k *ar,
	return 0;
}

static inline void ath11k_debugfs_add_interface(struct ath11k_vif *arvif)
{
}

static inline void ath11k_debugfs_remove_interface(struct ath11k_vif *arvif)
{
}

static inline void
ath11k_debugfs_add_dbring_entry(struct ath11k *ar,
				enum wmi_direct_buffer_module id,
+1 −11
Original line number Diff line number Diff line
@@ -6756,13 +6756,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
		goto err;
	}

	/* In the case of hardware recovery, debugfs files are
	 * not deleted since ieee80211_ops.remove_interface() is
	 * not invoked. In such cases, try to delete the files.
	 * These will be re-created later.
	 */
	ath11k_debugfs_remove_interface(arvif);

	memset(arvif, 0, sizeof(*arvif));

	arvif->ar = ar;
@@ -6939,8 +6932,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,

	ath11k_dp_vdev_tx_attach(ar, arvif);

	ath11k_debugfs_add_interface(arvif);

	if (vif->type != NL80211_IFTYPE_MONITOR &&
	    test_bit(ATH11K_FLAG_MONITOR_CONF_ENABLED, &ar->monitor_flags)) {
		ret = ath11k_mac_monitor_vdev_create(ar);
@@ -7056,8 +7047,6 @@ static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,
	/* Recalc txpower for remaining vdev */
	ath11k_mac_txpower_recalc(ar);

	ath11k_debugfs_remove_interface(arvif);

	/* TODO: recal traffic pause state based on the available vdevs */

	mutex_unlock(&ar->conf_mutex);
@@ -9153,6 +9142,7 @@ static const struct ieee80211_ops ath11k_ops = {
#endif

#ifdef CONFIG_ATH11K_DEBUGFS
	.vif_add_debugfs		= ath11k_debugfs_op_vif_add,
	.sta_add_debugfs		= ath11k_debugfs_sta_op_add,
#endif

+2 −2
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/*
 * Copyright (C) 2018-2023 Intel Corporation
 * Copyright (C) 2018-2024 Intel Corporation
 */
#include <linux/firmware.h>
#include "iwl-drv.h"
@@ -1096,7 +1096,7 @@ static int iwl_dbg_tlv_override_trig_node(struct iwl_fw_runtime *fwrt,
		node_trig = (void *)node_tlv->data;
	}

	memcpy(node_trig->data + offset, trig->data, trig_data_len);
	memcpy((u8 *)node_trig->data + offset, trig->data, trig_data_len);
	node_tlv->length = cpu_to_le32(size);

	if (policy & IWL_FW_INI_APPLY_POLICY_OVERRIDE_CFG) {
Loading