diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-07-23 18:43:48 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-07-23 18:43:48 +0900 |
commit | a3beddd0aa267986de7b13b6d9cd0e1869fcf1fc (patch) | |
tree | bfdc42183f5aac21f605a30a4a511298ab91e3c5 /drivers/net/can/dev.c | |
parent | 955c9863bb5855a994751843e7066017edc00410 (diff) | |
parent | 5bdef865eb358b6f3760e25e591ae115e9eeddef (diff) | |
download | kernel-crypto-a3beddd0aa267986de7b13b6d9cd0e1869fcf1fc.tar.gz kernel-crypto-a3beddd0aa267986de7b13b6d9cd0e1869fcf1fc.tar.xz kernel-crypto-a3beddd0aa267986de7b13b6d9cd0e1869fcf1fc.zip |
Merge branch 'sh/kfr2r09'
Diffstat (limited to 'drivers/net/can/dev.c')
-rw-r--r-- | drivers/net/can/dev.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 574daddc21b..9e4283aff82 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c @@ -346,7 +346,7 @@ void can_restart(unsigned long data) skb = dev_alloc_skb(sizeof(struct can_frame)); if (skb == NULL) { err = -ENOMEM; - goto out; + goto restart; } skb->dev = dev; skb->protocol = htons(ETH_P_CAN); @@ -361,13 +361,13 @@ void can_restart(unsigned long data) stats->rx_packets++; stats->rx_bytes += cf->can_dlc; +restart: dev_dbg(dev->dev.parent, "restarted\n"); priv->can_stats.restarts++; /* Now restart the device */ err = priv->do_set_mode(dev, CAN_MODE_START); -out: netif_carrier_on(dev); if (err) dev_err(dev->dev.parent, "Error %d during restart", err); @@ -473,6 +473,10 @@ int open_candev(struct net_device *dev) return -EINVAL; } + /* Switch carrier on if device was stopped while in bus-off state */ + if (!netif_carrier_ok(dev)) + netif_carrier_on(dev); + setup_timer(&priv->restart_timer, can_restart, (unsigned long)dev); return 0; |