]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
can: xilinx_can: update stats.tx_bytes after transmission
authorAnssi Hannula <anssi.hannula@bitwise.fi>
Mon, 26 Feb 2018 12:50:35 +0000 (14:50 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Fri, 27 Jul 2018 08:40:17 +0000 (10:40 +0200)
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: Anssi Hannula <anssi.hannula@bitwise.fi>
Cc: Michal Simek <michal.simek@xilinx.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/xilinx_can.c

index c7e5373a8f3c96be86195c805974a7b046efdf38..9bce846acfcc66d57036bde70e23dfc9cf509212 100644 (file)
@@ -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,8 +887,8 @@ static void xcan_tx_interrupt(struct net_device *ndev, u32 isr)
        }
 
        while (frames_sent--) {
-               can_get_echo_skb(ndev, priv->tx_tail %
-                                       priv->tx_max);
+               stats->tx_bytes += can_get_echo_skb(ndev, priv->tx_tail %
+                                                   priv->tx_max);
                priv->tx_tail++;
                stats->tx_packets++;
        }