From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 1F93441955 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 9ABC941936 MIME-Version: 1.0 Date: Thu, 20 Oct 2022 23:09:40 +0200 From: netdev@kapio-technology.com In-Reply-To: <20221020132538.reirrskemcjwih2m@skbuf> References: <20221018165619.134535-1-netdev@kapio-technology.com> <20221018165619.134535-1-netdev@kapio-technology.com> <20221018165619.134535-11-netdev@kapio-technology.com> <20221018165619.134535-11-netdev@kapio-technology.com> <20221020132538.reirrskemcjwih2m@skbuf> Message-ID: <3e58594c1223f4591e56409cd5061de7@kapio-technology.com> Content-Type: text/plain; charset=US-ASCII; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Bridge] [PATCH v8 net-next 10/12] net: dsa: mv88e6xxx: mac-auth/MAB implementation List-Id: Linux Ethernet Bridging List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladimir Oltean Cc: Andrew Lunn , Alexandre Belloni , Nikolay Aleksandrov , Kurt Kanzenbach , Eric Dumazet , linux-kselftest@vger.kernel.org, Joachim Wiberg , Shuah Khan , Ivan Vecera , Florian Fainelli , Daniel Borkmann , Ido Schimmel , bridge@lists.linux-foundation.org, Russell King , linux-arm-kernel@lists.infradead.org, Roopa Prabhu , kuba@kernel.org, Paolo Abeni , Vivien Didelot , Woojung Huh , Landen Chao , Jiri Pirko , Amit Cohen , Christian Marangi , Hauke Mehrtens , Hans Schultz , Sean Wang , DENG Qingfang , Claudiu Manoil , linux-mediatek@lists.infradead.org, Matthias Brugger , Yuwei Wang , Petr Machata , netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Florent Fourcot , UNGLinuxDriver@microchip.com, davem@davemloft.net On 2022-10-20 15:25, Vladimir Oltean wrote: > > This would not have been needed if dsa_port_set_state() would have > called dsa_port_fast_age(). > > Currently it only does that if dp->learning is true. From previous > conversations I get the idea that with MAB, port learning will be > false. > But I don't understand why; isn't MAB CPU-assisted learning? I'm > looking > at the ocelot hardware support for this and I think it could be > implemented using a similar mechanism, but I certainly don't want to > add > more workarounds such as this in other drivers. > > Are there any other ways to implement MAB other than through CPU > assisted learning? > > We could add one more dp->mab flag which tracks the "mab" brport flag, > and extend dsa_port_set_state() to also call dsa_port_fast_age() in > that > case, but I want to make sure there isn't something extremely obvious > I'm missing about the "learning" flag. > As learning is off on locked ports, see other response, your dp->mab flag idea might be a way to go, just need confirmation that this is needed. >> @@ -6572,8 +6604,10 @@ static int mv88e6xxx_port_bridge_flags(struct >> dsa_switch *ds, int port, >> if (flags.mask & BR_MCAST_FLOOD) { >> bool multicast = !!(flags.val & BR_MCAST_FLOOD); >> >> + mv88e6xxx_reg_lock(chip); >> err = chip->info->ops->port_set_mcast_flood(chip, port, >> multicast); >> + mv88e6xxx_reg_unlock(chip); >> if (err) >> goto out; >> } >> @@ -6581,20 +6615,34 @@ static int mv88e6xxx_port_bridge_flags(struct >> dsa_switch *ds, int port, >> if (flags.mask & BR_BCAST_FLOOD) { >> bool broadcast = !!(flags.val & BR_BCAST_FLOOD); >> >> + mv88e6xxx_reg_lock(chip); >> err = mv88e6xxx_port_broadcast_sync(chip, port, broadcast); >> + mv88e6xxx_reg_unlock(chip); >> if (err) >> goto out; >> } >> >> + if (flags.mask & BR_PORT_MAB) { >> + chip->ports[port].mab = !!(flags.val & BR_PORT_MAB); >> + >> + if (!chip->ports[port].mab) >> + err = mv88e6xxx_atu_locked_entry_flush(ds, port); >> + else >> + err = 0; > > Again, dsa_port_fast_age() is also called when dp->learning is turned > off in dsa_port_bridge_flags(). I don't want to see the mv88e6xxx > driver > doing this manually. > Maybe I am wrong, but I have only been able to trigger fast ageing by setting the STP state of the port to blocked...