can: c_can: fix calculation of transmitted bytes on tx complete
authorHolger Bechtold <Holger.Bechtold@gmx.net>
Mon, 25 Nov 2013 14:48:19 +0000 (15:48 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 25 Nov 2013 20:48:54 +0000 (21:48 +0100)
The number of bytes transmitted was not updated correctly, if several CAN
messages (with different length) were transmitted in one 'bunch'. Thus
programs like 'ifconfig' showed wrong transmit byte counts. Reason was, that
the message object whose DLC is to be read was not necessarily the active one
at the time when

    priv->read_reg(priv, C_CAN_IFACE(MSGCTRL_REG, 0)) & IF_MCONT_DLC_MASK;

was executed.

Signed-off-by: Holger Bechtold <Holger.Bechtold@gmx.net>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/c_can/c_can.c

index e59c42b446a9b7f32a335e8b17f7b2950352f448..77061eebb034f4295258d9b0800fed28865d123a 100644 (file)
@@ -763,6 +763,7 @@ static void c_can_do_tx(struct net_device *dev)
                if (!(val & (1 << (msg_obj_no - 1)))) {
                        can_get_echo_skb(dev,
                                        msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
+                       c_can_object_get(dev, 0, msg_obj_no, IF_COMM_ALL);
                        stats->tx_bytes += priv->read_reg(priv,
                                        C_CAN_IFACE(MSGCTRL_REG, 0))
                                        & IF_MCONT_DLC_MASK;