diff options
author | Petr Machata <petrm@mellanox.com> | 2018-12-12 12:02:56 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2018-12-12 19:34:22 -0500 |
commit | 6921351359395a6c6ac72cd275a8393f399cecc7 (patch) | |
tree | 980ee7e316a654327c1824e914e541c2c9a69fc5 /net/switchdev/switchdev.c | |
parent | 479c86dc551c9720765ed19433990eae6a1f899f (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.c | 12 |
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 | ||