br_device.c (0898782247ae533d1f4e47a06bc5d4870931b284) br_device.c (ab92d68fc22f9afab480153bd82a20f6e2533769)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Device handling code
4 * Linux ethernet bridge
5 *
6 * Authors:
7 * Lennert Buytenhek <buytenh@gnu.org>
8 */

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

19#include "br_private.h"
20
21#define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \
22 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM)
23
24const struct nf_br_ops __rcu *nf_br_ops __read_mostly;
25EXPORT_SYMBOL_GPL(nf_br_ops);
26
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Device handling code
4 * Linux ethernet bridge
5 *
6 * Authors:
7 * Lennert Buytenhek <buytenh@gnu.org>
8 */

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

19#include "br_private.h"
20
21#define COMMON_FEATURES (NETIF_F_SG | NETIF_F_FRAGLIST | NETIF_F_HIGHDMA | \
22 NETIF_F_GSO_MASK | NETIF_F_HW_CSUM)
23
24const struct nf_br_ops __rcu *nf_br_ops __read_mostly;
25EXPORT_SYMBOL_GPL(nf_br_ops);
26
27static struct lock_class_key bridge_netdev_addr_lock_key;
28
29/* net device transmit always called with BH disabled */
30netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
31{
32 struct net_bridge *br = netdev_priv(dev);
33 struct net_bridge_fdb_entry *dst;
34 struct net_bridge_mdb_entry *mdst;
35 struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats);
36 const struct nf_br_ops *nf_ops;

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

103 } else {
104 br_flood(br, skb, BR_PKT_UNICAST, false, true);
105 }
106out:
107 rcu_read_unlock();
108 return NETDEV_TX_OK;
109}
110
27/* net device transmit always called with BH disabled */
28netdev_tx_t br_dev_xmit(struct sk_buff *skb, struct net_device *dev)
29{
30 struct net_bridge *br = netdev_priv(dev);
31 struct net_bridge_fdb_entry *dst;
32 struct net_bridge_mdb_entry *mdst;
33 struct pcpu_sw_netstats *brstats = this_cpu_ptr(br->stats);
34 const struct nf_br_ops *nf_ops;

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

101 } else {
102 br_flood(br, skb, BR_PKT_UNICAST, false, true);
103 }
104out:
105 rcu_read_unlock();
106 return NETDEV_TX_OK;
107}
108
111static void br_set_lockdep_class(struct net_device *dev)
112{
113 lockdep_set_class(&dev->addr_list_lock, &bridge_netdev_addr_lock_key);
114}
115
116static int br_dev_init(struct net_device *dev)
117{
118 struct net_bridge *br = netdev_priv(dev);
119 int err;
120
121 br->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
122 if (!br->stats)
123 return -ENOMEM;

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

145
146 err = br_multicast_init_stats(br);
147 if (err) {
148 free_percpu(br->stats);
149 br_vlan_flush(br);
150 br_mdb_hash_fini(br);
151 br_fdb_hash_fini(br);
152 }
109static int br_dev_init(struct net_device *dev)
110{
111 struct net_bridge *br = netdev_priv(dev);
112 int err;
113
114 br->stats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
115 if (!br->stats)
116 return -ENOMEM;

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

138
139 err = br_multicast_init_stats(br);
140 if (err) {
141 free_percpu(br->stats);
142 br_vlan_flush(br);
143 br_mdb_hash_fini(br);
144 br_fdb_hash_fini(br);
145 }
153 br_set_lockdep_class(dev);
154
155 return err;
156}
157
158static void br_dev_uninit(struct net_device *dev)
159{
160 struct net_bridge *br = netdev_priv(dev);
161

--- 298 unchanged lines hidden ---
146
147 return err;
148}
149
150static void br_dev_uninit(struct net_device *dev)
151{
152 struct net_bridge *br = netdev_priv(dev);
153

--- 298 unchanged lines hidden ---