From: Vladimir Oltean <olteanv@gmail.com>
To: Lukasz Majewski <lukma@denx.de>
Cc: Jakub Kicinski <kuba@kernel.org>,
netdev@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>,
Eric Dumazet <edumazet@google.com>,
"David S. Miller" <davem@davemloft.net>,
Oleksij Rempel <o.rempel@pengutronix.de>,
Tristram.Ha@microchip.com,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Simon Horman <horms@kernel.org>,
Dan Carpenter <dan.carpenter@linaro.org>,
"Ricardo B. Marliere" <ricardo@marliere.net>,
Casper Andersson <casper.casan@gmail.com>,
linux-kernel@vger.kernel.org,
Woojung Huh <woojung.huh@microchip.com>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew@lunn.ch>
Subject: Re: [PATCH v2 net-next] net: dsa: Allow only up to two HSR HW offloaded ports for KSZ9477
Date: Thu, 20 Jun 2024 00:54:33 +0300 [thread overview]
Message-ID: <20240619215433.6xpadwyvudtybd72@skbuf> (raw)
In-Reply-To: <20240619154814.dvjcry7ahvtznfxb@skbuf>
On Wed, Jun 19, 2024 at 06:48:14PM +0300, Vladimir Oltean wrote:
> You would have to make hsr_portdev_setup() call something else rather
> than netdev_upper_dev_link(), because that eats the "void *upper_info"
> argument when calling __netdev_upper_dev_link(). Possibly create a new
> netdev_upper_dev_link_info() ("link upper dev with extra info")
> function, which only HSR calls with a new info structure. Then, the DSA
> core has access to that and implicitly to the port type, and from there
> on, you can apply the proper restriction.
Yet another comment. TL;DR: I think we should also make HSR use
netdev_master_upper_dev_link() anyway (as a separate change), and thus,
no new API is needed, since that function is able to pass a void
*upper_info already.
Explanation: "master" uppers are called like that because any lower
interface can have only at most one. Bridge, team, bond, etc are all
"master" uppers. So an interface cannot have 2 bridge uppers, or a team
and a bond upper at the same time, etc. Compare this to regular upper
interfaces like VLANs. You can have as many VLAN upper interfaces as you
want (including if you already have a master upper interface).
The point is that, AFAIU, the "master" upper restriction comes from the
use of an rx_handler. You can't chain RX handlers, and a lower netdev
can have a single one, so if the upper netdev uses an RX handler, it'd
better make sure that no one else does, or it does but in a coordinated
manner.
Upper drivers like macvlan do use RX handlers, and are not "master"
uppers nonetheless. This is not a contradiction in terms, because they
take care to set up the RX handler of the lower interface only once.
HSR is not as careful, and uses an rx_handler very plainly, but also
does not mark itself as a "master" upper. An attempt to put a physical
interface under a HSR upper, and then under a second one (without
removing it from the first one), would fail the second time around due
to hsr_portdev_setup() -> netdev_rx_handler_register() ->
netdev_is_rx_handler_busy() -> -EBUSY.
Nor does that configuration appear to make too much sense to me, so you
could mark HSR as master, in order for that second attempt to fail one
step earlier: hsr_portdev_setup() -> netdev_master_upper_dev_link() ->
__netdev_master_upper_dev_get() -> -EBUSY.
With that in place, you also have free access now to the "upper_info"
parameter, for what was discussed earlier to be propagated down.
prev parent reply other threads:[~2024-06-19 21:54 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-19 13:42 [PATCH v2 net-next] net: dsa: Allow only up to two HSR HW offloaded ports for KSZ9477 Lukasz Majewski
2024-06-19 13:54 ` Dan Carpenter
2024-06-19 14:27 ` Andrew Lunn
2024-06-19 14:42 ` Vladimir Oltean
2024-06-19 15:10 ` Lukasz Majewski
2024-06-19 15:48 ` Vladimir Oltean
2024-06-19 15:59 ` Vladimir Oltean
2024-06-20 7:59 ` Lukasz Majewski
2024-06-20 9:02 ` Vladimir Oltean
2024-06-20 12:00 ` Lukasz Majewski
2024-06-20 12:06 ` Vladimir Oltean
2024-06-20 13:28 ` Lukasz Majewski
2024-06-20 14:33 ` Vladimir Oltean
2024-06-21 8:31 ` Lukasz Majewski
2024-06-21 8:43 ` Vladimir Oltean
2024-06-19 21:54 ` Vladimir Oltean [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240619215433.6xpadwyvudtybd72@skbuf \
--to=olteanv@gmail.com \
--cc=Tristram.Ha@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=andrew@lunn.ch \
--cc=bigeasy@linutronix.de \
--cc=casper.casan@gmail.com \
--cc=dan.carpenter@linaro.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lukma@denx.de \
--cc=netdev@vger.kernel.org \
--cc=o.rempel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=ricardo@marliere.net \
--cc=woojung.huh@microchip.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox