Commit 615466ce authored by Yufeng Mo's avatar Yufeng Mo Committed by David S. Miller

net: hns3: refine MAC pause statistics querying function

This patch refines the interface for querying MAC pause
statistics, and adds structure hns3_mac_stats to keep the
count of TX & RX.
Signed-off-by: default avatarYufeng Mo <moyufeng@huawei.com>
Reviewed-by: default avatarPeng Li <lipeng321@huawei.com>
Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent dec84660
...@@ -91,6 +91,11 @@ struct hnae3_queue { ...@@ -91,6 +91,11 @@ struct hnae3_queue {
u16 rx_desc_num;/* total number of rx desc */ u16 rx_desc_num;/* total number of rx desc */
}; };
struct hns3_mac_stats {
u64 tx_pause_cnt;
u64 rx_pause_cnt;
};
/*hnae3 loop mode*/ /*hnae3 loop mode*/
enum hnae3_loop { enum hnae3_loop {
HNAE3_LOOP_APP, HNAE3_LOOP_APP,
...@@ -298,6 +303,8 @@ struct hnae3_ae_dev { ...@@ -298,6 +303,8 @@ struct hnae3_ae_dev {
* Remove multicast address from mac table * Remove multicast address from mac table
* update_stats() * update_stats()
* Update Old network device statistics * Update Old network device statistics
* get_mac_stats()
* get mac pause statistics including tx_cnt and rx_cnt
* get_ethtool_stats() * get_ethtool_stats()
* Get ethtool network device statistics * Get ethtool network device statistics
* get_strings() * get_strings()
...@@ -426,8 +433,8 @@ struct hnae3_ae_ops { ...@@ -426,8 +433,8 @@ struct hnae3_ae_ops {
void (*update_stats)(struct hnae3_handle *handle, void (*update_stats)(struct hnae3_handle *handle,
struct net_device_stats *net_stats); struct net_device_stats *net_stats);
void (*get_stats)(struct hnae3_handle *handle, u64 *data); void (*get_stats)(struct hnae3_handle *handle, u64 *data);
void (*get_mac_pause_stats)(struct hnae3_handle *handle, u64 *tx_cnt, void (*get_mac_stats)(struct hnae3_handle *handle,
u64 *rx_cnt); struct hns3_mac_stats *mac_stats);
void (*get_strings)(struct hnae3_handle *handle, void (*get_strings)(struct hnae3_handle *handle,
u32 stringset, u8 *data); u32 stringset, u8 *data);
int (*get_sset_count)(struct hnae3_handle *handle, int stringset); int (*get_sset_count)(struct hnae3_handle *handle, int stringset);
......
...@@ -1726,15 +1726,12 @@ static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev) ...@@ -1726,15 +1726,12 @@ static bool hns3_get_tx_timeo_queue_info(struct net_device *ndev)
/* When mac received many pause frames continuous, it's unable to send /* When mac received many pause frames continuous, it's unable to send
* packets, which may cause tx timeout * packets, which may cause tx timeout
*/ */
if (h->ae_algo->ops->update_stats && if (h->ae_algo->ops->get_mac_stats) {
h->ae_algo->ops->get_mac_pause_stats) { struct hns3_mac_stats mac_stats;
u64 tx_pause_cnt, rx_pause_cnt;
h->ae_algo->ops->update_stats(h, &ndev->stats); h->ae_algo->ops->get_mac_stats(h, &mac_stats);
h->ae_algo->ops->get_mac_pause_stats(h, &tx_pause_cnt,
&rx_pause_cnt);
netdev_info(ndev, "tx_pause_cnt: %llu, rx_pause_cnt: %llu\n", netdev_info(ndev, "tx_pause_cnt: %llu, rx_pause_cnt: %llu\n",
tx_pause_cnt, rx_pause_cnt); mac_stats.tx_pause_cnt, mac_stats.rx_pause_cnt);
} }
hw_head = readl_relaxed(tx_ring->tqp->io_base + hw_head = readl_relaxed(tx_ring->tqp->io_base +
......
...@@ -750,14 +750,16 @@ static void hclge_get_stats(struct hnae3_handle *handle, u64 *data) ...@@ -750,14 +750,16 @@ static void hclge_get_stats(struct hnae3_handle *handle, u64 *data)
p = hclge_tqps_get_stats(handle, p); p = hclge_tqps_get_stats(handle, p);
} }
static void hclge_get_mac_pause_stat(struct hnae3_handle *handle, u64 *tx_cnt, static void hclge_get_mac_stat(struct hnae3_handle *handle,
u64 *rx_cnt) struct hns3_mac_stats *mac_stats)
{ {
struct hclge_vport *vport = hclge_get_vport(handle); struct hclge_vport *vport = hclge_get_vport(handle);
struct hclge_dev *hdev = vport->back; struct hclge_dev *hdev = vport->back;
*tx_cnt = hdev->hw_stats.mac_stats.mac_tx_mac_pause_num; hclge_update_stats(handle, NULL);
*rx_cnt = hdev->hw_stats.mac_stats.mac_rx_mac_pause_num;
mac_stats->tx_pause_cnt = hdev->hw_stats.mac_stats.mac_tx_mac_pause_num;
mac_stats->rx_pause_cnt = hdev->hw_stats.mac_stats.mac_rx_mac_pause_num;
} }
static int hclge_parse_func_status(struct hclge_dev *hdev, static int hclge_parse_func_status(struct hclge_dev *hdev,
...@@ -9798,7 +9800,7 @@ static const struct hnae3_ae_ops hclge_ops = { ...@@ -9798,7 +9800,7 @@ static const struct hnae3_ae_ops hclge_ops = {
.set_mtu = hclge_set_mtu, .set_mtu = hclge_set_mtu,
.reset_queue = hclge_reset_tqp, .reset_queue = hclge_reset_tqp,
.get_stats = hclge_get_stats, .get_stats = hclge_get_stats,
.get_mac_pause_stats = hclge_get_mac_pause_stat, .get_mac_stats = hclge_get_mac_stat,
.update_stats = hclge_update_stats, .update_stats = hclge_update_stats,
.get_strings = hclge_get_strings, .get_strings = hclge_get_strings,
.get_sset_count = hclge_get_sset_count, .get_sset_count = hclge_get_sset_count,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment