Files
linux/drivers/net
Jan Altenberg dc760b375e can: c_can: Fix tx_bytes accounting
The current SocketCAN implementation for the Bosch c_can cell doesn't
account the TX bytes correctly, because it calls
c_can_inval_msg_object() (which clears the msg ctrl register) before
reading the DLC value:

for (/* nix */; (priv->tx_next - priv->tx_echo) > 0; priv->tx_echo++) {
        msg_obj_no = get_tx_echo_msg_obj(priv);
        c_can_inval_msg_object(dev, 0, msg_obj_no);
        val = c_can_read_reg32(priv, &priv->regs->txrqst1);
        if (!(val & (1 << msg_obj_no))) {
                can_get_echo_skb(dev,
                                msg_obj_no - C_CAN_MSG_OBJ_TX_FIRST);
                stats->tx_bytes += priv->read_reg(priv,
                                &priv->regs->ifregs[0].msg_cntrl)
                                & IF_MCONT_DLC_MASK;
                stats->tx_packets++;
        }
}

So, we will always read 0 for the DLC value and "ifconfig" will report
*0* TX Bytes.

The fix is quite easy: Just move c_can_inval_msg_object() to the end of
the if() statement. So:
      * We only call c_can_inval_msg_object() if the message was
        actually transmitted
      * We read out the DLC value _before_ clearing the msg ctrl
        register

Signed-off-by: Jan Altenberg <jan@linutronix.de>
Acked-by: Kurt Van Dijck <kurt.van.dijck@eia.be>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2011-03-27 23:35:01 -07:00
..
2011-03-05 10:55:57 +01:00
2011-02-28 11:57:33 -08:00
2011-02-28 11:57:33 -08:00
2011-03-16 11:29:47 -07:00
2011-02-02 15:41:25 -08:00
2011-03-23 12:45:10 -07:00
2011-03-27 23:35:01 -07:00
2011-02-13 10:42:07 -08:00
2011-03-02 03:20:56 -08:00
2011-01-11 14:03:09 -08:00
2011-03-11 01:16:23 -08:00
2011-03-23 12:31:39 -07:00
2011-02-28 12:06:20 -08:00
2010-12-21 02:16:10 -08:00
2010-12-21 02:16:10 -08:00
2011-02-28 11:57:33 -08:00
2011-03-23 15:22:05 -04:00
2011-03-15 19:38:03 -07:00
2010-12-21 02:16:08 -08:00
2010-12-21 02:16:08 -08:00
2010-12-21 02:16:08 -08:00
2010-11-09 09:17:56 -08:00
2010-12-21 02:16:08 -08:00
2010-11-17 12:21:14 -08:00
2010-11-09 09:17:56 -08:00
2010-12-21 02:16:08 -08:00
2010-11-09 09:17:56 -08:00
2010-12-01 11:11:31 -08:00
2010-08-24 12:24:07 -07:00
2010-09-26 18:34:29 -07:00
2011-03-14 15:00:12 -07:00
2011-03-14 15:00:12 -07:00
2011-01-14 12:39:59 -08:00
2010-12-23 11:44:34 -08:00
2010-07-14 13:40:36 -07:00
2010-09-26 18:34:29 -07:00
2010-09-26 18:34:29 -07:00
2011-02-01 13:19:07 -08:00
2011-01-27 14:18:34 -08:00
2010-09-29 13:23:30 -07:00
2010-09-26 18:34:29 -07:00
2010-12-21 02:16:08 -08:00
2010-12-21 02:16:08 -08:00
2010-09-26 18:34:29 -07:00
2011-01-09 15:42:56 -08:00
2011-03-18 21:53:03 -07:00
2011-01-14 12:45:54 -08:00
2010-09-26 18:34:29 -07:00
2010-12-21 02:16:08 -08:00
2011-01-03 12:43:10 -08:00
2011-02-28 11:57:33 -08:00
2011-02-28 11:57:33 -08:00
2011-02-13 21:44:44 -08:00
2010-07-27 22:24:37 -07:00
2010-11-08 13:50:06 -08:00
2010-11-09 09:17:56 -08:00
2010-11-09 09:17:56 -08:00
2011-02-17 14:16:35 -08:00
2010-09-26 18:34:29 -07:00
2011-03-15 19:38:03 -07:00
2010-09-26 18:34:29 -07:00
2011-03-03 13:02:32 -08:00
2010-12-21 02:16:08 -08:00
2010-12-21 02:16:08 -08:00
2010-09-26 18:34:29 -07:00
2010-09-15 22:06:05 -07:00
2010-09-21 18:04:47 -07:00
2011-03-19 13:39:33 -07:00
2010-07-15 20:46:22 -07:00
2011-03-07 15:49:31 -08:00
2010-12-11 11:46:36 -08:00
2011-02-28 12:29:34 -08:00
2011-02-24 22:17:02 -08:00
2011-01-09 15:54:15 -08:00
2010-10-24 16:25:39 -07:00
2010-09-26 18:34:29 -07:00
2011-01-25 22:41:55 -08:00
2010-12-21 02:16:08 -08:00
2010-09-26 18:34:29 -07:00
2011-03-10 01:56:14 -08:00
2011-01-26 13:13:10 -08:00
2011-03-21 18:24:53 -07:00
2010-12-08 10:23:36 -08:00
2010-12-21 02:16:08 -08:00
2011-03-15 19:38:03 -07:00
2010-11-09 09:17:56 -08:00