mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 14:31:46 +00:00
net: switchdev: Add extack to struct switchdev_notifier_info
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@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Acked-by: Ivan Vecera <ivecera@redhat.com> Reviewed-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
69b7320e14
commit
479c86dc55
3 changed files with 17 additions and 4 deletions
|
@ -364,6 +364,7 @@ static void vxlan_fdb_switchdev_notifier_info(const struct vxlan_dev *vxlan,
|
||||||
struct switchdev_notifier_vxlan_fdb_info *fdb_info)
|
struct switchdev_notifier_vxlan_fdb_info *fdb_info)
|
||||||
{
|
{
|
||||||
fdb_info->info.dev = vxlan->dev;
|
fdb_info->info.dev = vxlan->dev;
|
||||||
|
fdb_info->info.extack = NULL;
|
||||||
fdb_info->remote_ip = rd->remote_ip;
|
fdb_info->remote_ip = rd->remote_ip;
|
||||||
fdb_info->remote_port = rd->remote_port;
|
fdb_info->remote_port = rd->remote_port;
|
||||||
fdb_info->remote_vni = rd->remote_vni;
|
fdb_info->remote_vni = rd->remote_vni;
|
||||||
|
|
|
@ -149,6 +149,7 @@ enum switchdev_notifier_type {
|
||||||
|
|
||||||
struct switchdev_notifier_info {
|
struct switchdev_notifier_info {
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
|
struct netlink_ext_ack *extack;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct switchdev_notifier_fdb_info {
|
struct switchdev_notifier_fdb_info {
|
||||||
|
@ -172,6 +173,12 @@ switchdev_notifier_info_to_dev(const struct switchdev_notifier_info *info)
|
||||||
return info->dev;
|
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
|
#ifdef CONFIG_NET_SWITCHDEV
|
||||||
|
|
||||||
void switchdev_deferred_process(void);
|
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 register_switchdev_blocking_notifier(struct notifier_block *nb);
|
||||||
int unregister_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,
|
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,
|
void switchdev_port_fwd_mark_set(struct net_device *dev,
|
||||||
struct net_device *group_dev,
|
struct net_device *group_dev,
|
||||||
|
@ -278,7 +286,8 @@ unregister_switchdev_blocking_notifier(struct notifier_block *nb)
|
||||||
static inline int
|
static inline int
|
||||||
call_switchdev_blocking_notifiers(unsigned long val,
|
call_switchdev_blocking_notifiers(unsigned long val,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
struct switchdev_notifier_info *info)
|
struct switchdev_notifier_info *info,
|
||||||
|
struct netlink_ext_ack *extack)
|
||||||
{
|
{
|
||||||
return NOTIFY_DONE;
|
return NOTIFY_DONE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -368,7 +368,7 @@ static int switchdev_port_obj_notify(enum switchdev_notifier_type nt,
|
||||||
.handled = false,
|
.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);
|
err = notifier_to_errno(rc);
|
||||||
if (err) {
|
if (err) {
|
||||||
WARN_ON(!obj_info.handled);
|
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)
|
struct switchdev_notifier_info *info)
|
||||||
{
|
{
|
||||||
info->dev = dev;
|
info->dev = dev;
|
||||||
|
info->extack = NULL;
|
||||||
return atomic_notifier_call_chain(&switchdev_notif_chain, val, info);
|
return atomic_notifier_call_chain(&switchdev_notif_chain, val, info);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(call_switchdev_notifiers);
|
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);
|
EXPORT_SYMBOL_GPL(unregister_switchdev_blocking_notifier);
|
||||||
|
|
||||||
int call_switchdev_blocking_notifiers(unsigned long val, struct net_device *dev,
|
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->dev = dev;
|
||||||
|
info->extack = extack;
|
||||||
return blocking_notifier_call_chain(&switchdev_blocking_notif_chain,
|
return blocking_notifier_call_chain(&switchdev_blocking_notif_chain,
|
||||||
val, info);
|
val, info);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue