Commit cf33d96f authored by Paolo Abeni's avatar Paolo Abeni
Browse files


No conflicts and no adjacent changes.

Signed-off-by: default avatarPaolo Abeni <pabeni@redhat.com>
parents b1754a69 d6406276
Loading
Loading
Loading
Loading
+17 −24
Original line number Diff line number Diff line
@@ -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;
@@ -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;
	}
}

+8 −21
Original line number Diff line number Diff line
@@ -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;
	}

@@ -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;

@@ -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;
}

/**
+6 −0
Original line number Diff line number Diff line
@@ -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;

+6 −5
Original line number Diff line number Diff line
@@ -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;
		}

@@ -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;
@@ -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);
@@ -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);
@@ -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;
}
+2 −2
Original line number Diff line number Diff line
@@ -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