hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/net/can/slcan.c
....@@ -55,6 +55,7 @@
5555 #include <linux/workqueue.h>
5656 #include <linux/can.h>
5757 #include <linux/can/skb.h>
58
+#include <linux/can/can-ml.h>
5859
5960 MODULE_ALIAS_LDISC(N_SLCAN);
6061 MODULE_DESCRIPTION("serial line CAN interface");
....@@ -152,7 +153,7 @@
152153 switch (*cmd) {
153154 case 'r':
154155 cf.can_id = CAN_RTR_FLAG;
155
- /* fallthrough */
156
+ fallthrough;
156157 case 't':
157158 /* store dlc ASCII value and terminate SFF CAN ID string */
158159 cf.can_dlc = sl->rbuff[SLC_CMD_LEN + SLC_SFF_ID_LEN];
....@@ -162,7 +163,7 @@
162163 break;
163164 case 'R':
164165 cf.can_id = CAN_RTR_FLAG;
165
- /* fallthrough */
166
+ fallthrough;
166167 case 'T':
167168 cf.can_id |= CAN_EFF_FLAG;
168169 /* store dlc ASCII value and terminate EFF CAN ID string */
....@@ -345,11 +346,8 @@
345346
346347 rcu_read_lock();
347348 sl = rcu_dereference(tty->disc_data);
348
- if (!sl)
349
- goto out;
350
-
351
- schedule_work(&sl->tx_work);
352
-out:
349
+ if (sl)
350
+ schedule_work(&sl->tx_work);
353351 rcu_read_unlock();
354352 }
355353
....@@ -518,7 +516,9 @@
518516 int i;
519517 char name[IFNAMSIZ];
520518 struct net_device *dev = NULL;
519
+ struct can_ml_priv *can_ml;
521520 struct slcan *sl;
521
+ int size;
522522
523523 for (i = 0; i < maxdev; i++) {
524524 dev = slcan_devs[i];
....@@ -532,12 +532,15 @@
532532 return NULL;
533533
534534 sprintf(name, "slcan%d", i);
535
- dev = alloc_netdev(sizeof(*sl), name, NET_NAME_UNKNOWN, slc_setup);
535
+ size = ALIGN(sizeof(*sl), NETDEV_ALIGN) + sizeof(struct can_ml_priv);
536
+ dev = alloc_netdev(size, name, NET_NAME_UNKNOWN, slc_setup);
536537 if (!dev)
537538 return NULL;
538539
539540 dev->base_addr = i;
540541 sl = netdev_priv(dev);
542
+ can_ml = (void *)sl + ALIGN(sizeof(*sl), NETDEV_ALIGN);
543
+ can_set_ml_priv(dev, can_ml);
541544
542545 /* Initialize channel control data */
543546 sl->magic = SLCAN_MAGIC;