From: Simon Horman <horms@kernel.org>
To: Ioana Ciornei <ioana.ciornei@nxp.com>
Cc: davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
pabeni@redhat.com, netdev@vger.kernel.org
Subject: Re: [PATCH net-next v2 6/8] dpaa2-switch: reorganize the [pre]changeupper events
Date: Fri, 15 Dec 2023 11:49:39 +0000 [thread overview]
Message-ID: <20231215114939.GB6288@kernel.org> (raw)
In-Reply-To: <20231213121411.3091597-7-ioana.ciornei@nxp.com>
On Wed, Dec 13, 2023 at 02:14:09PM +0200, Ioana Ciornei wrote:
> Create separate functions, dpaa2_switch_port_prechangeupper and
> dpaa2_switch_port_changeupper, to be called directly when a DPSW port
> changes its upper device.
>
> This way we are not open-coding everything in the main event callback
> and we can easily extent when necessary.
>
> Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
> ---
> Changes in v2:
> - none
>
> .../ethernet/freescale/dpaa2/dpaa2-switch.c | 76 +++++++++++++------
> 1 file changed, 52 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
> index d9906573f71f..58c0baee2d61 100644
> --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
> +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-switch.c
> @@ -2180,51 +2180,79 @@ dpaa2_switch_prechangeupper_sanity_checks(struct net_device *netdev,
> return 0;
> }
>
> -static int dpaa2_switch_port_netdevice_event(struct notifier_block *nb,
> - unsigned long event, void *ptr)
> +static int dpaa2_switch_port_prechangeupper(struct net_device *netdev,
> + struct netdev_notifier_changeupper_info *info)
> {
> - struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
> - struct netdev_notifier_changeupper_info *info = ptr;
> struct netlink_ext_ack *extack;
> struct net_device *upper_dev;
> int err = 0;
nit: I don't think that err needs to be initialised here.
>
> if (!dpaa2_switch_port_dev_check(netdev))
> - return NOTIFY_DONE;
> + return 0;
>
> extack = netdev_notifier_info_to_extack(&info->info);
> -
> - switch (event) {
> - case NETDEV_PRECHANGEUPPER:
> - upper_dev = info->upper_dev;
> - if (!netif_is_bridge_master(upper_dev))
> - break;
> -
> + upper_dev = info->upper_dev;
> + if (netif_is_bridge_master(upper_dev)) {
> err = dpaa2_switch_prechangeupper_sanity_checks(netdev,
> upper_dev,
> extack);
> if (err)
> - goto out;
> + return err;
>
> if (!info->linking)
> dpaa2_switch_port_pre_bridge_leave(netdev);
> + }
FWIIW, I think that a more idomatic flow would be to return if
netif_is_bridge_master() is false. Something like this (completely untested!):
if (!netif_is_bridge_master(upper_dev))
return 0;
err = dpaa2_switch_prechangeupper_sanity_checks(netdev, upper_dev,
extack);
if (err)
return err;
if (!info->linking)
dpaa2_switch_port_pre_bridge_leave(netdev);
> +
> + return 0;
> +}
> +
> +static int dpaa2_switch_port_changeupper(struct net_device *netdev,
> + struct netdev_notifier_changeupper_info *info)
> +{
> + struct netlink_ext_ack *extack;
> + struct net_device *upper_dev;
> + int err = 0;
nit: I don't think err is needed in this function it's value never changes.
> +
> + if (!dpaa2_switch_port_dev_check(netdev))
> + return 0;
> +
> + extack = netdev_notifier_info_to_extack(&info->info);
> +
> + upper_dev = info->upper_dev;
> + if (netif_is_bridge_master(upper_dev)) {
> + if (info->linking)
> + return dpaa2_switch_port_bridge_join(netdev,
> + upper_dev,
> + extack);
> + else
> + return dpaa2_switch_port_bridge_leave(netdev);
> + }
> +
> + return err;
> +}
In a similar vein to my comment above, FWIIW, I would have
gone for something more like this (completely untested!).
if (!netif_is_bridge_master(upper_dev))
return 0;
if (info->linking)
return dpaa2_switch_port_bridge_join(netdev, upper_dev,
extack);
return dpaa2_switch_port_bridge_leave(netdev);
> +
> +static int dpaa2_switch_port_netdevice_event(struct notifier_block *nb,
> + unsigned long event, void *ptr)
> +{
> + struct net_device *netdev = netdev_notifier_info_to_dev(ptr);
> + int err = 0;
> +
> + switch (event) {
> + case NETDEV_PRECHANGEUPPER:
> + err = dpaa2_switch_port_prechangeupper(netdev, ptr);
> + if (err)
> + return notifier_from_errno(err);
>
> break;
> case NETDEV_CHANGEUPPER:
> - upper_dev = info->upper_dev;
> - if (netif_is_bridge_master(upper_dev)) {
> - if (info->linking)
> - err = dpaa2_switch_port_bridge_join(netdev,
> - upper_dev,
> - extack);
> - else
> - err = dpaa2_switch_port_bridge_leave(netdev);
> - }
> + err = dpaa2_switch_port_changeupper(netdev, ptr);
> + if (err)
> + return notifier_from_errno(err);
> +
> break;
> }
>
> -out:
> - return notifier_from_errno(err);
> + return NOTIFY_DONE;
> }
>
> struct ethsw_switchdev_event_work {
> --
> 2.34.1
>
next prev parent reply other threads:[~2023-12-15 11:49 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-13 12:14 [PATCH net-next v2 0/8] dpaa2-switch: small improvements Ioana Ciornei
2023-12-13 12:14 ` [PATCH net-next v2 1/8] dpaa2-switch: set interface MAC address only on endpoint change Ioana Ciornei
2023-12-15 11:57 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 2/8] dpaa2-switch: declare the netdev as IFF_LIVE_ADDR_CHANGE capable Ioana Ciornei
2023-12-15 11:57 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 3/8] dpaa2-switch: print an error when the vlan is already configured Ioana Ciornei
2023-12-15 11:58 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 4/8] dpaa2-switch: add ENDPOINT_CHANGED to the irq_mask Ioana Ciornei
2023-12-15 11:51 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 5/8] dpaa2-switch: do not clear any interrupts automatically Ioana Ciornei
2023-12-15 11:31 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 6/8] dpaa2-switch: reorganize the [pre]changeupper events Ioana Ciornei
2023-12-15 11:49 ` Simon Horman [this message]
2023-12-15 12:08 ` Ioana Ciornei
2023-12-18 8:33 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 7/8] dpaa2-switch: move a check to the prechangeupper stage Ioana Ciornei
2023-12-15 11:58 ` Simon Horman
2023-12-13 12:14 ` [PATCH net-next v2 8/8] dpaa2-switch: cleanup the egress flood of an unused FDB Ioana Ciornei
2023-12-15 11:58 ` Simon Horman
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=20231215114939.GB6288@kernel.org \
--to=horms@kernel.org \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=ioana.ciornei@nxp.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.