Loading drivers/net/ethernet/marvell/octeon_ep/octep_ethtool.c +17 −24 Original line number Diff line number Diff line Loading @@ -150,17 +150,14 @@ octep_get_ethtool_stats(struct net_device *netdev, iface_rx_stats, iface_tx_stats); for (q = 0; q < oct->num_oqs; q++) { struct octep_iq *iq = oct->iq[q]; struct octep_oq *oq = oct->oq[q]; tx_packets += iq->stats.instr_completed; tx_bytes += iq->stats.bytes_sent; tx_busy_errors += iq->stats.tx_busy; rx_packets += oq->stats.packets; rx_bytes += oq->stats.bytes; rx_alloc_errors += oq->stats.alloc_failures; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { tx_packets += oct->stats_iq[q].instr_completed; tx_bytes += oct->stats_iq[q].bytes_sent; tx_busy_errors += oct->stats_iq[q].tx_busy; rx_packets += oct->stats_oq[q].packets; rx_bytes += oct->stats_oq[q].bytes; rx_alloc_errors += oct->stats_oq[q].alloc_failures; } i = 0; data[i++] = rx_packets; Loading Loading @@ -198,22 +195,18 @@ octep_get_ethtool_stats(struct net_device *netdev, data[i++] = iface_rx_stats->err_pkts; /* Per Tx Queue stats */ for (q = 0; q < oct->num_iqs; q++) { struct octep_iq *iq = oct->iq[q]; data[i++] = iq->stats.instr_posted; data[i++] = iq->stats.instr_completed; data[i++] = iq->stats.bytes_sent; data[i++] = iq->stats.tx_busy; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { data[i++] = oct->stats_iq[q].instr_posted; data[i++] = oct->stats_iq[q].instr_completed; data[i++] = oct->stats_iq[q].bytes_sent; data[i++] = oct->stats_iq[q].tx_busy; } /* Per Rx Queue stats */ for (q = 0; q < oct->num_oqs; q++) { struct octep_oq *oq = oct->oq[q]; data[i++] = oq->stats.packets; data[i++] = oq->stats.bytes; data[i++] = oq->stats.alloc_failures; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { data[i++] = oct->stats_oq[q].packets; data[i++] = oct->stats_oq[q].bytes; data[i++] = oct->stats_oq[q].alloc_failures; } } Loading drivers/net/ethernet/marvell/octeon_ep/octep_main.c +8 −21 Original line number Diff line number Diff line Loading @@ -822,7 +822,7 @@ static inline int octep_iq_full_check(struct octep_iq *iq) if (unlikely(IQ_INSTR_SPACE(iq) > OCTEP_WAKE_QUEUE_THRESHOLD)) { netif_start_subqueue(iq->netdev, iq->q_no); iq->stats.restart_cnt++; iq->stats->restart_cnt++; return 0; } Loading Loading @@ -960,7 +960,7 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb, wmb(); /* Ring Doorbell to notify the NIC of new packets */ writel(iq->fill_cnt, iq->doorbell_reg); iq->stats.instr_posted += iq->fill_cnt; iq->stats->instr_posted += iq->fill_cnt; iq->fill_cnt = 0; return NETDEV_TX_OK; Loading Loading @@ -991,37 +991,24 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb, static void octep_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats) { u64 tx_packets, tx_bytes, rx_packets, rx_bytes; struct octep_device *oct = netdev_priv(netdev); u64 tx_packets, tx_bytes, rx_packets, rx_bytes; int q; if (netif_running(netdev)) octep_ctrl_net_get_if_stats(oct, OCTEP_CTRL_NET_INVALID_VFID, &oct->iface_rx_stats, &oct->iface_tx_stats); tx_packets = 0; tx_bytes = 0; rx_packets = 0; rx_bytes = 0; for (q = 0; q < oct->num_oqs; q++) { struct octep_iq *iq = oct->iq[q]; struct octep_oq *oq = oct->oq[q]; tx_packets += iq->stats.instr_completed; tx_bytes += iq->stats.bytes_sent; rx_packets += oq->stats.packets; rx_bytes += oq->stats.bytes; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { tx_packets += oct->stats_iq[q].instr_completed; tx_bytes += oct->stats_iq[q].bytes_sent; rx_packets += oct->stats_oq[q].packets; rx_bytes += oct->stats_oq[q].bytes; } stats->tx_packets = tx_packets; stats->tx_bytes = tx_bytes; stats->rx_packets = rx_packets; stats->rx_bytes = rx_bytes; stats->multicast = oct->iface_rx_stats.mcast_pkts; stats->rx_errors = oct->iface_rx_stats.err_pkts; stats->collisions = oct->iface_tx_stats.xscol; stats->tx_fifo_errors = oct->iface_tx_stats.undflw; } /** Loading drivers/net/ethernet/marvell/octeon_ep/octep_main.h +6 −0 Original line number Diff line number Diff line Loading @@ -258,11 +258,17 @@ struct octep_device { /* Pointers to Octeon Tx queues */ struct octep_iq *iq[OCTEP_MAX_IQ]; /* Per iq stats */ struct octep_iq_stats stats_iq[OCTEP_MAX_IQ]; /* Rx queues (OQ: Output Queue) */ u16 num_oqs; /* Pointers to Octeon Rx queues */ struct octep_oq *oq[OCTEP_MAX_OQ]; /* Per oq stats */ struct octep_oq_stats stats_oq[OCTEP_MAX_OQ]; /* Hardware port number of the PCIe interface */ u16 pcie_port; Loading drivers/net/ethernet/marvell/octeon_ep/octep_rx.c +6 −5 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ static int octep_oq_refill(struct octep_device *oct, struct octep_oq *oq) page = dev_alloc_page(); if (unlikely(!page)) { dev_err(oq->dev, "refill: rx buffer alloc failed\n"); oq->stats.alloc_failures++; oq->stats->alloc_failures++; break; } Loading @@ -98,7 +98,7 @@ static int octep_oq_refill(struct octep_device *oct, struct octep_oq *oq) "OQ-%d buffer refill: DMA mapping error!\n", oq->q_no); put_page(page); oq->stats.alloc_failures++; oq->stats->alloc_failures++; break; } oq->buff_info[refill_idx].page = page; Loading Loading @@ -134,6 +134,7 @@ static int octep_setup_oq(struct octep_device *oct, int q_no) oq->netdev = oct->netdev; oq->dev = &oct->pdev->dev; oq->q_no = q_no; oq->stats = &oct->stats_oq[q_no]; oq->max_count = CFG_GET_OQ_NUM_DESC(oct->conf); oq->ring_size_mask = oq->max_count - 1; oq->buffer_size = CFG_GET_OQ_BUF_SIZE(oct->conf); Loading Loading @@ -443,7 +444,7 @@ static int __octep_oq_process_rx(struct octep_device *oct, if (!skb) { octep_oq_drop_rx(oq, buff_info, &read_idx, &desc_used); oq->stats.alloc_failures++; oq->stats->alloc_failures++; continue; } skb_reserve(skb, data_offset); Loading Loading @@ -494,8 +495,8 @@ static int __octep_oq_process_rx(struct octep_device *oct, oq->host_read_idx = read_idx; oq->refill_count += desc_used; oq->stats.packets += pkt; oq->stats.bytes += rx_bytes; oq->stats->packets += pkt; oq->stats->bytes += rx_bytes; return pkt; } Loading drivers/net/ethernet/marvell/octeon_ep/octep_rx.h +2 −2 Original line number Diff line number Diff line Loading @@ -186,8 +186,8 @@ struct octep_oq { */ u8 __iomem *pkts_sent_reg; /* Statistics for this OQ. */ struct octep_oq_stats stats; /* Pointer to statistics for this OQ. */ struct octep_oq_stats *stats; /* Packets pending to be processed */ u32 pkts_pending; Loading Loading
drivers/net/ethernet/marvell/octeon_ep/octep_ethtool.c +17 −24 Original line number Diff line number Diff line Loading @@ -150,17 +150,14 @@ octep_get_ethtool_stats(struct net_device *netdev, iface_rx_stats, iface_tx_stats); for (q = 0; q < oct->num_oqs; q++) { struct octep_iq *iq = oct->iq[q]; struct octep_oq *oq = oct->oq[q]; tx_packets += iq->stats.instr_completed; tx_bytes += iq->stats.bytes_sent; tx_busy_errors += iq->stats.tx_busy; rx_packets += oq->stats.packets; rx_bytes += oq->stats.bytes; rx_alloc_errors += oq->stats.alloc_failures; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { tx_packets += oct->stats_iq[q].instr_completed; tx_bytes += oct->stats_iq[q].bytes_sent; tx_busy_errors += oct->stats_iq[q].tx_busy; rx_packets += oct->stats_oq[q].packets; rx_bytes += oct->stats_oq[q].bytes; rx_alloc_errors += oct->stats_oq[q].alloc_failures; } i = 0; data[i++] = rx_packets; Loading Loading @@ -198,22 +195,18 @@ octep_get_ethtool_stats(struct net_device *netdev, data[i++] = iface_rx_stats->err_pkts; /* Per Tx Queue stats */ for (q = 0; q < oct->num_iqs; q++) { struct octep_iq *iq = oct->iq[q]; data[i++] = iq->stats.instr_posted; data[i++] = iq->stats.instr_completed; data[i++] = iq->stats.bytes_sent; data[i++] = iq->stats.tx_busy; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { data[i++] = oct->stats_iq[q].instr_posted; data[i++] = oct->stats_iq[q].instr_completed; data[i++] = oct->stats_iq[q].bytes_sent; data[i++] = oct->stats_iq[q].tx_busy; } /* Per Rx Queue stats */ for (q = 0; q < oct->num_oqs; q++) { struct octep_oq *oq = oct->oq[q]; data[i++] = oq->stats.packets; data[i++] = oq->stats.bytes; data[i++] = oq->stats.alloc_failures; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { data[i++] = oct->stats_oq[q].packets; data[i++] = oct->stats_oq[q].bytes; data[i++] = oct->stats_oq[q].alloc_failures; } } Loading
drivers/net/ethernet/marvell/octeon_ep/octep_main.c +8 −21 Original line number Diff line number Diff line Loading @@ -822,7 +822,7 @@ static inline int octep_iq_full_check(struct octep_iq *iq) if (unlikely(IQ_INSTR_SPACE(iq) > OCTEP_WAKE_QUEUE_THRESHOLD)) { netif_start_subqueue(iq->netdev, iq->q_no); iq->stats.restart_cnt++; iq->stats->restart_cnt++; return 0; } Loading Loading @@ -960,7 +960,7 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb, wmb(); /* Ring Doorbell to notify the NIC of new packets */ writel(iq->fill_cnt, iq->doorbell_reg); iq->stats.instr_posted += iq->fill_cnt; iq->stats->instr_posted += iq->fill_cnt; iq->fill_cnt = 0; return NETDEV_TX_OK; Loading Loading @@ -991,37 +991,24 @@ static netdev_tx_t octep_start_xmit(struct sk_buff *skb, static void octep_get_stats64(struct net_device *netdev, struct rtnl_link_stats64 *stats) { u64 tx_packets, tx_bytes, rx_packets, rx_bytes; struct octep_device *oct = netdev_priv(netdev); u64 tx_packets, tx_bytes, rx_packets, rx_bytes; int q; if (netif_running(netdev)) octep_ctrl_net_get_if_stats(oct, OCTEP_CTRL_NET_INVALID_VFID, &oct->iface_rx_stats, &oct->iface_tx_stats); tx_packets = 0; tx_bytes = 0; rx_packets = 0; rx_bytes = 0; for (q = 0; q < oct->num_oqs; q++) { struct octep_iq *iq = oct->iq[q]; struct octep_oq *oq = oct->oq[q]; tx_packets += iq->stats.instr_completed; tx_bytes += iq->stats.bytes_sent; rx_packets += oq->stats.packets; rx_bytes += oq->stats.bytes; for (q = 0; q < OCTEP_MAX_QUEUES; q++) { tx_packets += oct->stats_iq[q].instr_completed; tx_bytes += oct->stats_iq[q].bytes_sent; rx_packets += oct->stats_oq[q].packets; rx_bytes += oct->stats_oq[q].bytes; } stats->tx_packets = tx_packets; stats->tx_bytes = tx_bytes; stats->rx_packets = rx_packets; stats->rx_bytes = rx_bytes; stats->multicast = oct->iface_rx_stats.mcast_pkts; stats->rx_errors = oct->iface_rx_stats.err_pkts; stats->collisions = oct->iface_tx_stats.xscol; stats->tx_fifo_errors = oct->iface_tx_stats.undflw; } /** Loading
drivers/net/ethernet/marvell/octeon_ep/octep_main.h +6 −0 Original line number Diff line number Diff line Loading @@ -258,11 +258,17 @@ struct octep_device { /* Pointers to Octeon Tx queues */ struct octep_iq *iq[OCTEP_MAX_IQ]; /* Per iq stats */ struct octep_iq_stats stats_iq[OCTEP_MAX_IQ]; /* Rx queues (OQ: Output Queue) */ u16 num_oqs; /* Pointers to Octeon Rx queues */ struct octep_oq *oq[OCTEP_MAX_OQ]; /* Per oq stats */ struct octep_oq_stats stats_oq[OCTEP_MAX_OQ]; /* Hardware port number of the PCIe interface */ u16 pcie_port; Loading
drivers/net/ethernet/marvell/octeon_ep/octep_rx.c +6 −5 Original line number Diff line number Diff line Loading @@ -87,7 +87,7 @@ static int octep_oq_refill(struct octep_device *oct, struct octep_oq *oq) page = dev_alloc_page(); if (unlikely(!page)) { dev_err(oq->dev, "refill: rx buffer alloc failed\n"); oq->stats.alloc_failures++; oq->stats->alloc_failures++; break; } Loading @@ -98,7 +98,7 @@ static int octep_oq_refill(struct octep_device *oct, struct octep_oq *oq) "OQ-%d buffer refill: DMA mapping error!\n", oq->q_no); put_page(page); oq->stats.alloc_failures++; oq->stats->alloc_failures++; break; } oq->buff_info[refill_idx].page = page; Loading Loading @@ -134,6 +134,7 @@ static int octep_setup_oq(struct octep_device *oct, int q_no) oq->netdev = oct->netdev; oq->dev = &oct->pdev->dev; oq->q_no = q_no; oq->stats = &oct->stats_oq[q_no]; oq->max_count = CFG_GET_OQ_NUM_DESC(oct->conf); oq->ring_size_mask = oq->max_count - 1; oq->buffer_size = CFG_GET_OQ_BUF_SIZE(oct->conf); Loading Loading @@ -443,7 +444,7 @@ static int __octep_oq_process_rx(struct octep_device *oct, if (!skb) { octep_oq_drop_rx(oq, buff_info, &read_idx, &desc_used); oq->stats.alloc_failures++; oq->stats->alloc_failures++; continue; } skb_reserve(skb, data_offset); Loading Loading @@ -494,8 +495,8 @@ static int __octep_oq_process_rx(struct octep_device *oct, oq->host_read_idx = read_idx; oq->refill_count += desc_used; oq->stats.packets += pkt; oq->stats.bytes += rx_bytes; oq->stats->packets += pkt; oq->stats->bytes += rx_bytes; return pkt; } Loading
drivers/net/ethernet/marvell/octeon_ep/octep_rx.h +2 −2 Original line number Diff line number Diff line Loading @@ -186,8 +186,8 @@ struct octep_oq { */ u8 __iomem *pkts_sent_reg; /* Statistics for this OQ. */ struct octep_oq_stats stats; /* Pointer to statistics for this OQ. */ struct octep_oq_stats *stats; /* Packets pending to be processed */ u32 pkts_pending; Loading