net: bridge: add bitfield for options and convert vlan opts
Bridge options have usually been added as separate fields all over the net_bridge struct taking up space and ending up in different cache lines. Let's move them to a single bitfield to save up space and speedup lookups. This patch adds a simple API for option modifying and retrieving using bitops and converts the first user of the API - the bridge vlan options (vlan_enabled and vlan_stats_enabled). Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com> Reviewed-by: Stephen Hemminger <stephen@networkplumber.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
1c1cb6d032
commit
ae75767ec2
@@ -306,16 +306,20 @@ static inline struct net_bridge_port *br_port_get_rtnl_rcu(const struct net_devi
|
||||
rcu_dereference_rtnl(dev->rx_handler_data) : NULL;
|
||||
}
|
||||
|
||||
enum net_bridge_opts {
|
||||
BROPT_VLAN_ENABLED,
|
||||
BROPT_VLAN_STATS_ENABLED,
|
||||
};
|
||||
|
||||
struct net_bridge {
|
||||
spinlock_t lock;
|
||||
spinlock_t hash_lock;
|
||||
struct list_head port_list;
|
||||
struct net_device *dev;
|
||||
struct pcpu_sw_netstats __percpu *stats;
|
||||
unsigned long options;
|
||||
/* These fields are accessed on each packet */
|
||||
#ifdef CONFIG_BRIDGE_VLAN_FILTERING
|
||||
u8 vlan_enabled;
|
||||
u8 vlan_stats_enabled;
|
||||
__be16 vlan_proto;
|
||||
u16 default_pvid;
|
||||
struct net_bridge_vlan_group __rcu *vlgrp;
|
||||
@@ -489,6 +493,14 @@ static inline bool br_vlan_should_use(const struct net_bridge_vlan *v)
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline int br_opt_get(const struct net_bridge *br,
|
||||
enum net_bridge_opts opt)
|
||||
{
|
||||
return test_bit(opt, &br->options);
|
||||
}
|
||||
|
||||
void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on);
|
||||
|
||||
/* br_device.c */
|
||||
void br_dev_setup(struct net_device *dev);
|
||||
void br_dev_delete(struct net_device *dev, struct list_head *list);
|
||||
|
Reference in New Issue
Block a user