[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220409110444.5uf62kg5xjuvwysk@skbuf>
Date: Sat, 9 Apr 2022 11:04:45 +0000
From: Vladimir Oltean <vladimir.oltean@....com>
To: kernel test robot <lkp@...el.com>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"llvm@...ts.linux.dev" <llvm@...ts.linux.dev>,
"kbuild-all@...ts.01.org" <kbuild-all@...ts.01.org>,
Jakub Kicinski <kuba@...nel.org>,
Florian Fainelli <f.fainelli@...il.com>,
Andrew Lunn <andrew@...n.ch>,
Vivien Didelot <vivien.didelot@...il.com>,
Vladimir Oltean <olteanv@...il.com>,
"UNGLinuxDriver@...rochip.com" <UNGLinuxDriver@...rochip.com>,
Paolo Abeni <pabeni@...hat.com>,
Roopa Prabhu <roopa@...dia.com>,
Nikolay Aleksandrov <razor@...ckwall.org>,
Jiri Pirko <jiri@...dia.com>, Ido Schimmel <idosch@...dia.com>,
Tobias Waldekranz <tobias@...dekranz.com>,
Mattias Forsblad <mattias.forsblad@...il.com>
Subject: Re: [PATCH net-next 6/6] net: bridge: avoid uselessly making
offloaded ports promiscuous
On Sat, Apr 09, 2022 at 06:17:15PM +0800, kernel test robot wrote:
> >> net/bridge/br_if.c:145:10: error: no member named 'offload_count' in 'struct net_bridge_port'
> if (p->offload_count) {
> ~ ^
> 130 /* When a port is added or removed or when certain port flags
> 131 * change, this function is called to automatically manage
> 132 * promiscuity setting of all the bridge ports. We are always called
> 133 * under RTNL so can skip using rcu primitives.
> 134 */
> 135 void br_manage_promisc(struct net_bridge *br)
> 136 {
> 137 struct net_bridge_port *p;
> 138
> 139 list_for_each_entry(p, &br->port_list, list) {
> 140 /* Offloaded ports have a separate address database for
> 141 * forwarding, which is managed through switchdev and not
> 142 * through dev_uc_add(), so the promiscuous concept makes no
> 143 * sense for them. Avoid updating promiscuity in that case.
> 144 */
> > 145 if (p->offload_count) {
Good point. Please imagine there's a static inline nbp_get_offload_count()
that returns 0 when CONFIG_NET_SWITCHDEV=n. I'll address this for v2.
> 146 br_port_clear_promisc(p);
> 147 continue;
> 148 }
> 149
> 150 /* If bridge is promiscuous, unconditionally place all ports
> 151 * in promiscuous mode too. This allows the bridge device to
> 152 * locally receive all unknown traffic.
> 153 */
> 154 if (br->dev->flags & IFF_PROMISC) {
> 155 br_port_set_promisc(p);
> 156 continue;
> 157 }
> 158
> 159 /* If vlan filtering is disabled, place all ports in
> 160 * promiscuous mode.
> 161 */
> 162 if (!br_vlan_enabled(br->dev)) {
> 163 br_port_set_promisc(p);
> 164 continue;
> 165 }
> 166
> 167 /* If the number of auto-ports is <= 1, then all other ports
> 168 * will have their output configuration statically specified
> 169 * through fdbs. Since ingress on the auto-port becomes
> 170 * forwarding/egress to other ports and egress configuration is
> 171 * statically known, we can say that ingress configuration of
> 172 * the auto-port is also statically known.
> 173 * This lets us disable promiscuous mode and write this config
> 174 * to hw.
> 175 */
> 176 if (br->auto_cnt == 0 ||
> 177 (br->auto_cnt == 1 && br_auto_port(p)))
> 178 br_port_clear_promisc(p);
> 179 else
> 180 br_port_set_promisc(p);
> 181 }
> 182 }
> 183
Powered by blists - more mailing lists