From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ivan Vecera Subject: Re: [PATCH net-next 4/9] net: switchdev: Add extack to struct switchdev_notifier_info Date: Wed, 12 Dec 2018 14:12:14 +0100 Message-ID: References: Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Cc: Jiri Pirko , Ido Schimmel , "davem@davemloft.net" To: Petr Machata , "netdev@vger.kernel.org" Return-path: Received: from mx1.redhat.com ([209.132.183.28]:46704 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726229AbeLLNMR (ORCPT ); Wed, 12 Dec 2018 08:12:17 -0500 In-Reply-To: Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: 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 > Acked-by: Jiri Pirko > --- > 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