mirror of https://gitee.com/openkylin/linux.git
liquidio: add support for ndo_get_stats64 instead of ndo_get_stats
Support ndo_get_stats64 instead of ndo_get_stats. Also add stats for multicast and broadcast packets. Signed-off-by: Pradeep Nalla <pradeep.nalla@cavium.com> Acked-by: Raghu Vatsavayi <raghu.vatsavayi@cavium.com> Signed-off-by: Felix Manlunas <felix.manlunas@cavium.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f058ca6b06
commit
80002347d6
|
@ -1207,6 +1207,8 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev,
|
|||
/* RX firmware stats */
|
||||
rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd;
|
||||
rstats->fw_total_fwd = rsp_rstats->fw_total_fwd;
|
||||
rstats->fw_total_mcast = rsp_rstats->fw_total_mcast;
|
||||
rstats->fw_total_bcast = rsp_rstats->fw_total_bcast;
|
||||
rstats->fw_err_pko = rsp_rstats->fw_err_pko;
|
||||
rstats->fw_err_link = rsp_rstats->fw_err_link;
|
||||
rstats->fw_err_drop = rsp_rstats->fw_err_drop;
|
||||
|
@ -1251,6 +1253,8 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev,
|
|||
/* firmware stats */
|
||||
tstats->fw_total_sent = rsp_tstats->fw_total_sent;
|
||||
tstats->fw_total_fwd = rsp_tstats->fw_total_fwd;
|
||||
tstats->fw_total_mcast_sent = rsp_tstats->fw_total_mcast_sent;
|
||||
tstats->fw_total_bcast_sent = rsp_tstats->fw_total_bcast_sent;
|
||||
tstats->fw_err_pko = rsp_tstats->fw_err_pko;
|
||||
tstats->fw_err_pki = rsp_tstats->fw_err_pki;
|
||||
tstats->fw_err_link = rsp_tstats->fw_err_link;
|
||||
|
|
|
@ -112,6 +112,9 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
|
|||
"tx_tso_err",
|
||||
"tx_vxlan",
|
||||
|
||||
"tx_mcast",
|
||||
"tx_bcast",
|
||||
|
||||
"mac_tx_total_pkts",
|
||||
"mac_tx_total_bytes",
|
||||
"mac_tx_mcast_pkts",
|
||||
|
@ -127,6 +130,8 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = {
|
|||
|
||||
"rx_total_rcvd",
|
||||
"rx_total_fwd",
|
||||
"rx_mcast",
|
||||
"rx_bcast",
|
||||
"rx_jabber_err",
|
||||
"rx_l2_err",
|
||||
"rx_frame_err",
|
||||
|
@ -171,6 +176,10 @@ static const char oct_vf_stats_strings[][ETH_GSTRING_LEN] = {
|
|||
"tx_errors",
|
||||
"rx_dropped",
|
||||
"tx_dropped",
|
||||
"rx_mcast",
|
||||
"tx_mcast",
|
||||
"rx_bcast",
|
||||
"tx_bcast",
|
||||
"link_state_changes",
|
||||
};
|
||||
|
||||
|
@ -1056,50 +1065,48 @@ lio_get_ethtool_stats(struct net_device *netdev,
|
|||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct octeon_device *oct_dev = lio->oct_dev;
|
||||
struct net_device_stats *netstats = &netdev->stats;
|
||||
struct rtnl_link_stats64 lstats;
|
||||
int i = 0, j;
|
||||
|
||||
if (ifstate_check(lio, LIO_IFSTATE_RESETTING))
|
||||
return;
|
||||
|
||||
netdev->netdev_ops->ndo_get_stats(netdev);
|
||||
octnet_get_link_stats(netdev);
|
||||
|
||||
netdev->netdev_ops->ndo_get_stats64(netdev, &lstats);
|
||||
/*sum of oct->droq[oq_no]->stats->rx_pkts_received */
|
||||
data[i++] = CVM_CAST64(netstats->rx_packets);
|
||||
data[i++] = lstats.rx_packets;
|
||||
/*sum of oct->instr_queue[iq_no]->stats.tx_done */
|
||||
data[i++] = CVM_CAST64(netstats->tx_packets);
|
||||
data[i++] = lstats.tx_packets;
|
||||
/*sum of oct->droq[oq_no]->stats->rx_bytes_received */
|
||||
data[i++] = CVM_CAST64(netstats->rx_bytes);
|
||||
data[i++] = lstats.rx_bytes;
|
||||
/*sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */
|
||||
data[i++] = CVM_CAST64(netstats->tx_bytes);
|
||||
data[i++] = CVM_CAST64(netstats->rx_errors +
|
||||
oct_dev->link_stats.fromwire.fcs_err +
|
||||
oct_dev->link_stats.fromwire.jabber_err +
|
||||
oct_dev->link_stats.fromwire.l2_err +
|
||||
oct_dev->link_stats.fromwire.frame_err);
|
||||
data[i++] = CVM_CAST64(netstats->tx_errors);
|
||||
data[i++] = lstats.tx_bytes;
|
||||
data[i++] = lstats.rx_errors +
|
||||
oct_dev->link_stats.fromwire.fcs_err +
|
||||
oct_dev->link_stats.fromwire.jabber_err +
|
||||
oct_dev->link_stats.fromwire.l2_err +
|
||||
oct_dev->link_stats.fromwire.frame_err;
|
||||
data[i++] = lstats.tx_errors;
|
||||
/*sum of oct->droq[oq_no]->stats->rx_dropped +
|
||||
*oct->droq[oq_no]->stats->dropped_nodispatch +
|
||||
*oct->droq[oq_no]->stats->dropped_toomany +
|
||||
*oct->droq[oq_no]->stats->dropped_nomem
|
||||
*/
|
||||
data[i++] = CVM_CAST64(netstats->rx_dropped +
|
||||
oct_dev->link_stats.fromwire.fifo_err +
|
||||
oct_dev->link_stats.fromwire.dmac_drop +
|
||||
oct_dev->link_stats.fromwire.red_drops +
|
||||
oct_dev->link_stats.fromwire.fw_err_pko +
|
||||
oct_dev->link_stats.fromwire.fw_err_link +
|
||||
oct_dev->link_stats.fromwire.fw_err_drop);
|
||||
data[i++] = lstats.rx_dropped +
|
||||
oct_dev->link_stats.fromwire.fifo_err +
|
||||
oct_dev->link_stats.fromwire.dmac_drop +
|
||||
oct_dev->link_stats.fromwire.red_drops +
|
||||
oct_dev->link_stats.fromwire.fw_err_pko +
|
||||
oct_dev->link_stats.fromwire.fw_err_link +
|
||||
oct_dev->link_stats.fromwire.fw_err_drop;
|
||||
/*sum of oct->instr_queue[iq_no]->stats.tx_dropped */
|
||||
data[i++] = CVM_CAST64(netstats->tx_dropped +
|
||||
oct_dev->link_stats.fromhost.max_collision_fail +
|
||||
oct_dev->link_stats.fromhost.max_deferral_fail +
|
||||
oct_dev->link_stats.fromhost.total_collisions +
|
||||
oct_dev->link_stats.fromhost.fw_err_pko +
|
||||
oct_dev->link_stats.fromhost.fw_err_link +
|
||||
oct_dev->link_stats.fromhost.fw_err_drop +
|
||||
oct_dev->link_stats.fromhost.fw_err_pki);
|
||||
data[i++] = lstats.tx_dropped +
|
||||
oct_dev->link_stats.fromhost.max_collision_fail +
|
||||
oct_dev->link_stats.fromhost.max_deferral_fail +
|
||||
oct_dev->link_stats.fromhost.total_collisions +
|
||||
oct_dev->link_stats.fromhost.fw_err_pko +
|
||||
oct_dev->link_stats.fromhost.fw_err_link +
|
||||
oct_dev->link_stats.fromhost.fw_err_drop +
|
||||
oct_dev->link_stats.fromhost.fw_err_pki;
|
||||
|
||||
/* firmware tx stats */
|
||||
/*per_core_stats[cvmx_get_core_num()].link_stats[mdata->from_ifidx].
|
||||
|
@ -1134,6 +1141,10 @@ lio_get_ethtool_stats(struct net_device *netdev,
|
|||
*/
|
||||
data[i++] = CVM_CAST64(oct_dev->link_stats.fromhost.fw_tx_vxlan);
|
||||
|
||||
/* Multicast packets sent by this port */
|
||||
data[i++] = oct_dev->link_stats.fromhost.fw_total_mcast_sent;
|
||||
data[i++] = oct_dev->link_stats.fromhost.fw_total_bcast_sent;
|
||||
|
||||
/* mac tx statistics */
|
||||
/*CVMX_BGXX_CMRX_TX_STAT5 */
|
||||
data[i++] = CVM_CAST64(oct_dev->link_stats.fromhost.total_pkts_sent);
|
||||
|
@ -1170,6 +1181,9 @@ lio_get_ethtool_stats(struct net_device *netdev,
|
|||
*fw_total_fwd
|
||||
*/
|
||||
data[i++] = CVM_CAST64(oct_dev->link_stats.fromwire.fw_total_fwd);
|
||||
/* Multicast packets received on this port */
|
||||
data[i++] = oct_dev->link_stats.fromwire.fw_total_mcast;
|
||||
data[i++] = oct_dev->link_stats.fromwire.fw_total_bcast;
|
||||
/*per_core_stats[core_id].link_stats[ifidx].fromwire.jabber_err */
|
||||
data[i++] = CVM_CAST64(oct_dev->link_stats.fromwire.jabber_err);
|
||||
/*per_core_stats[core_id].link_stats[ifidx].fromwire.l2_err */
|
||||
|
@ -1338,7 +1352,7 @@ static void lio_vf_get_ethtool_stats(struct net_device *netdev,
|
|||
__attribute__((unused)),
|
||||
u64 *data)
|
||||
{
|
||||
struct net_device_stats *netstats = &netdev->stats;
|
||||
struct rtnl_link_stats64 lstats;
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct octeon_device *oct_dev = lio->oct_dev;
|
||||
int i = 0, j, vj;
|
||||
|
@ -1346,25 +1360,31 @@ static void lio_vf_get_ethtool_stats(struct net_device *netdev,
|
|||
if (ifstate_check(lio, LIO_IFSTATE_RESETTING))
|
||||
return;
|
||||
|
||||
netdev->netdev_ops->ndo_get_stats(netdev);
|
||||
netdev->netdev_ops->ndo_get_stats64(netdev, &lstats);
|
||||
/* sum of oct->droq[oq_no]->stats->rx_pkts_received */
|
||||
data[i++] = CVM_CAST64(netstats->rx_packets);
|
||||
data[i++] = lstats.rx_packets;
|
||||
/* sum of oct->instr_queue[iq_no]->stats.tx_done */
|
||||
data[i++] = CVM_CAST64(netstats->tx_packets);
|
||||
data[i++] = lstats.tx_packets;
|
||||
/* sum of oct->droq[oq_no]->stats->rx_bytes_received */
|
||||
data[i++] = CVM_CAST64(netstats->rx_bytes);
|
||||
data[i++] = lstats.rx_bytes;
|
||||
/* sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */
|
||||
data[i++] = CVM_CAST64(netstats->tx_bytes);
|
||||
data[i++] = CVM_CAST64(netstats->rx_errors);
|
||||
data[i++] = CVM_CAST64(netstats->tx_errors);
|
||||
data[i++] = lstats.tx_bytes;
|
||||
data[i++] = lstats.rx_errors;
|
||||
data[i++] = lstats.tx_errors;
|
||||
/* sum of oct->droq[oq_no]->stats->rx_dropped +
|
||||
* oct->droq[oq_no]->stats->dropped_nodispatch +
|
||||
* oct->droq[oq_no]->stats->dropped_toomany +
|
||||
* oct->droq[oq_no]->stats->dropped_nomem
|
||||
*/
|
||||
data[i++] = CVM_CAST64(netstats->rx_dropped);
|
||||
data[i++] = lstats.rx_dropped;
|
||||
/* sum of oct->instr_queue[iq_no]->stats.tx_dropped */
|
||||
data[i++] = CVM_CAST64(netstats->tx_dropped);
|
||||
data[i++] = lstats.tx_dropped;
|
||||
|
||||
data[i++] = oct_dev->link_stats.fromwire.fw_total_mcast;
|
||||
data[i++] = oct_dev->link_stats.fromhost.fw_total_mcast_sent;
|
||||
data[i++] = oct_dev->link_stats.fromwire.fw_total_bcast;
|
||||
data[i++] = oct_dev->link_stats.fromhost.fw_total_bcast_sent;
|
||||
|
||||
/* lio->link_changes */
|
||||
data[i++] = CVM_CAST64(lio->link_changes);
|
||||
|
||||
|
|
|
@ -2252,14 +2252,11 @@ static int liquidio_set_mac(struct net_device *netdev, void *p)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Net device get_stats
|
||||
* @param netdev network device
|
||||
*/
|
||||
static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
||||
static void
|
||||
liquidio_get_stats64(struct net_device *netdev,
|
||||
struct rtnl_link_stats64 *lstats)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct net_device_stats *stats = &netdev->stats;
|
||||
struct octeon_device *oct;
|
||||
u64 pkts = 0, drop = 0, bytes = 0;
|
||||
struct oct_droq_stats *oq_stats;
|
||||
|
@ -2269,7 +2266,7 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
|||
oct = lio->oct_dev;
|
||||
|
||||
if (ifstate_check(lio, LIO_IFSTATE_RESETTING))
|
||||
return stats;
|
||||
return;
|
||||
|
||||
for (i = 0; i < oct->num_iqs; i++) {
|
||||
iq_no = lio->linfo.txpciq[i].s.q_no;
|
||||
|
@ -2279,9 +2276,9 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
|||
bytes += iq_stats->tx_tot_bytes;
|
||||
}
|
||||
|
||||
stats->tx_packets = pkts;
|
||||
stats->tx_bytes = bytes;
|
||||
stats->tx_dropped = drop;
|
||||
lstats->tx_packets = pkts;
|
||||
lstats->tx_bytes = bytes;
|
||||
lstats->tx_dropped = drop;
|
||||
|
||||
pkts = 0;
|
||||
drop = 0;
|
||||
|
@ -2298,11 +2295,34 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
|||
bytes += oq_stats->rx_bytes_received;
|
||||
}
|
||||
|
||||
stats->rx_bytes = bytes;
|
||||
stats->rx_packets = pkts;
|
||||
stats->rx_dropped = drop;
|
||||
lstats->rx_bytes = bytes;
|
||||
lstats->rx_packets = pkts;
|
||||
lstats->rx_dropped = drop;
|
||||
|
||||
return stats;
|
||||
octnet_get_link_stats(netdev);
|
||||
lstats->multicast = oct->link_stats.fromwire.fw_total_mcast;
|
||||
lstats->collisions = oct->link_stats.fromhost.total_collisions;
|
||||
|
||||
/* detailed rx_errors: */
|
||||
lstats->rx_length_errors = oct->link_stats.fromwire.l2_err;
|
||||
/* recved pkt with crc error */
|
||||
lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err;
|
||||
/* recv'd frame alignment error */
|
||||
lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err;
|
||||
/* recv'r fifo overrun */
|
||||
lstats->rx_fifo_errors = oct->link_stats.fromwire.fifo_err;
|
||||
|
||||
lstats->rx_errors = lstats->rx_length_errors + lstats->rx_crc_errors +
|
||||
lstats->rx_frame_errors + lstats->rx_fifo_errors;
|
||||
|
||||
/* detailed tx_errors */
|
||||
lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko;
|
||||
lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link;
|
||||
lstats->tx_fifo_errors = oct->link_stats.fromhost.fifo_err;
|
||||
|
||||
lstats->tx_errors = lstats->tx_aborted_errors +
|
||||
lstats->tx_carrier_errors +
|
||||
lstats->tx_fifo_errors;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3355,7 +3375,7 @@ static const struct net_device_ops lionetdevops = {
|
|||
.ndo_open = liquidio_open,
|
||||
.ndo_stop = liquidio_stop,
|
||||
.ndo_start_xmit = liquidio_xmit,
|
||||
.ndo_get_stats = liquidio_get_stats,
|
||||
.ndo_get_stats64 = liquidio_get_stats64,
|
||||
.ndo_set_mac_address = liquidio_set_mac,
|
||||
.ndo_set_rx_mode = liquidio_set_mcast_list,
|
||||
.ndo_tx_timeout = liquidio_tx_timeout,
|
||||
|
|
|
@ -1336,24 +1336,21 @@ static int liquidio_set_mac(struct net_device *netdev, void *p)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* \brief Net device get_stats
|
||||
* @param netdev network device
|
||||
*/
|
||||
static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
||||
static void
|
||||
liquidio_get_stats64(struct net_device *netdev,
|
||||
struct rtnl_link_stats64 *lstats)
|
||||
{
|
||||
struct lio *lio = GET_LIO(netdev);
|
||||
struct net_device_stats *stats = &netdev->stats;
|
||||
struct octeon_device *oct;
|
||||
u64 pkts = 0, drop = 0, bytes = 0;
|
||||
struct oct_droq_stats *oq_stats;
|
||||
struct oct_iq_stats *iq_stats;
|
||||
struct octeon_device *oct;
|
||||
int i, iq_no, oq_no;
|
||||
|
||||
oct = lio->oct_dev;
|
||||
|
||||
if (ifstate_check(lio, LIO_IFSTATE_RESETTING))
|
||||
return stats;
|
||||
return;
|
||||
|
||||
for (i = 0; i < oct->num_iqs; i++) {
|
||||
iq_no = lio->linfo.txpciq[i].s.q_no;
|
||||
|
@ -1363,9 +1360,9 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
|||
bytes += iq_stats->tx_tot_bytes;
|
||||
}
|
||||
|
||||
stats->tx_packets = pkts;
|
||||
stats->tx_bytes = bytes;
|
||||
stats->tx_dropped = drop;
|
||||
lstats->tx_packets = pkts;
|
||||
lstats->tx_bytes = bytes;
|
||||
lstats->tx_dropped = drop;
|
||||
|
||||
pkts = 0;
|
||||
drop = 0;
|
||||
|
@ -1382,11 +1379,29 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev)
|
|||
bytes += oq_stats->rx_bytes_received;
|
||||
}
|
||||
|
||||
stats->rx_bytes = bytes;
|
||||
stats->rx_packets = pkts;
|
||||
stats->rx_dropped = drop;
|
||||
lstats->rx_bytes = bytes;
|
||||
lstats->rx_packets = pkts;
|
||||
lstats->rx_dropped = drop;
|
||||
|
||||
return stats;
|
||||
octnet_get_link_stats(netdev);
|
||||
lstats->multicast = oct->link_stats.fromwire.fw_total_mcast;
|
||||
|
||||
/* detailed rx_errors: */
|
||||
lstats->rx_length_errors = oct->link_stats.fromwire.l2_err;
|
||||
/* recved pkt with crc error */
|
||||
lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err;
|
||||
/* recv'd frame alignment error */
|
||||
lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err;
|
||||
|
||||
lstats->rx_errors = lstats->rx_length_errors + lstats->rx_crc_errors +
|
||||
lstats->rx_frame_errors;
|
||||
|
||||
/* detailed tx_errors */
|
||||
lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko;
|
||||
lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link;
|
||||
|
||||
lstats->tx_errors = lstats->tx_aborted_errors +
|
||||
lstats->tx_carrier_errors;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2034,7 +2049,7 @@ static const struct net_device_ops lionetdevops = {
|
|||
.ndo_open = liquidio_open,
|
||||
.ndo_stop = liquidio_stop,
|
||||
.ndo_start_xmit = liquidio_xmit,
|
||||
.ndo_get_stats = liquidio_get_stats,
|
||||
.ndo_get_stats64 = liquidio_get_stats64,
|
||||
.ndo_set_mac_address = liquidio_set_mac,
|
||||
.ndo_set_rx_mode = liquidio_set_mcast_list,
|
||||
.ndo_tx_timeout = liquidio_tx_timeout,
|
||||
|
|
|
@ -802,6 +802,9 @@ struct nic_rx_stats {
|
|||
u64 fw_total_rcvd;
|
||||
u64 fw_total_fwd;
|
||||
u64 fw_total_fwd_bytes;
|
||||
u64 fw_total_mcast;
|
||||
u64 fw_total_bcast;
|
||||
|
||||
u64 fw_err_pko;
|
||||
u64 fw_err_link;
|
||||
u64 fw_err_drop;
|
||||
|
@ -858,6 +861,8 @@ struct nic_tx_stats {
|
|||
u64 fw_total_sent;
|
||||
u64 fw_total_fwd;
|
||||
u64 fw_total_fwd_bytes;
|
||||
u64 fw_total_mcast_sent;
|
||||
u64 fw_total_bcast_sent;
|
||||
u64 fw_err_pko;
|
||||
u64 fw_err_link;
|
||||
u64 fw_err_drop;
|
||||
|
|
Loading…
Reference in New Issue