diff options
author | Wolfgang Grandegger <wg@grandegger.com> | 2011-12-12 10:07:16 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2012-02-02 18:24:59 -0500 |
commit | 7bb4db93ae59e0faf810a83a8578f56bc968ab01 (patch) | |
tree | 416de109d52a28d60759d0dd44b18416a8c4d445 | |
parent | 6e9d554fa6e481a848358c215f129432262123c0 (diff) |
can: cc770: store echo skb before starting the transfer
On slow systems and high CAN bitrates, the error message
"can_put_echo_skb: BUG! echo_skb is occupied!" did show up because
can_put_echo_skb() was called after starting the transfer.
Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r-- | drivers/net/can/cc770/cc770.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/can/cc770/cc770.c b/drivers/net/can/cc770/cc770.c index 766896747643..c30f0e6f1048 100644 --- a/drivers/net/can/cc770/cc770.c +++ b/drivers/net/can/cc770/cc770.c | |||
@@ -440,12 +440,14 @@ static netdev_tx_t cc770_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
440 | for (i = 0; i < dlc; i++) | 440 | for (i = 0; i < dlc; i++) |
441 | cc770_write_reg(priv, msgobj[mo].data[i], cf->data[i]); | 441 | cc770_write_reg(priv, msgobj[mo].data[i], cf->data[i]); |
442 | 442 | ||
443 | /* Store echo skb before starting the transfer */ | ||
444 | can_put_echo_skb(skb, dev, 0); | ||
445 | |||
443 | cc770_write_reg(priv, msgobj[mo].ctrl1, | 446 | cc770_write_reg(priv, msgobj[mo].ctrl1, |
444 | RMTPND_RES | TXRQST_SET | CPUUPD_RES | NEWDAT_UNC); | 447 | RMTPND_RES | TXRQST_SET | CPUUPD_RES | NEWDAT_UNC); |
445 | 448 | ||
446 | stats->tx_bytes += dlc; | 449 | stats->tx_bytes += dlc; |
447 | 450 | ||
448 | can_put_echo_skb(skb, dev, 0); | ||
449 | 451 | ||
450 | /* | 452 | /* |
451 | * HM: We had some cases of repeated IRQs so make sure the | 453 | * HM: We had some cases of repeated IRQs so make sure the |