From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.8 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 46291C4361B for ; Tue, 15 Dec 2020 15:57:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 158B8224F4 for ; Tue, 15 Dec 2020 15:57:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730653AbgLOP5b (ORCPT ); Tue, 15 Dec 2020 10:57:31 -0500 Received: from relay6-d.mail.gandi.net ([217.70.183.198]:45699 "EHLO relay6-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730393AbgLOP5F (ORCPT ); Tue, 15 Dec 2020 10:57:05 -0500 X-Originating-IP: 86.202.109.140 Received: from localhost (lfbn-lyo-1-13-140.w86-202.abo.wanadoo.fr [86.202.109.140]) (Authenticated sender: alexandre.belloni@bootlin.com) by relay6-d.mail.gandi.net (Postfix) with ESMTPSA id DB137C0017; Tue, 15 Dec 2020 15:56:17 +0000 (UTC) Date: Tue, 15 Dec 2020 16:56:17 +0100 From: Alexandre Belloni To: Vladimir Oltean Cc: Tobias Waldekranz , "David S . Miller" , Jakub Kicinski , netdev@vger.kernel.org, UNGLinuxDriver@microchip.com, Andrew Lunn , Florian Fainelli , Vivien Didelot , Claudiu Manoil Subject: Re: [RFC PATCH net-next 04/16] net: mscc: ocelot: use a switch-case statement in ocelot_netdevice_event Message-ID: <20201215155617.GH1781038@piout.net> References: <20201208120802.1268708-1-vladimir.oltean@nxp.com> <20201208120802.1268708-5-vladimir.oltean@nxp.com> <20201215155225.GG1781038@piout.net> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20201215155225.GG1781038@piout.net> Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 15/12/2020 16:52:26+0100, Alexandre Belloni wrote: > On 08/12/2020 14:07:50+0200, Vladimir Oltean wrote: > > Make ocelot's net device event handler more streamlined by structuring > > it in a similar way with others. The inspiration here was > > dsa_slave_netdevice_event. > > > > Signed-off-by: Vladimir Oltean > > --- > > drivers/net/ethernet/mscc/ocelot_net.c | 68 +++++++++++++++++--------- > > 1 file changed, 45 insertions(+), 23 deletions(-) > > > > diff --git a/drivers/net/ethernet/mscc/ocelot_net.c b/drivers/net/ethernet/mscc/ocelot_net.c > > index 50765a3b1c44..47b620967156 100644 > > --- a/drivers/net/ethernet/mscc/ocelot_net.c > > +++ b/drivers/net/ethernet/mscc/ocelot_net.c > > @@ -1030,49 +1030,71 @@ static int ocelot_netdevice_changeupper(struct net_device *dev, > > info->upper_dev); > > } > > > > - return err; > > + return notifier_from_errno(err); > > +} > > + > > +static int > > +ocelot_netdevice_lag_changeupper(struct net_device *dev, > > + struct netdev_notifier_changeupper_info *info) > > +{ > > + struct net_device *lower; > > + struct list_head *iter; > > + int err = NOTIFY_DONE; > > + > > + netdev_for_each_lower_dev(dev, lower, iter) { > > + err = ocelot_netdevice_changeupper(lower, info); > > + if (err) > > + return notifier_from_errno(err); > > + } > > + > > + return NOTIFY_DONE; > > } > > > > static int ocelot_netdevice_event(struct notifier_block *unused, > > unsigned long event, void *ptr) > > { > > - struct netdev_notifier_changeupper_info *info = ptr; > > struct net_device *dev = netdev_notifier_info_to_dev(ptr); > > - int ret = 0; > > > > - if (event == NETDEV_PRECHANGEUPPER && > > - ocelot_netdevice_dev_check(dev) && > > - netif_is_lag_master(info->upper_dev)) { > > - struct netdev_lag_upper_info *lag_upper_info = info->upper_info; > > + switch (event) { > > + case NETDEV_PRECHANGEUPPER: { > > + struct netdev_notifier_changeupper_info *info = ptr; > > + struct netdev_lag_upper_info *lag_upper_info; > > struct netlink_ext_ack *extack; > > > > + if (!ocelot_netdevice_dev_check(dev)) > > + break; > > + > > + if (!netif_is_lag_master(info->upper_dev)) > > + break; > > + > > + lag_upper_info = info->upper_info; > > + > > if (lag_upper_info && > > lag_upper_info->tx_type != NETDEV_LAG_TX_TYPE_HASH) { > > extack = netdev_notifier_info_to_extack(&info->info); > > NL_SET_ERR_MSG_MOD(extack, "LAG device using unsupported Tx type"); > > > > - ret = -EINVAL; > > - goto notify; > > + return NOTIFY_BAD; > > This changes the return value in case of error, I'm not sure how > important this is. > Ok, this is removed anyway, so Reviewed-by: Alexandre Belloni > > } > > + > > + break; > > } > > + case NETDEV_CHANGEUPPER: { > > + struct netdev_notifier_changeupper_info *info = ptr; > > > > - if (event == NETDEV_CHANGEUPPER) { > > - if (netif_is_lag_master(dev)) { > > - struct net_device *slave; > > - struct list_head *iter; > > + if (ocelot_netdevice_dev_check(dev)) > > + return ocelot_netdevice_changeupper(dev, info); > > > > - netdev_for_each_lower_dev(dev, slave, iter) { > > - ret = ocelot_netdevice_changeupper(slave, event, info); > > - if (ret) > > - goto notify; > > - } > > - } else { > > - ret = ocelot_netdevice_changeupper(dev, event, info); > > - } > > + if (netif_is_lag_master(dev)) > > + return ocelot_netdevice_lag_changeupper(dev, info); > > + > > + break; > > + } > > + default: > > + break; > > } > > > > -notify: > > - return notifier_from_errno(ret); > > + return NOTIFY_DONE; > > This changes the return value from NOTIFY_OK to NOTIFY_DONE but this is > probably what we want. > > > } > > > > struct notifier_block ocelot_netdevice_nb __read_mostly = { > > -- > > 2.25.1 > > > > -- > Alexandre Belloni, Bootlin > Embedded Linux and Kernel engineering > https://bootlin.com -- Alexandre Belloni, Bootlin Embedded Linux and Kernel engineering https://bootlin.com