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

====================
wireless fixes for v6.10-rc3

The first fixes for v6.10. And we have a big one, I suspect the
biggest wireless pull request we ever had. There are fixes all over,
both in stack and drivers. Likely the most important here are mt76 not
working on mt7615 devices, ath11k not being able to connect to 6 GHz
networks and rtlwifi suffering from packet loss. But of course there's
much more.

* tag 'wireless-2024-06-03' of git://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless: (37 commits)
  wifi: rtlwifi: Ignore IEEE80211_CONF_CHANGE_RETRY_LIMITS
  wifi: mt76: mt7615: add missing chanctx ops
  wifi: wilc1000: document SRCU usage instead of SRCU
  Revert "wifi: wilc1000: set atomic flag on kmemdup in srcu critical section"
  Revert "wifi: wilc1000: convert list management to RCU"
  wifi: mac80211: fix UBSAN noise in ieee80211_prep_hw_scan()
  wifi: mac80211: correctly parse Spatial Reuse Parameter Set element
  wifi: mac80211: fix Spatial Reuse element size check
  wifi: iwlwifi: mvm: don't read past the mfuart notifcation
  wifi: iwlwifi: mvm: Fix scan abort handling with HW rfkill
  wifi: iwlwifi: mvm: check n_ssids before accessing the ssids
  wifi: iwlwifi: mvm: properly set 6 GHz channel direct probe option
  wifi: iwlwifi: mvm: handle BA session teardown in RF-kill
  wifi: iwlwifi: mvm: Handle BIGTK cipher in kek_kck cmd
  wifi: iwlwifi: mvm: remove stale STA link data during restart
  wifi: iwlwifi: dbg_ini: move iwl_dbg_tlv_free outside of debugfs ifdef
  wifi: iwlwifi: mvm: set properly mac header
  wifi: iwlwifi: mvm: revert gen2 TX A-MPDU size to 64
  wifi: iwlwifi: mvm: d3: fix WoWLAN command version lookup
  wifi: iwlwifi: mvm: fix a crash on 7265
  ...
====================

Link: https://lore.kernel.org/r/20240603115129.9494CC2BD10@smtp.kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents c6cab01d 819bda58
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ config ATH10K_SNOC
	depends on ATH10K
	depends on ARCH_QCOM || COMPILE_TEST
	depends on QCOM_SMEM
	depends on QCOM_RPROC_COMMON || QCOM_RPROC_COMMON=n
	select QCOM_SCM
	select QCOM_QMI_HELPERS
	help
+1 −1
Original line number Diff line number Diff line
@@ -604,7 +604,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
		.coldboot_cal_ftm = true,
		.cbcal_restart_fw = false,
		.fw_mem_mode = 0,
		.num_vdevs = 16 + 1,
		.num_vdevs = 3,
		.num_peers = 512,
		.supports_suspend = false,
		.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
+25 −13
Original line number Diff line number Diff line
@@ -7988,8 +7988,6 @@ ath11k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
	struct ath11k_base *ab = ar->ab;
	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
	int ret;
	struct cur_regulatory_info *reg_info;
	enum ieee80211_ap_reg_power power_type;

	mutex_lock(&ar->conf_mutex);

@@ -8000,17 +7998,6 @@ ath11k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
	if (ath11k_wmi_supports_6ghz_cc_ext(ar) &&
	    ctx->def.chan->band == NL80211_BAND_6GHZ &&
	    arvif->vdev_type == WMI_VDEV_TYPE_STA) {
		reg_info = &ab->reg_info_store[ar->pdev_idx];
		power_type = vif->bss_conf.power_type;

		ath11k_dbg(ab, ATH11K_DBG_MAC, "chanctx power type %d\n", power_type);

		if (power_type == IEEE80211_REG_UNSET_AP) {
			ret = -EINVAL;
			goto out;
		}

		ath11k_reg_handle_chan_list(ab, reg_info, power_type);
		arvif->chanctx = *ctx;
		ath11k_mac_parse_tx_pwr_env(ar, vif, ctx);
	}
@@ -9626,6 +9613,8 @@ static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
	struct ath11k *ar = hw->priv;
	struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
	struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
	enum ieee80211_ap_reg_power power_type;
	struct cur_regulatory_info *reg_info;
	struct ath11k_peer *peer;
	int ret = 0;

@@ -9705,6 +9694,29 @@ static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
				ath11k_warn(ar->ab, "Unable to authorize peer %pM vdev %d: %d\n",
					    sta->addr, arvif->vdev_id, ret);
		}

		if (!ret &&
		    ath11k_wmi_supports_6ghz_cc_ext(ar) &&
		    arvif->vdev_type == WMI_VDEV_TYPE_STA &&
		    arvif->chanctx.def.chan &&
		    arvif->chanctx.def.chan->band == NL80211_BAND_6GHZ) {
			reg_info = &ar->ab->reg_info_store[ar->pdev_idx];
			power_type = vif->bss_conf.power_type;

			if (power_type == IEEE80211_REG_UNSET_AP) {
				ath11k_warn(ar->ab, "invalid power type %d\n",
					    power_type);
				ret = -EINVAL;
			} else {
				ret = ath11k_reg_handle_chan_list(ar->ab,
								  reg_info,
								  power_type);
				if (ret)
					ath11k_warn(ar->ab,
						    "failed to handle chan list with power type %d\n",
						    power_type);
			}
		}
	} else if (old_state == IEEE80211_STA_AUTHORIZED &&
		   new_state == IEEE80211_STA_ASSOC) {
		spin_lock_bh(&ar->ab->base_lock);
+17 −8
Original line number Diff line number Diff line
@@ -561,6 +561,7 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base *ab)
{
	int i, j, n, ret, num_vectors = 0;
	u32 user_base_data = 0, base_vector = 0;
	struct ath11k_ext_irq_grp *irq_grp;
	unsigned long irq_flags;

	ret = ath11k_pcic_get_user_msi_assignment(ab, "DP", &num_vectors,
@@ -574,14 +575,16 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base *ab)
		irq_flags |= IRQF_NOBALANCING;

	for (i = 0; i < ATH11K_EXT_IRQ_GRP_NUM_MAX; i++) {
		struct ath11k_ext_irq_grp *irq_grp = &ab->ext_irq_grp[i];
		irq_grp = &ab->ext_irq_grp[i];
		u32 num_irq = 0;

		irq_grp->ab = ab;
		irq_grp->grp_id = i;
		irq_grp->napi_ndev = alloc_netdev_dummy(0);
		if (!irq_grp->napi_ndev)
			return -ENOMEM;
		if (!irq_grp->napi_ndev) {
			ret = -ENOMEM;
			goto fail_allocate;
		}

		netif_napi_add(irq_grp->napi_ndev, &irq_grp->napi,
			       ath11k_pcic_ext_grp_napi_poll);
@@ -606,11 +609,8 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base *ab)
			int irq = ath11k_pcic_get_msi_irq(ab, vector);

			if (irq < 0) {
				for (n = 0; n <= i; n++) {
					irq_grp = &ab->ext_irq_grp[n];
					free_netdev(irq_grp->napi_ndev);
				}
				return irq;
				ret = irq;
				goto fail_irq;
			}

			ab->irq_num[irq_idx] = irq;
@@ -635,6 +635,15 @@ static int ath11k_pcic_ext_irq_config(struct ath11k_base *ab)
	}

	return 0;
fail_irq:
	/* i ->napi_ndev was properly allocated. Free it also */
	i += 1;
fail_allocate:
	for (n = 0; n < i; n++) {
		irq_grp = &ab->ext_irq_grp[n];
		free_netdev(irq_grp->napi_ndev);
	}
	return ret;
}

int ath11k_pcic_config_irq(struct ath11k_base *ab)
+1 −1
Original line number Diff line number Diff line
@@ -1815,8 +1815,8 @@ struct iwl_drv *iwl_drv_start(struct iwl_trans *trans)
err_fw:
#ifdef CONFIG_IWLWIFI_DEBUGFS
	debugfs_remove_recursive(drv->dbgfs_drv);
	iwl_dbg_tlv_free(drv->trans);
#endif
	iwl_dbg_tlv_free(drv->trans);
	kfree(drv);
err:
	return ERR_PTR(ret);
Loading