[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Wed, 12 Dec 2018 14:12:14 +0100
From: Ivan Vecera <ivecera@...hat.com>
To: Petr Machata <petrm@...lanox.com>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Cc: Jiri Pirko <jiri@...lanox.com>, Ido Schimmel <idosch@...lanox.com>,
"davem@...emloft.net" <davem@...emloft.net>
Subject: Re: [PATCH net-next 4/9] net: switchdev: Add extack to struct
switchdev_notifier_info
On 12. 12. 18 12:52, Petr Machata wrote:
> In order to pass extack to the drivers that need it, add an extack field
> to struct switchdev_notifier_info, and an extack argument to the
> function call_switchdev_blocking_notifiers(). Also add a helper function
> switchdev_notifier_info_to_extack().
>
> Signed-off-by: Petr Machata <petrm@...lanox.com>
> Acked-by: Jiri Pirko <jiri@...lanox.com>
> ---
> drivers/net/vxlan.c | 1 +
> include/net/switchdev.h | 13 +++++++++++--
> net/switchdev/switchdev.c | 7 +++++--
> 3 files changed, 17 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c
> index b56ef684ecac..49d4b5854c62 100644
> --- a/drivers/net/vxlan.c
> +++ b/drivers/net/vxlan.c
> @@ -364,6 +364,7 @@ static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan,
> struct switchdev_notifier_vxlan_fdb_info *fdb_info)
> {
> fdb_info->info.dev = vxlan->dev;
> + fdb_info->info.extack = NULL;
> fdb_info->remote_ip = rd->remote_ip;
> fdb_info->remote_port = rd->remote_port;
> fdb_info->remote_vni = rd->remote_vni;
> diff --git a/include/net/switchdev.h b/include/net/switchdev.h
> index 69016305ad58..4facfa6775e8 100644
> --- a/include/net/switchdev.h
> +++ b/include/net/switchdev.h
> @@ -149,6 +149,7 @@ enum switchdev_notifier_type {
>
> struct switchdev_notifier_info {
> struct net_device *dev;
> + struct netlink_ext_ack *extack;
> };
>
> struct switchdev_notifier_fdb_info {
> @@ -172,6 +173,12 @@ switchdev_notifier_info_to_dev(const struct switchdev_notifier_info *info)
> return info->dev;
> }
>
> +static inline struct netlink_ext_ack *
> +switchdev_notifier_info_to_extack(const struct switchdev_notifier_info *info)
> +{
> + return info->extack;
> +}
> +
> #ifdef CONFIG_NET_SWITCHDEV
>
> void switchdev_deferred_process(void);
> @@ -193,7 +200,8 @@ int call_switchdev_notifiers(unsigned long val, struct net_device *dev,
> int register_switchdev_blocking_notifier(struct notifier_block *nb);
> int unregister_switchdev_blocking_notifier(struct notifier_block *nb);
> int call_switchdev_blocking_notifiers(unsigned long val, struct net_device *dev,
> - struct switchdev_notifier_info *info);
> + struct switchdev_notifier_info *info,
> + struct netlink_ext_ack *extack);
>
> void switchdev_port_fwd_mark_set(struct net_device *dev,
> struct net_device *group_dev,
> @@ -278,7 +286,8 @@ unregister_switchdev_blocking_notifier(struct notifier_block *nb)
> static inline int
> call_switchdev_blocking_notifiers(unsigned long val,
> struct net_device *dev,
> - struct switchdev_notifier_info *info)
> + struct switchdev_notifier_info *info,
> + struct netlink_ext_ack *extack)
> {
> return NOTIFY_DONE;
> }
> diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
> index cb20669bf6ce..aa84acfb6632 100644
> --- a/net/switchdev/switchdev.c
> +++ b/net/switchdev/switchdev.c
> @@ -368,7 +368,7 @@ static int switchdev_port_obj_notify(enum switchdev_notifier_type nt,
> .handled = false,
> };
>
> - rc = call_switchdev_blocking_notifiers(nt, dev, &obj_info.info);
> + rc = call_switchdev_blocking_notifiers(nt, dev, &obj_info.info, extack);
> err = notifier_to_errno(rc);
> if (err) {
> WARN_ON(!obj_info.handled);
> @@ -559,6 +559,7 @@ int call_switchdev_notifiers(unsigned long val, struct net_device *dev,
> struct switchdev_notifier_info *info)
> {
> info->dev = dev;
> + info->extack = NULL;
> return atomic_notifier_call_chain(&switchdev_notif_chain, val, info);
> }
> EXPORT_SYMBOL_GPL(call_switchdev_notifiers);
> @@ -580,9 +581,11 @@ int unregister_switchdev_blocking_notifier(struct notifier_block *nb)
> EXPORT_SYMBOL_GPL(unregister_switchdev_blocking_notifier);
>
> int call_switchdev_blocking_notifiers(unsigned long val, struct net_device *dev,
> - struct switchdev_notifier_info *info)
> + struct switchdev_notifier_info *info,
> + struct netlink_ext_ack *extack)
> {
> info->dev = dev;
> + info->extack = extack;
> return blocking_notifier_call_chain(&switchdev_blocking_notif_chain,
> val, info);
> }
>
Acked-by: Ivan Vecera <ivecera@...hat.com>
Powered by blists - more mailing lists