diff options
author | David S. Miller <davem@davemloft.net> | 2017-12-08 14:53:54 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-12-08 14:53:54 -0500 |
commit | fd29117aeb905aaacdf4ff5afbc7787fa50e16e4 (patch) | |
tree | e456596cd5c97715159c2cfbe9b5e8e53ce49ed2 | |
parent | 03afb6e43aaf71e761c1e22d36c2670ef82f089a (diff) | |
parent | 91785de6f94b58c3fb6664609e3682f011bd28d2 (diff) |
Merge tag 'linux-can-fixes-for-4.15-20171208' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
Marc Kleine-Budde says:
====================
pull-request: can 2017-12-08
this is a pull request of 6 patches for net/master.
Martin Kelly provides 5 patches for various USB based CAN drivers, that
properly cancel the URBs on adapter unplug, so that the driver doesn't
end up in an endless loop. Stephane Grosjean provides a patch to restart
the tx queue if zero length packages are transmitted.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/can/peak_canfd/peak_canfd.c | 9 | ||||
-rw-r--r-- | drivers/net/can/usb/ems_usb.c | 2 | ||||
-rw-r--r-- | drivers/net/can/usb/esd_usb2.c | 2 | ||||
-rw-r--r-- | drivers/net/can/usb/kvaser_usb.c | 2 | ||||
-rw-r--r-- | drivers/net/can/usb/mcba_usb.c | 1 | ||||
-rw-r--r-- | drivers/net/can/usb/usb_8dev.c | 2 |
6 files changed, 12 insertions, 6 deletions
diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c index 85268be0c913..55513411a82e 100644 --- a/drivers/net/can/peak_canfd/peak_canfd.c +++ b/drivers/net/can/peak_canfd/peak_canfd.c | |||
@@ -258,21 +258,18 @@ static int pucan_handle_can_rx(struct peak_canfd_priv *priv, | |||
258 | /* if this frame is an echo, */ | 258 | /* if this frame is an echo, */ |
259 | if ((rx_msg_flags & PUCAN_MSG_LOOPED_BACK) && | 259 | if ((rx_msg_flags & PUCAN_MSG_LOOPED_BACK) && |
260 | !(rx_msg_flags & PUCAN_MSG_SELF_RECEIVE)) { | 260 | !(rx_msg_flags & PUCAN_MSG_SELF_RECEIVE)) { |
261 | int n; | ||
262 | unsigned long flags; | 261 | unsigned long flags; |
263 | 262 | ||
264 | spin_lock_irqsave(&priv->echo_lock, flags); | 263 | spin_lock_irqsave(&priv->echo_lock, flags); |
265 | n = can_get_echo_skb(priv->ndev, msg->client); | 264 | can_get_echo_skb(priv->ndev, msg->client); |
266 | spin_unlock_irqrestore(&priv->echo_lock, flags); | 265 | spin_unlock_irqrestore(&priv->echo_lock, flags); |
267 | 266 | ||
268 | /* count bytes of the echo instead of skb */ | 267 | /* count bytes of the echo instead of skb */ |
269 | stats->tx_bytes += cf_len; | 268 | stats->tx_bytes += cf_len; |
270 | stats->tx_packets++; | 269 | stats->tx_packets++; |
271 | 270 | ||
272 | if (n) { | 271 | /* restart tx queue (a slot is free) */ |
273 | /* restart tx queue only if a slot is free */ | 272 | netif_wake_queue(priv->ndev); |
274 | netif_wake_queue(priv->ndev); | ||
275 | } | ||
276 | 273 | ||
277 | return 0; | 274 | return 0; |
278 | } | 275 | } |
diff --git a/drivers/net/can/usb/ems_usb.c b/drivers/net/can/usb/ems_usb.c index b3d02759c226..b00358297424 100644 --- a/drivers/net/can/usb/ems_usb.c +++ b/drivers/net/can/usb/ems_usb.c | |||
@@ -288,6 +288,8 @@ static void ems_usb_read_interrupt_callback(struct urb *urb) | |||
288 | 288 | ||
289 | case -ECONNRESET: /* unlink */ | 289 | case -ECONNRESET: /* unlink */ |
290 | case -ENOENT: | 290 | case -ENOENT: |
291 | case -EPIPE: | ||
292 | case -EPROTO: | ||
291 | case -ESHUTDOWN: | 293 | case -ESHUTDOWN: |
292 | return; | 294 | return; |
293 | 295 | ||
diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c index 9fdb0f0bfa06..c6dcf93675c0 100644 --- a/drivers/net/can/usb/esd_usb2.c +++ b/drivers/net/can/usb/esd_usb2.c | |||
@@ -393,6 +393,8 @@ static void esd_usb2_read_bulk_callback(struct urb *urb) | |||
393 | break; | 393 | break; |
394 | 394 | ||
395 | case -ENOENT: | 395 | case -ENOENT: |
396 | case -EPIPE: | ||
397 | case -EPROTO: | ||
396 | case -ESHUTDOWN: | 398 | case -ESHUTDOWN: |
397 | return; | 399 | return; |
398 | 400 | ||
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c index f95945915d20..63587b8e6825 100644 --- a/drivers/net/can/usb/kvaser_usb.c +++ b/drivers/net/can/usb/kvaser_usb.c | |||
@@ -1326,6 +1326,8 @@ static void kvaser_usb_read_bulk_callback(struct urb *urb) | |||
1326 | case 0: | 1326 | case 0: |
1327 | break; | 1327 | break; |
1328 | case -ENOENT: | 1328 | case -ENOENT: |
1329 | case -EPIPE: | ||
1330 | case -EPROTO: | ||
1329 | case -ESHUTDOWN: | 1331 | case -ESHUTDOWN: |
1330 | return; | 1332 | return; |
1331 | default: | 1333 | default: |
diff --git a/drivers/net/can/usb/mcba_usb.c b/drivers/net/can/usb/mcba_usb.c index ef417dcddbf7..8d8c2086424d 100644 --- a/drivers/net/can/usb/mcba_usb.c +++ b/drivers/net/can/usb/mcba_usb.c | |||
@@ -593,6 +593,7 @@ static void mcba_usb_read_bulk_callback(struct urb *urb) | |||
593 | 593 | ||
594 | case -ENOENT: | 594 | case -ENOENT: |
595 | case -EPIPE: | 595 | case -EPIPE: |
596 | case -EPROTO: | ||
596 | case -ESHUTDOWN: | 597 | case -ESHUTDOWN: |
597 | return; | 598 | return; |
598 | 599 | ||
diff --git a/drivers/net/can/usb/usb_8dev.c b/drivers/net/can/usb/usb_8dev.c index d000cb62d6ae..27861c417c94 100644 --- a/drivers/net/can/usb/usb_8dev.c +++ b/drivers/net/can/usb/usb_8dev.c | |||
@@ -524,6 +524,8 @@ static void usb_8dev_read_bulk_callback(struct urb *urb) | |||
524 | break; | 524 | break; |
525 | 525 | ||
526 | case -ENOENT: | 526 | case -ENOENT: |
527 | case -EPIPE: | ||
528 | case -EPROTO: | ||
527 | case -ESHUTDOWN: | 529 | case -ESHUTDOWN: |
528 | return; | 530 | return; |
529 | 531 | ||