Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 11ee5fcd authored by Anssi Hannula's avatar Anssi Hannula Committed by Marc Kleine-Budde
Browse files

can: xilinx_can: update stats.tx_bytes after transmission



The driver updates stats.tx_bytes in start_xmit() even though it could
do so in TX interrupt handler.

Change the code to update tx_bytes in the interrupt handler, using the
return value of can_get_echo_skb().

Signed-off-by: default avatarAnssi Hannula <anssi.hannula@bitwise.fi>
Cc: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 6181dbc0
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -403,7 +403,6 @@ static int xcan_do_set_mode(struct net_device *ndev, enum can_mode mode)
static netdev_tx_t xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
{
	struct xcan_priv *priv = netdev_priv(ndev);
	struct net_device_stats *stats = &ndev->stats;
	struct can_frame *cf = (struct can_frame *)skb->data;
	u32 id, dlc, data[2] = {0, 0};
	unsigned long flags;
@@ -469,7 +468,6 @@ static netdev_tx_t xcan_start_xmit(struct sk_buff *skb, struct net_device *ndev)
		 * write triggers tranmission
		 */
		priv->write_reg(priv, XCAN_TXFIFO_DW2_OFFSET, data[1]);
		stats->tx_bytes += cf->can_dlc;
	}

	/* Clear TX-FIFO-empty interrupt for xcan_tx_interrupt() */
@@ -889,7 +887,7 @@ static void xcan_tx_interrupt(struct net_device *ndev, u32 isr)
	}

	while (frames_sent--) {
		can_get_echo_skb(ndev, priv->tx_tail %
		stats->tx_bytes += can_get_echo_skb(ndev, priv->tx_tail %
						    priv->tx_max);
		priv->tx_tail++;
		stats->tx_packets++;