mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 15:12:13 +02:00
wifi: ath12k: don't put ieee80211_chanctx_conf struct in ath12k_link_vif
ieee80211_chanctx_conf struct is not put at the end of ath12k_link_vif. Note ieee80211_chanctx_conf has flexible array member inside it, causing below warning with GCC-14: drivers/net/wireless/ath/ath12k/core.h:298:39: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end] Although there is no issue for now since the array is not getting used, this should be fixed to avoid any potential data corruption issue in the future. Remove this struct from ath12k_link_vif, fetch it from ieee80211_bss_conf instead when needed. This change only applies to WCN7850, and should has no impact on other chipsets. This is an alternative to the solution proposed in [1]. Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3 Reported-by: Gustavo A. R. Silva <gustavoars@kernel.org> Closes: https://msgid.link/Z8-Snz86Xfwdlyd7@kspp # [1] Signed-off-by: Baochen Qiang <quic_bqiang@quicinc.com> Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com> Link: https://patch.msgid.link/20250321-ath12k-dont-put-chanctx-in-arvif-v1-1-c8e93061952b@quicinc.com Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
This commit is contained in:
parent
47c91531ed
commit
ce0779378c
|
|
@ -295,7 +295,6 @@ struct ath12k_link_vif {
|
|||
int txpower;
|
||||
bool rsnie_present;
|
||||
bool wpaie_present;
|
||||
struct ieee80211_chanctx_conf chanctx;
|
||||
u8 vdev_stats_id;
|
||||
u32 punct_bitmap;
|
||||
u8 link_id;
|
||||
|
|
|
|||
|
|
@ -9550,16 +9550,26 @@ static int ath12k_start_vdev_delay(struct ath12k *ar,
|
|||
struct ath12k_base *ab = ar->ab;
|
||||
struct ath12k_vif *ahvif = arvif->ahvif;
|
||||
struct ieee80211_vif *vif = ath12k_ahvif_to_vif(arvif->ahvif);
|
||||
struct ieee80211_chanctx_conf *chanctx;
|
||||
struct ieee80211_bss_conf *link_conf;
|
||||
int ret;
|
||||
|
||||
if (WARN_ON(arvif->is_started))
|
||||
return -EBUSY;
|
||||
|
||||
ret = ath12k_mac_vdev_start(arvif, &arvif->chanctx);
|
||||
link_conf = ath12k_mac_get_link_bss_conf(arvif);
|
||||
if (!link_conf) {
|
||||
ath12k_warn(ab, "failed to get link conf for vdev %u\n", arvif->vdev_id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
chanctx = wiphy_dereference(ath12k_ar_to_hw(arvif->ar)->wiphy,
|
||||
link_conf->chanctx_conf);
|
||||
ret = ath12k_mac_vdev_start(arvif, chanctx);
|
||||
if (ret) {
|
||||
ath12k_warn(ab, "failed to start vdev %i addr %pM on freq %d: %d\n",
|
||||
arvif->vdev_id, vif->addr,
|
||||
arvif->chanctx.def.chan->center_freq, ret);
|
||||
chanctx->def.chan->center_freq, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -9622,7 +9632,6 @@ ath12k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw,
|
|||
ahvif->vdev_type != WMI_VDEV_TYPE_AP &&
|
||||
ahvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
|
||||
!ath12k_peer_exist_by_vdev_id(ab, arvif->vdev_id)) {
|
||||
memcpy(&arvif->chanctx, ctx, sizeof(*ctx));
|
||||
ret = 0;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user