diff options
author | David S. Miller <davem@davemloft.net> | 2017-06-09 15:41:57 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-06-09 15:41:57 -0400 |
commit | f6d4c7133257bb2d6f66723d11b19f1c49cdf2f7 (patch) | |
tree | 02e37b991d8ec35b970d17352ec683bfde10b85d | |
parent | c7a61cba71fd151cc7d9ebe53a090e0e61eeebf3 (diff) | |
parent | 97edec3a11cf6f73f2e45c3035b5ff8e4c3543dd (diff) |
Merge tag 'linux-can-fixes-for-4.12-20170609' of git://git.kernel.org/pub/scm/linux/kernel/git/mkl/linux-can
Marc Kleine-Budde says:
====================
pull-request: can 2017-06-09
this is a pull request of 6 patches for net/master.
There's a patch by Stephane Grosjean that fixes an uninitialized symbol warning
in the peak_canfd driver. A patch by Johan Hovold to fix the product-id
endianness in an error message in the the peak_usb driver. A patch by Oliver
Hartkopp to enable CAN FD for virtual CAN devices by default. Three patches by
me, one makes the helper function can_change_state() robust to be called with
cf == NULL. The next patch fixes a memory leak in the gs_usb driver. And the
last one fixes a lockdep splat by properly initialize the per-net
can_rcvlists_lock spin_lock.
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/can/dev.c | 3 | ||||
-rw-r--r-- | drivers/net/can/peak_canfd/peak_canfd.c | 2 | ||||
-rw-r--r-- | drivers/net/can/usb/gs_usb.c | 2 | ||||
-rw-r--r-- | drivers/net/can/usb/peak_usb/pcan_usb_core.c | 4 | ||||
-rw-r--r-- | drivers/net/can/vcan.c | 2 | ||||
-rw-r--r-- | drivers/net/can/vxcan.c | 2 | ||||
-rw-r--r-- | net/can/af_can.c | 3 |
7 files changed, 10 insertions, 8 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index 611d16a7061d..ae4ed03dc642 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
@@ -391,6 +391,9 @@ void can_change_state(struct net_device *dev, struct can_frame *cf, | |||
391 | can_update_state_error_stats(dev, new_state); | 391 | can_update_state_error_stats(dev, new_state); |
392 | priv->state = new_state; | 392 | priv->state = new_state; |
393 | 393 | ||
394 | if (!cf) | ||
395 | return; | ||
396 | |||
394 | if (unlikely(new_state == CAN_STATE_BUS_OFF)) { | 397 | if (unlikely(new_state == CAN_STATE_BUS_OFF)) { |
395 | cf->can_id |= CAN_ERR_BUSOFF; | 398 | cf->can_id |= CAN_ERR_BUSOFF; |
396 | return; | 399 | return; |
diff --git a/drivers/net/can/peak_canfd/peak_canfd.c b/drivers/net/can/peak_canfd/peak_canfd.c index 0d57be5ea97b..85268be0c913 100644 --- a/drivers/net/can/peak_canfd/peak_canfd.c +++ b/drivers/net/can/peak_canfd/peak_canfd.c | |||
@@ -489,7 +489,7 @@ int peak_canfd_handle_msgs_list(struct peak_canfd_priv *priv, | |||
489 | struct pucan_rx_msg *msg_list, int msg_count) | 489 | struct pucan_rx_msg *msg_list, int msg_count) |
490 | { | 490 | { |
491 | void *msg_ptr = msg_list; | 491 | void *msg_ptr = msg_list; |
492 | int i, msg_size; | 492 | int i, msg_size = 0; |
493 | 493 | ||
494 | for (i = 0; i < msg_count; i++) { | 494 | for (i = 0; i < msg_count; i++) { |
495 | msg_size = peak_canfd_handle_msg(priv, msg_ptr); | 495 | msg_size = peak_canfd_handle_msg(priv, msg_ptr); |
diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c index eecee7f8dfb7..afcc1312dbaf 100644 --- a/drivers/net/can/usb/gs_usb.c +++ b/drivers/net/can/usb/gs_usb.c | |||
@@ -265,6 +265,8 @@ static int gs_cmd_reset(struct gs_usb *gsusb, struct gs_can *gsdev) | |||
265 | sizeof(*dm), | 265 | sizeof(*dm), |
266 | 1000); | 266 | 1000); |
267 | 267 | ||
268 | kfree(dm); | ||
269 | |||
268 | return rc; | 270 | return rc; |
269 | } | 271 | } |
270 | 272 | ||
diff --git a/drivers/net/can/usb/peak_usb/pcan_usb_core.c b/drivers/net/can/usb/peak_usb/pcan_usb_core.c index 57913dbbae0a..1ca76e03e965 100644 --- a/drivers/net/can/usb/peak_usb/pcan_usb_core.c +++ b/drivers/net/can/usb/peak_usb/pcan_usb_core.c | |||
@@ -908,8 +908,6 @@ static int peak_usb_probe(struct usb_interface *intf, | |||
908 | const struct peak_usb_adapter *peak_usb_adapter = NULL; | 908 | const struct peak_usb_adapter *peak_usb_adapter = NULL; |
909 | int i, err = -ENOMEM; | 909 | int i, err = -ENOMEM; |
910 | 910 | ||
911 | usb_dev = interface_to_usbdev(intf); | ||
912 | |||
913 | /* get corresponding PCAN-USB adapter */ | 911 | /* get corresponding PCAN-USB adapter */ |
914 | for (i = 0; i < ARRAY_SIZE(peak_usb_adapters_list); i++) | 912 | for (i = 0; i < ARRAY_SIZE(peak_usb_adapters_list); i++) |
915 | if (peak_usb_adapters_list[i]->device_id == usb_id_product) { | 913 | if (peak_usb_adapters_list[i]->device_id == usb_id_product) { |
@@ -920,7 +918,7 @@ static int peak_usb_probe(struct usb_interface *intf, | |||
920 | if (!peak_usb_adapter) { | 918 | if (!peak_usb_adapter) { |
921 | /* should never come except device_id bad usage in this file */ | 919 | /* should never come except device_id bad usage in this file */ |
922 | pr_err("%s: didn't find device id. 0x%x in devices list\n", | 920 | pr_err("%s: didn't find device id. 0x%x in devices list\n", |
923 | PCAN_USB_DRIVER_NAME, usb_dev->descriptor.idProduct); | 921 | PCAN_USB_DRIVER_NAME, usb_id_product); |
924 | return -ENODEV; | 922 | return -ENODEV; |
925 | } | 923 | } |
926 | 924 | ||
diff --git a/drivers/net/can/vcan.c b/drivers/net/can/vcan.c index 0eda1b308583..a8cb33264ff1 100644 --- a/drivers/net/can/vcan.c +++ b/drivers/net/can/vcan.c | |||
@@ -152,7 +152,7 @@ static const struct net_device_ops vcan_netdev_ops = { | |||
152 | static void vcan_setup(struct net_device *dev) | 152 | static void vcan_setup(struct net_device *dev) |
153 | { | 153 | { |
154 | dev->type = ARPHRD_CAN; | 154 | dev->type = ARPHRD_CAN; |
155 | dev->mtu = CAN_MTU; | 155 | dev->mtu = CANFD_MTU; |
156 | dev->hard_header_len = 0; | 156 | dev->hard_header_len = 0; |
157 | dev->addr_len = 0; | 157 | dev->addr_len = 0; |
158 | dev->tx_queue_len = 0; | 158 | dev->tx_queue_len = 0; |
diff --git a/drivers/net/can/vxcan.c b/drivers/net/can/vxcan.c index 30cf2368becf..cfe889e8f172 100644 --- a/drivers/net/can/vxcan.c +++ b/drivers/net/can/vxcan.c | |||
@@ -150,7 +150,7 @@ static const struct net_device_ops vxcan_netdev_ops = { | |||
150 | static void vxcan_setup(struct net_device *dev) | 150 | static void vxcan_setup(struct net_device *dev) |
151 | { | 151 | { |
152 | dev->type = ARPHRD_CAN; | 152 | dev->type = ARPHRD_CAN; |
153 | dev->mtu = CAN_MTU; | 153 | dev->mtu = CANFD_MTU; |
154 | dev->hard_header_len = 0; | 154 | dev->hard_header_len = 0; |
155 | dev->addr_len = 0; | 155 | dev->addr_len = 0; |
156 | dev->tx_queue_len = 0; | 156 | dev->tx_queue_len = 0; |
diff --git a/net/can/af_can.c b/net/can/af_can.c index b6406fe33c76..88edac0f3e36 100644 --- a/net/can/af_can.c +++ b/net/can/af_can.c | |||
@@ -872,8 +872,7 @@ static int can_notifier(struct notifier_block *nb, unsigned long msg, | |||
872 | 872 | ||
873 | static int can_pernet_init(struct net *net) | 873 | static int can_pernet_init(struct net *net) |
874 | { | 874 | { |
875 | net->can.can_rcvlists_lock = | 875 | spin_lock_init(&net->can.can_rcvlists_lock); |
876 | __SPIN_LOCK_UNLOCKED(net->can.can_rcvlists_lock); | ||
877 | net->can.can_rx_alldev_list = | 876 | net->can.can_rx_alldev_list = |
878 | kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL); | 877 | kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL); |
879 | 878 | ||