diff mbox series

wifi: mt76: mt7915: split mcu chan_mib array up

Message ID 51130dcbc200962672540cb726dd9841c5ad7fe9.1670049959.git.ryder.lee@mediatek.com (mailing list archive)
State Changes Requested
Delegated to: Felix Fietkau
Headers show
Series wifi: mt76: mt7915: split mcu chan_mib array up | expand

Commit Message

Ryder Lee Dec. 3, 2022, 7:37 a.m. UTC
The current flow confuses coverity check that leads to false reporting,
so split the offs[] into two pieces according to chipset revision to
silence coverity tool.

Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
---
 .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 50 ++++++++++---------
 1 file changed, 27 insertions(+), 23 deletions(-)

Comments

AngeloGioacchino Del Regno Dec. 5, 2022, 2:29 p.m. UTC | #1
Il 03/12/22 08:37, Ryder Lee ha scritto:
> The current flow confuses coverity check that leads to false reporting,
> so split the offs[] into two pieces according to chipset revision to
> silence coverity tool.
> 
> Signed-off-by: Ryder Lee <ryder.lee@mediatek.com>
> ---
>   .../net/wireless/mediatek/mt76/mt7915/mcu.c   | 50 ++++++++++---------
>   1 file changed, 27 insertions(+), 23 deletions(-)
> 
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> index b2652de082ba..ca315af3905b 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
> @@ -2974,38 +2974,42 @@ int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)
>   
>   int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
>   {
> -	/* strict order */
> -	static const u32 offs[] = {
> -		MIB_NON_WIFI_TIME,
> -		MIB_TX_TIME,
> -		MIB_RX_TIME,
> -		MIB_OBSS_AIRTIME,
> -		MIB_TXOP_INIT_COUNT,
> -		/* v2 */
> -		MIB_NON_WIFI_TIME_V2,
> -		MIB_TX_TIME_V2,
> -		MIB_RX_TIME_V2,
> -		MIB_OBSS_AIRTIME_V2
> -	};
>   	struct mt76_channel_state *state = phy->mt76->chan_state;
>   	struct mt76_channel_state *state_ts = &phy->state_ts;
>   	struct mt7915_dev *dev = phy->dev;
>   	struct mt7915_mcu_mib *res, req[5];
>   	struct sk_buff *skb;
> -	int i, ret, start = 0, ofs = 20;
> +	static const u32 *offs;
> +	int i, ret, len, offs_cc;
>   	u64 cc_tx;
>   

A more readable option would be

	/* strict order */
	static const u32 chip_offs_v1[] = {
		MIB_NON_WIFI_TIME,
		MIB_TX_TIME,
		MIB_RX_TIME,
		MIB_OBSS_AIRTIME,
		MIB_TXOP_INIT_COUNT,
	};

	static const u32 chip_offs_v2[] = {
		MIB_NON_WIFI_TIME_V2,
		MIB_TX_TIME_V2,
		MIB_RX_TIME_V2,
		MIB_OBSS_AIRTIME_V2
	};

	if (is_mt7915(&dev->mt76)) {
		len = ARRAY_SIZE(chip_offs_v1);
		offs = chip_offs_v1;
		offs_cc = 20;
	} else {
		len = ARRAY_SIZE(chip_offs_v2);
		offs = chip_offs_v2;
		offs_cc = 20;
	}

Regards,
Angelo
diff mbox series

Patch

diff --git a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
index b2652de082ba..ca315af3905b 100644
--- a/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
+++ b/drivers/net/wireless/mediatek/mt76/mt7915/mcu.c
@@ -2974,38 +2974,42 @@  int mt7915_mcu_apply_tx_dpd(struct mt7915_phy *phy)
 
 int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
 {
-	/* strict order */
-	static const u32 offs[] = {
-		MIB_NON_WIFI_TIME,
-		MIB_TX_TIME,
-		MIB_RX_TIME,
-		MIB_OBSS_AIRTIME,
-		MIB_TXOP_INIT_COUNT,
-		/* v2 */
-		MIB_NON_WIFI_TIME_V2,
-		MIB_TX_TIME_V2,
-		MIB_RX_TIME_V2,
-		MIB_OBSS_AIRTIME_V2
-	};
 	struct mt76_channel_state *state = phy->mt76->chan_state;
 	struct mt76_channel_state *state_ts = &phy->state_ts;
 	struct mt7915_dev *dev = phy->dev;
 	struct mt7915_mcu_mib *res, req[5];
 	struct sk_buff *skb;
-	int i, ret, start = 0, ofs = 20;
+	static const u32 *offs;
+	int i, ret, len, offs_cc;
 	u64 cc_tx;
 
-	if (!is_mt7915(&dev->mt76)) {
-		start = 5;
-		ofs = 0;
+	/* strict order */
+	if (is_mt7915(&dev->mt76)) {
+		static const u32 chip_offs[] = {
+			MIB_NON_WIFI_TIME,
+			MIB_TX_TIME,
+			MIB_RX_TIME,
+			MIB_OBSS_AIRTIME,
+			MIB_TXOP_INIT_COUNT,
+		};
+		len = ARRAY_SIZE(chip_offs);
+		offs = chip_offs;
+		offs_cc = 20;
+	} else {
+		static const u32 chip_offs[] = {
+			MIB_NON_WIFI_TIME_V2,
+			MIB_TX_TIME_V2,
+			MIB_RX_TIME_V2,
+			MIB_OBSS_AIRTIME_V2
+		};
+		len = ARRAY_SIZE(chip_offs);
+		offs = chip_offs;
+		offs_cc = 0;
 	}
 
-	for (i = 0; i < 5; i++) {
+	for (i = 0; i < len; i++) {
 		req[i].band = cpu_to_le32(phy->mt76->band_idx);
-		req[i].offs = cpu_to_le32(offs[i + start]);
-
-		if (!is_mt7915(&dev->mt76) && i == 3)
-			break;
+		req[i].offs = cpu_to_le32(offs[i]);
 	}
 
 	ret = mt76_mcu_send_and_get_msg(&dev->mt76, MCU_EXT_CMD(GET_MIB_INFO),
@@ -3013,7 +3017,7 @@  int mt7915_mcu_get_chan_mib_info(struct mt7915_phy *phy, bool chan_switch)
 	if (ret)
 		return ret;
 
-	res = (struct mt7915_mcu_mib *)(skb->data + ofs);
+	res = (struct mt7915_mcu_mib *)(skb->data + offs_cc);
 
 #define __res_u64(s) le64_to_cpu(res[s].data)
 	/* subtract Tx backoff time from Tx duration */