Re: [PATCH 07/12] wifi: ath12k: Cache vdev configs before vdev create

Jeff Johnson
2024-01-12T17:24:05Z

On 1/10/2024 8:50 PM, Sriram R wrote:
> Since the vdev create for a corresponding vif is deferred
> until a channel is assigned, cache the information which
> are received through mac80211 ops between add_interface()
> and assign_vif_chanctx() and set them once the vdev is
> created on one of the ath12k radios as the channel gets
> assigned via assign_vif_chanctx().
>
> Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.0.1-00029-QCAHKSWPL_SILICONZ-1
> Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3
>
> Signed-off-by: Sriram R <quic_srirrama@quicinc.com>
> ---
...
> +static int ath12k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
> + struct ieee80211_vif *vif, struct ieee80211_sta *sta,
> + struct ieee80211_key_conf *key)
> +{
> + struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
> + struct ath12k *ar;
> + struct ath12k_vif *arvif = ath12k_vif_to_arvif(vif);
> + int ret;
> +
> + /* BIP needs to be done in software */
> + if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
> + key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
> + key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256 ||
> + key->cipher == WLAN_CIPHER_SUITE_BIP_CMAC_256)
> + return 1;

I know this in the existing code, but what is the significance of
returning 1? Should this be returning a -errno like the error cases that
follow?

> +
> + if (key->keyidx > WMI_MAX_KEY_INDEX)
> + return -ENOSPC;
> +
> + mutex_lock(&ah->conf_mutex);
> +
> + ar = ath12k_get_ar_by_vif(hw, vif);
> + if (!ar) {
> + /* ar is expected to be valid when sta ptr is available */
> + if (sta) {
> + mutex_unlock(&ah->conf_mutex);
> + WARN_ON_ONCE(1);
> + return -EINVAL;
> + }
> + arvif->cache.key_conf.cmd = cmd;
> + arvif->cache.key_conf.key = key;
> + arvif->cache.key_conf.changed = true;
> + mutex_unlock(&ah->conf_mutex);
> + return 0;
> + }
> +
> + mutex_lock(&ar->conf_mutex);
> + ret = ath12k_mac_set_key(ar, cmd, vif, sta, key);
> mutex_unlock(&ar->conf_mutex);
> +
> mutex_unlock(&ah->conf_mutex);
> return ret;
> }