vlan_dev.c (0898782247ae533d1f4e47a06bc5d4870931b284) vlan_dev.c (ab92d68fc22f9afab480153bd82a20f6e2533769)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* -*- linux-c -*-
3 * INET 802.1Q VLAN
4 * Ethernet-type device handling.
5 *
6 * Authors: Ben Greear <greearb@candelatech.com>
7 * Please send support related email to: netdev@vger.kernel.org
8 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html

--- 475 unchanged lines hidden (view full) ---

484}
485
486static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
487{
488 dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
489 dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
490}
491
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* -*- linux-c -*-
3 * INET 802.1Q VLAN
4 * Ethernet-type device handling.
5 *
6 * Authors: Ben Greear <greearb@candelatech.com>
7 * Please send support related email to: netdev@vger.kernel.org
8 * VLAN Home Page: http://www.candelatech.com/~greear/vlan.html

--- 475 unchanged lines hidden (view full) ---

484}
485
486static void vlan_dev_set_rx_mode(struct net_device *vlan_dev)
487{
488 dev_mc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
489 dev_uc_sync(vlan_dev_priv(vlan_dev)->real_dev, vlan_dev);
490}
491
492/*
493 * vlan network devices have devices nesting below it, and are a special
494 * "super class" of normal network devices; split their locks off into a
495 * separate class since they always nest.
496 */
497static struct lock_class_key vlan_netdev_xmit_lock_key;
498static struct lock_class_key vlan_netdev_addr_lock_key;
499
500static void vlan_dev_set_lockdep_one(struct net_device *dev,
501 struct netdev_queue *txq,
502 void *_subclass)
503{
504 lockdep_set_class_and_subclass(&txq->_xmit_lock,
505 &vlan_netdev_xmit_lock_key,
506 *(int *)_subclass);
507}
508
509static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass)
510{
511 lockdep_set_class_and_subclass(&dev->addr_list_lock,
512 &vlan_netdev_addr_lock_key,
513 subclass);
514 netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass);
515}
516
517static int vlan_dev_get_lock_subclass(struct net_device *dev)
518{
519 return vlan_dev_priv(dev)->nest_level;
520}
521
522static const struct header_ops vlan_header_ops = {
523 .create = vlan_dev_hard_header,
524 .parse = eth_header_parse,

--- 79 unchanged lines hidden (view full) ---

604 dev->header_ops = &vlan_header_ops;
605 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
606 }
607
608 dev->netdev_ops = &vlan_netdev_ops;
609
610 SET_NETDEV_DEVTYPE(dev, &vlan_type);
611
492static int vlan_dev_get_lock_subclass(struct net_device *dev)
493{
494 return vlan_dev_priv(dev)->nest_level;
495}
496
497static const struct header_ops vlan_header_ops = {
498 .create = vlan_dev_hard_header,
499 .parse = eth_header_parse,

--- 79 unchanged lines hidden (view full) ---

579 dev->header_ops = &vlan_header_ops;
580 dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN;
581 }
582
583 dev->netdev_ops = &vlan_netdev_ops;
584
585 SET_NETDEV_DEVTYPE(dev, &vlan_type);
586
612 vlan_dev_set_lockdep_class(dev, vlan_dev_get_lock_subclass(dev));
613
614 vlan->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
615 if (!vlan->vlan_pcpu_stats)
616 return -ENOMEM;
617
618 return 0;
619}
620
621static void vlan_dev_uninit(struct net_device *dev)

--- 224 unchanged lines hidden ---
587 vlan->vlan_pcpu_stats = netdev_alloc_pcpu_stats(struct vlan_pcpu_stats);
588 if (!vlan->vlan_pcpu_stats)
589 return -ENOMEM;
590
591 return 0;
592}
593
594static void vlan_dev_uninit(struct net_device *dev)

--- 224 unchanged lines hidden ---