diff options
author | 2013-11-25 15:48:19 +0100 | |
---|---|---|
committer | 2013-11-25 21:48:54 +0100 | |
commit | 7ee330c7b3b738847bf297912b371bbcec3bc994 (patch) | |
tree | 71314361df1ad1e174b87b8f913f361231b204f8 /drivers/net/can | |
parent | can: c_can: don't call pm_runtime_get_sync() from interrupt context (diff) | |
download | linux-7ee330c7b3b738847bf297912b371bbcec3bc994.tar.gz linux-7ee330c7b3b738847bf297912b371bbcec3bc994.tar.bz2 linux-7ee330c7b3b738847bf297912b371bbcec3bc994.zip |
can: c_can: fix calculation of transmitted bytes on tx complete
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>
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/c_can/c_can.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/can/c_can/c_can.c b/drivers/net/can/c_can/c_can.c index e59c42b446a9..77061eebb034 100644 --- a/drivers/net/can/c_can/c_can.c +++ b/drivers/net/can/c_can/c_can.c @@ -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; |