Message ID | 20250522200519.16858-1-rodrigo.gobbi.7@gmail.com |
---|---|
State | New |
Headers | show |
Series | [ath-next,v3] wifi: ath11k: validate ath11k_crypto_mode on top of ath11k_core_qmi_firmware_ready | expand |
On 5/23/2025 4:01 AM, Rodrigo Gobbi wrote: > if ath11k_crypto_mode is invalid (not ATH11K_CRYPT_MODE_SW/ATH11K_CRYPT_MODE_HW), > ath11k_core_qmi_firmware_ready() will not undo some actions that was previously > started/configured. Do the validation as soon as possible in order to avoid > undoing actions in that case and also to fix the following smatch warning: > > drivers/net/wireless/ath/ath11k/core.c:2166 ath11k_core_qmi_firmware_ready() > warn: missing unwind goto? > > Signed-off-by: Rodrigo Gobbi <rodrigo.gobbi.7@gmail.com> > --- > Changelog: > v3: move validation to the beginning of the ath11k_core_qmi_firmware_ready(), so > we do not need to clean-up things. A small change over the commit msg due that change. > v2: https://lore.kernel.org/linux-wireless/20250515222520.4922-1-rodrigo.gobbi.7@gmail.com/#t > v1: https://lore.kernel.org/linux-wireless/20250515004258.87234-1-rodrigo.gobbi.7@gmail.com/ > --- > drivers/net/wireless/ath/ath11k/core.c | 28 +++++++++++++------------- > 1 file changed, 14 insertions(+), 14 deletions(-) > > diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c > index 2e9f8a5e61e4..b894e27435da 100644 > --- a/drivers/net/wireless/ath/ath11k/core.c > +++ b/drivers/net/wireless/ath/ath11k/core.c > @@ -2134,6 +2134,20 @@ int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab) > { > int ret; > > + switch (ath11k_crypto_mode) { > + case ATH11K_CRYPT_MODE_SW: > + set_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); > + set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); > + break; > + case ATH11K_CRYPT_MODE_HW: > + clear_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); > + clear_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); > + break; > + default: > + ath11k_info(ab, "invalid crypto_mode: %d\n", ath11k_crypto_mode); > + return -EINVAL; > + } > + > ret = ath11k_core_start_firmware(ab, ab->fw_mode); > if (ret) { > ath11k_err(ab, "failed to start firmware: %d\n", ret); > @@ -2152,20 +2166,6 @@ int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab) > goto err_firmware_stop; > } > > - switch (ath11k_crypto_mode) { > - case ATH11K_CRYPT_MODE_SW: > - set_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); > - set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); > - break; > - case ATH11K_CRYPT_MODE_HW: > - clear_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); > - clear_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); > - break; > - default: > - ath11k_info(ab, "invalid crypto_mode: %d\n", ath11k_crypto_mode); > - return -EINVAL; > - } > - > if (ath11k_frame_mode == ATH11K_HW_TXRX_RAW) > set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); > Reviewed-by: Baochen Qiang <quic_bqiang@quicinc.com>
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c index 2e9f8a5e61e4..b894e27435da 100644 --- a/drivers/net/wireless/ath/ath11k/core.c +++ b/drivers/net/wireless/ath/ath11k/core.c @@ -2134,6 +2134,20 @@ int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab) { int ret; + switch (ath11k_crypto_mode) { + case ATH11K_CRYPT_MODE_SW: + set_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); + set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); + break; + case ATH11K_CRYPT_MODE_HW: + clear_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); + clear_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); + break; + default: + ath11k_info(ab, "invalid crypto_mode: %d\n", ath11k_crypto_mode); + return -EINVAL; + } + ret = ath11k_core_start_firmware(ab, ab->fw_mode); if (ret) { ath11k_err(ab, "failed to start firmware: %d\n", ret); @@ -2152,20 +2166,6 @@ int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab) goto err_firmware_stop; } - switch (ath11k_crypto_mode) { - case ATH11K_CRYPT_MODE_SW: - set_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); - set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); - break; - case ATH11K_CRYPT_MODE_HW: - clear_bit(ATH11K_FLAG_HW_CRYPTO_DISABLED, &ab->dev_flags); - clear_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags); - break; - default: - ath11k_info(ab, "invalid crypto_mode: %d\n", ath11k_crypto_mode); - return -EINVAL; - } - if (ath11k_frame_mode == ATH11K_HW_TXRX_RAW) set_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags);
if ath11k_crypto_mode is invalid (not ATH11K_CRYPT_MODE_SW/ATH11K_CRYPT_MODE_HW), ath11k_core_qmi_firmware_ready() will not undo some actions that was previously started/configured. Do the validation as soon as possible in order to avoid undoing actions in that case and also to fix the following smatch warning: drivers/net/wireless/ath/ath11k/core.c:2166 ath11k_core_qmi_firmware_ready() warn: missing unwind goto? Signed-off-by: Rodrigo Gobbi <rodrigo.gobbi.7@gmail.com> --- Changelog: v3: move validation to the beginning of the ath11k_core_qmi_firmware_ready(), so we do not need to clean-up things. A small change over the commit msg due that change. v2: https://lore.kernel.org/linux-wireless/20250515222520.4922-1-rodrigo.gobbi.7@gmail.com/#t v1: https://lore.kernel.org/linux-wireless/20250515004258.87234-1-rodrigo.gobbi.7@gmail.com/ --- drivers/net/wireless/ath/ath11k/core.c | 28 +++++++++++++------------- 1 file changed, 14 insertions(+), 14 deletions(-)