.. | .. |
---|
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, |
---|