Linux wireless drivers development
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Eason Lai <eason.lai@mediatek.com>, nbd@nbd.name, lorenzo@kernel.org
Cc: oe-kbuild-all@lists.linux.dev, linux-wireless@vger.kernel.org,
	linux-mediatek@lists.infradead.org, kun.wu@mediatek.com,
	deren.wu@mediatek.com, sean.wang@mediatek.com,
	quan.zhou@mediatek.com, ryder.lee@mediatek.com,
	leon.yen@mediatek.com, litien.chang@mediatek.com,
	jb.tsai@mediatek.com, michael.shih@mediatek.com,
	eason.lai@mediatek.com, kernel test robot <lkp@intel.com>
Subject: Re: [PATCH v3] wifi: mt76: mt7928: Add debugfs for stats to provide debug purpose
Date: Fri, 28 Aug 2026 15:39:48 +0800	[thread overview]
Message-ID: <202608281532.s7sXQ2Cc-lkp@intel.com> (raw)
In-Reply-To: <20260827084427.1624598-1-eason.lai@mediatek.com>

Hi Eason,

kernel test robot noticed the following build warnings:

[auto build test WARNING on wireless-next/main]
[also build test WARNING on linus/master next-20260826]
[cannot apply to wireless/main v7.2]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Eason-Lai/wifi-mt76-mt7928-Add-debugfs-for-stats-to-provide-debug-purpose/20260827-164427
base:   https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next.git main
patch link:    https://lore.kernel.org/r/20260827084427.1624598-1-eason.lai%40mediatek.com
patch subject: [PATCH v3] wifi: mt76: mt7928: Add debugfs for stats to provide debug purpose
config: sparc-randconfig-r073-20260828 (https://download.01.org/0day-ci/archive/20260828/202608281532.s7sXQ2Cc-lkp@intel.com/config)
compiler: sparc-linux-gcc (GCC) 14.3.0
smatch: v0.5.0-9187-g5189e3fb

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202608281532.s7sXQ2Cc-lkp@intel.com/

smatch warnings:
drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c:437 mt792x_stats() warn: inconsistent indenting
drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c:540 mt792x_stats() error: testing array offset 'band_idx' after use.

vim +437 drivers/net/wireless/mediatek/mt76/mt7925/debugfs.c

   415	
   416	static int mt792x_stats(struct seq_file *s, void *data)
   417	{
   418		s8 rssi = 0;
   419		u8 band_idx = 0;
   420		bool wtbl_rate_valid = false;
   421		int ret = 0;
   422		int i = 0;
   423		u32 stats_value = 0;
   424		u32 tx_link_speed_kbps = 0;
   425		u64 tx_total = 0;
   426		u64 tx_fail = 0;
   427		u64 tx_per = 0;
   428		u32 tx_per_rem = 0;
   429		/* UNI_CMD_MIB_DATA */
   430		u64 mib_values[ARRAY_SIZE(stats_query_mib_counters)];
   431		struct mt792x_dev *dev = dev_get_drvdata(s->private);
   432		struct mt7925_wtbl_rate wtbl_rate;
   433		struct mt7925_sta_stats *stats = NULL;
   434	
   435		band_idx = dev->mphy.band_idx;
   436	
 > 437		 stats = kzalloc(sizeof(*stats), GFP_KERNEL);
   438		if (!stats)
   439			return -ENOMEM;
   440	
   441		/* Get STA_STATS */
   442		mt792x_mutex_acquire(dev);
   443		ret = mt792x_mcu_get_stat(dev, stats);
   444		mt792x_mutex_release(dev);
   445		if (ret)
   446			goto out;
   447	
   448		/* Get MIB_STATS */
   449		mt792x_mutex_acquire(dev);
   450		ret = mt7925_mcu_get_mib_info(dev, band_idx, stats_query_mib_counters,
   451					      ARRAY_SIZE(stats_query_mib_counters), mib_values);
   452		mt792x_mutex_release(dev);
   453		if (ret)
   454			goto out;
   455	
   456		/* Get Link_Speed and RSSI */
   457		mt792x_mutex_acquire(dev);
   458		ret = mt7925_mcu_get_link_quality(dev, stats->bss_idx, &rssi, &tx_link_speed_kbps);
   459		mt792x_mutex_release(dev);
   460		if (ret)
   461			goto out;
   462	
   463		/* Get the firmware auto-rate table (best effort; do not abort the
   464		 * whole stats dump if the WTBL query is not available).
   465		 */
   466		mt792x_mutex_acquire(dev);
   467		if (!mt792x_mcu_get_wtbl_rate(dev, stats->wtbl_idx, &wtbl_rate))
   468			wtbl_rate_valid = true;
   469		mt792x_mutex_release(dev);
   470	
   471		/* Print STA_STATS info */
   472		seq_printf(s, "(STA) connected AP MAC Address = %pM\n", stats->mac_addr);
   473		seq_printf(s, "%-22s  BssIdx = [%u]\n", " ", stats->bss_idx);
   474		seq_printf(s, "%-22s  StaRecIdx = [%u]\n",
   475			   " ", stats->sta_idx);
   476		seq_printf(s, "%-22s  RSSI = %d\n", " ", rssi);
   477		seq_printf(s, "%-22s  Link_Speed = %u (kbit/s)\n", " ", tx_link_speed_kbps);
   478	
   479		seq_printf(s, "%-22s  temperature = %u\n",
   480			   " ", stats->temperature);
   481	
   482		stats_value = le32_to_cpu(stats->transmit_count) - le32_to_cpu(stats->transmit_fail_count);
   483		seq_printf(s, "%-22s  Tx success = %u\n",
   484			   " ", stats_value);
   485	
   486		stats_value = le32_to_cpu(stats->tx_fail_count) - le32_to_cpu(stats->tx_life_timeout_count);
   487		seq_printf(s, "%-22s  Tx fail to Rcv ACK after retry = %u\n",
   488			   " ", stats_value);
   489	
   490		seq_printf(s, "%-22s  Rx Mpdu = %u\n",
   491			   " ", le32_to_cpu(stats->mib[band_idx].rx_mpdu_cnt));
   492	
   493		seq_printf(s, "%-22s  Rx Fcs Error = %u (MPDU)\n",
   494			   " ", le32_to_cpu(stats->mib[band_idx].fcs_error));
   495		seq_printf(s, "%-22s  Rx FIFO full = %u (MPDU)\n",
   496			   " ", le32_to_cpu(stats->mib[band_idx].rx_fifo_full));
   497	
   498		for (i = 0; i < STAT_MIB_CNT_TRX_AGG_RANGE_MAX_NUM; i++)
   499			seq_printf(s, "%-22s  TRX_AGG_RANGE[%d] = %u (PPDU)\n",
   500				   " ", i, le32_to_cpu(stats->mib[band_idx].tx_range_ampdu_cnt[i]));
   501	
   502		seq_printf(s, "%-22s  MPDUs in AMPDUs transmitted = %u (MPDU)\n",
   503			   " ", le32_to_cpu(stats->mib[band_idx].ampdu_tx_sf_cnt));
   504		seq_printf(s, "%-22s  MPDUs in AMPDUs transmitted with ACK reply = %u (MPDU)\n",
   505			   " ", le32_to_cpu(stats->mib[band_idx].ampdu_tx_ack_sf_cnt));
   506		seq_printf(s, "%-22s  rate1_tx_cnt = %u\n",
   507			   " ", le32_to_cpu(stats->rate1_tx_cnt));
   508		seq_printf(s, "%-22s  rate1_fail_cnt = %u\n",
   509			   " ", le32_to_cpu(stats->rate1_fail_cnt));
   510		seq_printf(s, "%-22s  train_up = %u\n",
   511			   " ", le16_to_cpu(stats->train_up));
   512		seq_printf(s, "%-22s  train_down = %u\n",
   513			   " ", le16_to_cpu(stats->train_down));
   514		seq_printf(s, "%-22s  is_force_tx_stream = %u\n",
   515			   " ", stats->is_force_tx_stream);
   516		seq_printf(s, "%-22s  is_force_se_off = %u\n",
   517			   " ", stats->is_force_se_off);
   518		seq_printf(s, "%-22s  max_ampdu_factor = %u\n",
   519			   " ", stats->max_ampdu_factor);
   520		seq_printf(s, "%-22s  tx_rate_up_penalty = %u\n",
   521			   " ", stats->tx_rate_up_penalty);
   522		seq_printf(s, "%-22s  low_traffic_mode = %u\n",
   523			   " ", stats->low_traffic_mode);
   524		seq_printf(s, "%-22s  low_traffic_count = %u\n",
   525			   " ", stats->low_traffic_count);
   526		seq_printf(s, "%-22s  low_traffic_dashboard = %u\n",
   527			   " ", stats->low_traffic_dashboard);
   528		seq_printf(s, "%-22s  dynamic_sgi_state = %u\n",
   529			   " ", stats->dynamic_sgi_state);
   530		seq_printf(s, "%-22s  dynamic_sgi_score = %u\n",
   531			   " ", stats->dynamic_sgi_score);
   532		seq_printf(s, "%-22s  dynamic_bw_state = %u\n",
   533			   " ", stats->dynamic_bw_state);
   534		seq_printf(s, "%-22s  dynamic_gband_256qam_state = %u\n",
   535			   " ", stats->dynamic_gband_256qam_state);
   536		seq_printf(s, "%-22s  vht_non_sp_rate_state = %u\n",
   537			   " ", stats->vht_non_sp_rate_state);
   538	
   539		/* Decode the TX Vector BBP latch to show the current TX MCS rate */
 > 540		if (band_idx < MT7925_STA_STATS_BAND_NUM)
   541			mt7925_print_last_tx_rate(s, stats->tx_vector[band_idx].txv);
   542	
   543		/* Dump the whole firmware auto-rate table and mark the entry currently */
   544		if (wtbl_rate_valid)
   545			mt7925_dump_auto_rate_table(s, &wtbl_rate);
   546	
   547		seq_puts(s, "\nmib state:\n");
   548		/* ===Rx Related Counters=== */
   549		seq_puts(s, "=== Rx Related Counters ===\n");
   550		seq_printf(s, "%-22s  Rx with CRC = %llu (MPDU)\n",
   551			   " ", mib_values[QUERY_MIB_CNT_RX_FCS_ERR]);
   552		seq_printf(s, "%-22s  Rx drop due to out of resource = %llu (MPDU)\n",
   553			   " ", mib_values[QUERY_MIB_CNT_RX_FIFO_OVERFLOW]);
   554		seq_printf(s, "%-22s  Rx Mpdu = %llu (MPDU)\n",
   555			   " ", mib_values[QUERY_MIB_CNT_RX_MPDU]);
   556		seq_printf(s, "%-22s  Rx AMpdu = %llu (PPDU)\n",
   557			   " ", mib_values[QUERY_MIB_CNT_AMPDU_RX_COUNT]);
   558		seq_printf(s, "%-22s  Rx PF Drop = %llu (MPDU)\n",
   559			   " ", mib_values[QUERY_MIB_CNT_PF_DROP]);
   560		seq_printf(s, "%-22s  Rx Len Mismatch = %llu (PPDU)\n",
   561			   " ", mib_values[QUERY_MIB_CNT_LEN_MISMATCH]);
   562	
   563		/* ===Phy/Timing Related Counters=== */
   564		seq_puts(s, "\n=== Phy/Timing Related Counters ===\n");
   565		seq_printf(s, "%-22s  ChannelIdleCnt = %llu\n",
   566			   " ", mib_values[QUERY_MIB_CNT_CHANNEL_IDLE]);
   567		seq_printf(s, "%-22s  CCA_NAV_Tx_Time = %llu\n",
   568			   " ", mib_values[QUERY_MIB_CNT_CCA_NAV_TX_TIME]);
   569		seq_printf(s, "%-22s  Rx_MDRDY_CNT = %llu (PPDU)\n",
   570			   " ", mib_values[QUERY_MIB_CNT_MDRDY]);
   571		seq_printf(s, "%-22s  CCK_MDRDY = %llu\n",
   572			   " ", mib_values[QUERY_MIB_CNT_RX_CCK_MDRDY_TIME]);
   573		seq_printf(s, "%-22s  OFDM_MDRDY = %llu\n",
   574			   " ", mib_values[QUERY_MIB_CNT_RX_OFDM_LG_MIXED_MDRDY_TIME]);
   575		seq_printf(s, "%-22s  OFDM_GREEN_MDRDY = %llu\n",
   576			   " ", mib_values[QUERY_MIB_CNT_RX_OFDM_GREEN_MDRDY_TIME]);
   577		seq_printf(s, "%-22s  Prim CCA Time = %llu\n",
   578			   " ", mib_values[QUERY_MIB_CNT_P_CCA_TIME]);
   579		seq_printf(s, "%-22s  Sec CCA Time = %llu\n",
   580			   " ", mib_values[QUERY_MIB_CNT_S_CCA_TIME]);
   581		seq_printf(s, "%-22s  Prim ED Time = %llu\n",
   582			   " ", mib_values[QUERY_MIB_CNT_P_ED_TIME]);
   583	
   584		/* ===Tx Related Counters(Generic)=== */
   585		seq_puts(s, "\n=== Tx Related Counters(Generic) ===\n");
   586		seq_printf(s, "%-22s  BeaconTxCnt = %llu\n",
   587			   " ", mib_values[QUERY_MIB_CNT_BCN_TX]);
   588		seq_printf(s, "%-22s  Tx 40MHz Cnt = %llu  (MPDU)\n",
   589			   " ", mib_values[QUERY_MIB_CNT_TX_BW_40MHZ]);
   590		seq_printf(s, "%-22s  Tx 80MHz Cnt = %llu  (MPDU)\n",
   591			   " ", mib_values[QUERY_MIB_CNT_TX_BW_80MHZ]);
   592		seq_printf(s, "%-22s  Tx 160MHz Cnt = %llu  (MPDU)\n",
   593			   " ", mib_values[QUERY_MIB_CNT_TX_BW_160MHZ]);
   594	
   595		/* ===BSSID[0] Related Counters=== */
   596		seq_puts(s, "\n=== BSSID[0] Related Counters ===\n");
   597		seq_printf(s, "%-22s  BA Miss Cnt = %llu  (PPDU)\n",
   598			   " ", mib_values[QUERY_MIB_CNT_BSS0_BA_MISS]);
   599		seq_printf(s, "%-22s  RTS Tx Cnt = %llu  (MPDU)\n",
   600			   " ", mib_values[QUERY_MIB_CNT_BSS0_RTS_TX_CNT]);
   601		seq_printf(s, "%-22s  Frame Retry Cnt = %llu (MPDU)\n",
   602			   " ", mib_values[QUERY_MIB_CNT_BSS0_FRAME_RETRY]);
   603		seq_printf(s, "%-22s  Frame Retry 2 Cnt = %llu (MPDU)\n",
   604			   " ", mib_values[QUERY_MIB_CNT_BSS0_FRAME_RETRY_2]);
   605		seq_printf(s, "%-22s  RTS Retry Cnt = %llu (MPDU)\n",
   606			   " ", mib_values[QUERY_MIB_CNT_BSS0_RTS_RETRY]);
   607		seq_printf(s, "%-22s  Ack Failed Cnt = %llu (PPDU)\n",
   608			   " ", mib_values[QUERY_MIB_CNT_BSS0_ACK_FAIL]);
   609	
   610		/* ===AMPDU Related Counters=== */
   611		seq_puts(s, "\n=== AMPDU Related Counters ===\n");
   612		seq_printf(s, "%-22s  Tx AMPDU_Pkt_Cnt = %llu  (PPDU)\n",
   613			   " ", mib_values[QUERY_MIB_CNT_AMPDU]);
   614		seq_printf(s, "%-22s  Tx AMPDU_MPDU_Pkt_Cnt = %llu  (MPDU)\n",
   615			   " ", mib_values[QUERY_MIB_CNT_AMPDU_MPDU]);
   616		seq_printf(s, "%-22s  AMPDU Tx success = %llu (MPDU)\n",
   617			   " ", mib_values[QUERY_MIB_CNT_AMPDU_ACKED]);
   618	
   619		tx_total = mib_values[QUERY_MIB_CNT_AMPDU_MPDU];
   620		tx_fail =  mib_values[QUERY_MIB_CNT_AMPDU_MPDU] - mib_values[QUERY_MIB_CNT_AMPDU_ACKED];
   621		tx_per = tx_total == 0 ? 0 : div64_u64(1000 * tx_fail, tx_total);
   622		seq_printf(s, "%-22s  AMPDU Tx fail count   = %llu  (MPDU), PER=%llu.%1llu%%\n",
   623			   " ",
   624			   tx_fail,
   625			   div_u64_rem(tx_per, 10, &tx_per_rem), (u64)tx_per_rem);
   626	
   627	out:
   628		kfree(stats);
   629		return ret;
   630	}
   631	

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

      reply	other threads:[~2026-08-28  7:40 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-08-24  3:07 [PATCH v1] wifi: mt76: mt7928: Add debugfs for stats to provide debug purpose Eason Lai
2026-08-25  4:00 ` kernel test robot
2026-08-25  7:55 ` kernel test robot
2026-08-27  5:54 ` [PATCH v2] " Eason Lai
2026-08-27  8:44   ` [PATCH v3] " Eason Lai
2026-08-28  7:39     ` kernel test robot [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=202608281532.s7sXQ2Cc-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=deren.wu@mediatek.com \
    --cc=eason.lai@mediatek.com \
    --cc=jb.tsai@mediatek.com \
    --cc=kun.wu@mediatek.com \
    --cc=leon.yen@mediatek.com \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=litien.chang@mediatek.com \
    --cc=lorenzo@kernel.org \
    --cc=michael.shih@mediatek.com \
    --cc=nbd@nbd.name \
    --cc=oe-kbuild-all@lists.linux.dev \
    --cc=quan.zhou@mediatek.com \
    --cc=ryder.lee@mediatek.com \
    --cc=sean.wang@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox