aboutsummaryrefslogtreecommitdiffstats
path: root/net/switchdev/switchdev.c
diff options
context:
space:
mode:
authorPetr Machata <petrm@mellanox.com>2018-12-12 12:02:56 -0500
committerDavid S. Miller <davem@davemloft.net>2018-12-12 19:34:22 -0500
commit6921351359395a6c6ac72cd275a8393f399cecc7 (patch)
tree980ee7e316a654327c1824e914e541c2c9a69fc5 /net/switchdev/switchdev.c
parent479c86dc551c9720765ed19433990eae6a1f899f (diff)
net: switchdev: Add extack to switchdev_handle_port_obj_add() callback
Drivers use switchdev_handle_port_obj_add() to handle recursive descent through lower devices. Change this function prototype to take add_cb that itself takes an extack argument. Decode extack from switchdev_notifier_port_obj_info and pass it to add_cb. Update mlxsw and ocelot drivers which use this helper. 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>
Diffstat (limited to 'net/switchdev/switchdev.c')
-rw-r--r--net/switchdev/switchdev.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/net/switchdev/switchdev.c b/net/switchdev/switchdev.c
index aa84acfb6632..5df9d1138ac9 100644
--- a/net/switchdev/switchdev.c
+++ b/net/switchdev/switchdev.c
@@ -616,16 +616,21 @@ static int __switchdev_handle_port_obj_add(struct net_device *dev,
616 bool (*check_cb)(const struct net_device *dev), 616 bool (*check_cb)(const struct net_device *dev),
617 int (*add_cb)(struct net_device *dev, 617 int (*add_cb)(struct net_device *dev,
618 const struct switchdev_obj *obj, 618 const struct switchdev_obj *obj,
619 struct switchdev_trans *trans)) 619 struct switchdev_trans *trans,
620 struct netlink_ext_ack *extack))
620{ 621{
622 struct netlink_ext_ack *extack;
621 struct net_device *lower_dev; 623 struct net_device *lower_dev;
622 struct list_head *iter; 624 struct list_head *iter;
623 int err = -EOPNOTSUPP; 625 int err = -EOPNOTSUPP;
624 626
627 extack = switchdev_notifier_info_to_extack(&port_obj_info->info);
628
625 if (check_cb(dev)) { 629 if (check_cb(dev)) {
626 /* This flag is only checked if the return value is success. */ 630 /* This flag is only checked if the return value is success. */
627 port_obj_info->handled = true; 631 port_obj_info->handled = true;
628 return add_cb(dev, port_obj_info->obj, port_obj_info->trans); 632 return add_cb(dev, port_obj_info->obj, port_obj_info->trans,
633 extack);
629 } 634 }
630 635
631 /* Switch ports might be stacked under e.g. a LAG. Ignore the 636 /* Switch ports might be stacked under e.g. a LAG. Ignore the
@@ -650,7 +655,8 @@ int switchdev_handle_port_obj_add(struct net_device *dev,
650 bool (*check_cb)(const struct net_device *dev), 655 bool (*check_cb)(const struct net_device *dev),
651 int (*add_cb)(struct net_device *dev, 656 int (*add_cb)(struct net_device *dev,
652 const struct switchdev_obj *obj, 657 const struct switchdev_obj *obj,
653 struct switchdev_trans *trans)) 658 struct switchdev_trans *trans,
659 struct netlink_ext_ack *extack))
654{ 660{
655 int err; 661 int err;
656 662