diff options
author | Nikolay Aleksandrov | 2018-09-26 17:01:00 +0300 |
---|---|---|
committer | David S. Miller | 2018-09-26 10:04:22 -0700 |
commit | ae75767ec206c6f445973e5e6c5af8a865016e15 (patch) | |
tree | 57826657093c9e7ddbbef377cf6e98fab0d5c5ef /net/bridge/br.c | |
parent | 1c1cb6d0321f4248e8a659a31659dcdac6866c29 (diff) |
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>
Diffstat (limited to 'net/bridge/br.c')
-rw-r--r-- | net/bridge/br.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/net/bridge/br.c b/net/bridge/br.c index b0a0b82e2d91..e411e40333e2 100644 --- a/net/bridge/br.c +++ b/net/bridge/br.c @@ -175,6 +175,22 @@ static struct notifier_block br_switchdev_notifier = { .notifier_call = br_switchdev_event, }; +void br_opt_toggle(struct net_bridge *br, enum net_bridge_opts opt, bool on) +{ + bool cur = !!br_opt_get(br, opt); + + br_debug(br, "toggle option: %d state: %d -> %d\n", + opt, cur, on); + + if (cur == on) + return; + + if (on) + set_bit(opt, &br->options); + else + clear_bit(opt, &br->options); +} + static void __net_exit br_net_exit(struct net *net) { struct net_device *dev; |