Re: [PATCH v3] wifi: mt76: mt7928: Add debugfs for stats to provide debug purpose
kernel test robot <[email protected]>
| Newsgroups | dev.linux.lists.oe-kbuild-all,org.infradead.lists.linux-mediatek,org.kernel.vger.linux-wireless |
|---|---|
| Message-ID | <[email protected]> |
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/[email protected]/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 <[email protected]> | Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/ 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