| .. | .. |
|---|
| 426 | 426 | } |
|---|
| 427 | 427 | } |
|---|
| 428 | 428 | |
|---|
| 429 | + spin_lock(&edev->stats_lock); |
|---|
| 430 | + |
|---|
| 429 | 431 | for (i = 0; i < QEDE_NUM_STATS; i++) { |
|---|
| 430 | 432 | if (qede_is_irrelevant_stat(edev, i)) |
|---|
| 431 | 433 | continue; |
|---|
| .. | .. |
|---|
| 434 | 436 | |
|---|
| 435 | 437 | buf++; |
|---|
| 436 | 438 | } |
|---|
| 439 | + |
|---|
| 440 | + spin_unlock(&edev->stats_lock); |
|---|
| 437 | 441 | |
|---|
| 438 | 442 | __qede_unlock(edev); |
|---|
| 439 | 443 | } |
|---|
| .. | .. |
|---|
| 815 | 819 | |
|---|
| 816 | 820 | coal->rx_coalesce_usecs = rx_coal; |
|---|
| 817 | 821 | coal->tx_coalesce_usecs = tx_coal; |
|---|
| 822 | + coal->stats_block_coalesce_usecs = edev->stats_coal_usecs; |
|---|
| 818 | 823 | |
|---|
| 819 | 824 | return rc; |
|---|
| 820 | 825 | } |
|---|
| .. | .. |
|---|
| 826 | 831 | struct qede_fastpath *fp; |
|---|
| 827 | 832 | int i, rc = 0; |
|---|
| 828 | 833 | u16 rxc, txc; |
|---|
| 834 | + |
|---|
| 835 | + if (edev->stats_coal_usecs != coal->stats_block_coalesce_usecs) { |
|---|
| 836 | + edev->stats_coal_usecs = coal->stats_block_coalesce_usecs; |
|---|
| 837 | + if (edev->stats_coal_usecs) { |
|---|
| 838 | + edev->stats_coal_ticks = usecs_to_jiffies(edev->stats_coal_usecs); |
|---|
| 839 | + schedule_delayed_work(&edev->periodic_task, 0); |
|---|
| 840 | + |
|---|
| 841 | + DP_INFO(edev, "Configured stats coal ticks=%lu jiffies\n", |
|---|
| 842 | + edev->stats_coal_ticks); |
|---|
| 843 | + } else { |
|---|
| 844 | + cancel_delayed_work_sync(&edev->periodic_task); |
|---|
| 845 | + } |
|---|
| 846 | + } |
|---|
| 829 | 847 | |
|---|
| 830 | 848 | if (!netif_running(dev)) { |
|---|
| 831 | 849 | DP_INFO(edev, "Interface is down\n"); |
|---|
| .. | .. |
|---|
| 2106 | 2124 | } |
|---|
| 2107 | 2125 | |
|---|
| 2108 | 2126 | static const struct ethtool_ops qede_ethtool_ops = { |
|---|
| 2109 | | - .supported_coalesce_params = ETHTOOL_COALESCE_USECS, |
|---|
| 2127 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS | |
|---|
| 2128 | + ETHTOOL_COALESCE_STATS_BLOCK_USECS, |
|---|
| 2110 | 2129 | .get_link_ksettings = qede_get_link_ksettings, |
|---|
| 2111 | 2130 | .set_link_ksettings = qede_set_link_ksettings, |
|---|
| 2112 | 2131 | .get_drvinfo = qede_get_drvinfo, |
|---|
| .. | .. |
|---|
| 2155 | 2174 | }; |
|---|
| 2156 | 2175 | |
|---|
| 2157 | 2176 | static const struct ethtool_ops qede_vf_ethtool_ops = { |
|---|
| 2158 | | - .supported_coalesce_params = ETHTOOL_COALESCE_USECS, |
|---|
| 2177 | + .supported_coalesce_params = ETHTOOL_COALESCE_USECS | |
|---|
| 2178 | + ETHTOOL_COALESCE_STATS_BLOCK_USECS, |
|---|
| 2159 | 2179 | .get_link_ksettings = qede_get_link_ksettings, |
|---|
| 2160 | 2180 | .get_drvinfo = qede_get_drvinfo, |
|---|
| 2161 | 2181 | .get_msglevel = qede_get_msglevel, |
|---|