[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <6ca77a33-9c7c-6fbf-c6a0-3483cbc4f6e1@redhat.com>
Date: Thu, 8 Jun 2017 11:30:39 +0200
From: Ivan Vecera <ivecera@...hat.com>
To: Jiri Pirko <jiri@...nulli.us>, netdev@...r.kernel.org
Cc: davem@...emloft.net, idosch@...lanox.com, arkadis@...lanox.com,
mlxsw@...lanox.com, roopa@...ulusnetworks.com,
stephen@...workplumber.org, nikolay@...ulusnetworks.com
Subject: Re: [patch net-next v2 04/19] net: switchdev: Change notifier chain
to be atomic
On 8.6.2017 08:44, Jiri Pirko wrote:
> From: Arkadi Sharshevsky <arkadis@...lanox.com>
>
> In order to use the switchdev notifier chain for FDB sync with the
> device it has to be changed to atomic. The is done because the bridge
> can learn new FDBs in atomic context.
>
> Signed-off-by: Arkadi Sharshevsky <arkadis@...lanox.com>
> Reviewed-by: Ido Schimmel <idosch@...lanox.com>
> Reviewed-by: Ivan Vecera <ivecera@...hat.com>
> Signed-off-by: Jiri Pirko <jiri@...lanox.com>
> ---
> net/switchdev/switchdev.c | 30 ++++++------------------------
> 1 file changed, 6 insertions(+), 24 deletions(-)
>
> diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
> index 8d40a7d..25dc67e 100644
> --- a/net/switchdev/switchdev.c
> +++ b/net/switchdev/switchdev.c
> @@ -571,24 +571,17 @@ int switchdev_port_obj_dump(struct net_device *dev, struct switchdev_obj *obj,
> }
> EXPORT_SYMBOL_GPL(switchdev_port_obj_dump);
>
> -static RAW_NOTIFIER_HEAD(switchdev_notif_chain);
> +static ATOMIC_NOTIFIER_HEAD(switchdev_notif_chain);
>
> /**
> * register_switchdev_notifier - Register notifier
> * @nb: notifier_block
> *
> - * Register switch device notifier. This should be used by code
> - * which needs to monitor events happening in particular device.
> - * Return values are same as for atomic_notifier_chain_register().
> + * Register switch device notifier.
> */
> int register_switchdev_notifier(struct notifier_block *nb)
> {
> - int err;
> -
> - rtnl_lock();
> - err = raw_notifier_chain_register(&switchdev_notif_chain, nb);
> - rtnl_unlock();
> - return err;
> + return atomic_notifier_chain_register(&switchdev_notif_chain, nb);
> }
> EXPORT_SYMBOL_GPL(register_switchdev_notifier);
>
> @@ -597,16 +590,10 @@ EXPORT_SYMBOL_GPL(register_switchdev_notifier);
> * @nb: notifier_block
> *
> * Unregister switch device notifier.
> - * Return values are same as for atomic_notifier_chain_unregister().
> */
> int unregister_switchdev_notifier(struct notifier_block *nb)
> {
> - int err;
> -
> - rtnl_lock();
> - err = raw_notifier_chain_unregister(&switchdev_notif_chain, nb);
> - rtnl_unlock();
> - return err;
> + return atomic_notifier_chain_unregister(&switchdev_notif_chain, nb);
> }
> EXPORT_SYMBOL_GPL(unregister_switchdev_notifier);
>
> @@ -616,18 +603,13 @@ EXPORT_SYMBOL_GPL(unregister_switchdev_notifier);
> * @dev: port device
> * @info: notifier information data
> *
> - * Call all network notifier blocks. This should be called by driver
> - * when it needs to propagate hardware event.
> - * Return values are same as for atomic_notifier_call_chain().
> - * rtnl_lock must be held.
> + * Call all network notifier blocks.
> */
> int call_switchdev_notifiers(unsigned long val, struct net_device *dev,
> struct switchdev_notifier_info *info)
> {
> - ASSERT_RTNL();
> -
> info->dev = dev;
> - return raw_notifier_call_chain(&switchdev_notif_chain, val, info);
> + return atomic_notifier_call_chain(&switchdev_notif_chain, val, info);
> }
> EXPORT_SYMBOL_GPL(call_switchdev_notifiers);
>
>
Reviewed-by: Ivan Vecera <ivecera@...hat.com>
Powered by blists - more mailing lists