static void vlan_dev_set_lockdep_class(struct net_device *dev, int subclass) { lockdep_set_class_and_subclass(&dev->addr_list_lock, &vlan_netdev_addr_lock_key, subclass); netdev_for_each_tx_queue(dev, vlan_dev_set_lockdep_one, &subclass); }
static void vlan_dev_set_lockdep_one(struct net_device *dev, struct netdev_queue *txq, void *_subclass) { lockdep_set_class_and_subclass(&txq->_xmit_lock, &vlan_netdev_xmit_lock_key, *(int *)_subclass); }
static int vlan_dev_init(struct net_device *dev) { struct net_device *real_dev = vlan_dev_info(dev)->real_dev; int subclass = 0; /* IFF_BROADCAST|IFF_MULTICAST; ??? */ dev->flags = real_dev->flags & ~(IFF_UP | IFF_PROMISC | IFF_ALLMULTI); dev->iflink = real_dev->ifindex; dev->state = (real_dev->state & ((1<<__LINK_STATE_NOCARRIER) | (1<<__LINK_STATE_DORMANT))) | (1<<__LINK_STATE_PRESENT); /* ipv6 shared card related stuff */ dev->dev_id = real_dev->dev_id; if (is_zero_ether_addr(dev->dev_addr)) memcpy(dev->dev_addr, real_dev->dev_addr, dev->addr_len); if (is_zero_ether_addr(dev->broadcast)) memcpy(dev->broadcast, real_dev->broadcast, dev->addr_len); if (real_dev->features & NETIF_F_HW_VLAN_TX) { dev->header_ops = real_dev->header_ops; dev->hard_header_len = real_dev->hard_header_len; dev->hard_start_xmit = vlan_dev_hwaccel_hard_start_xmit; } else { dev->header_ops = &vlan_header_ops; dev->hard_header_len = real_dev->hard_header_len + VLAN_HLEN; dev->hard_start_xmit = vlan_dev_hard_start_xmit; } if (real_dev->priv_flags & IFF_802_1Q_VLAN) subclass = 1; lockdep_set_class_and_subclass(&dev->_xmit_lock, &vlan_netdev_xmit_lock_key, subclass); return 0; }