In case of subfunction lock will be taken for whole port creation and
removing. Do the same in VF case.

Signed-off-by: Michal Swiatkowski <michal.swiatkow...@linux.intel.com>
---
 drivers/net/ethernet/intel/ice/devlink/devlink.c      | 2 --
 drivers/net/ethernet/intel/ice/devlink/devlink_port.c | 4 ++--
 drivers/net/ethernet/intel/ice/ice_eswitch.c          | 9 +++++++--
 drivers/net/ethernet/intel/ice/ice_repr.c             | 2 --
 4 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink.c 
b/drivers/net/ethernet/intel/ice/devlink/devlink.c
index 704e9ad5144e..f774781ab514 100644
--- a/drivers/net/ethernet/intel/ice/devlink/devlink.c
+++ b/drivers/net/ethernet/intel/ice/devlink/devlink.c
@@ -794,10 +794,8 @@ int ice_devlink_rate_init_tx_topology(struct devlink 
*devlink, struct ice_vsi *v
 
        tc_node = pi->root->children[0];
        mutex_lock(&pi->sched_lock);
-       devl_lock(devlink);
        for (i = 0; i < tc_node->num_children; i++)
                ice_traverse_tx_tree(devlink, tc_node->children[i], tc_node, 
pf);
-       devl_unlock(devlink);
        mutex_unlock(&pi->sched_lock);
 
        return 0;
diff --git a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c 
b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
index 13e6790d3cae..c9fbeebf7fb9 100644
--- a/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
+++ b/drivers/net/ethernet/intel/ice/devlink/devlink_port.c
@@ -407,7 +407,7 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
        devlink_port_attrs_set(devlink_port, &attrs);
        devlink = priv_to_devlink(pf);
 
-       err = devlink_port_register(devlink, devlink_port, vsi->idx);
+       err = devl_port_register(devlink, devlink_port, vsi->idx);
        if (err) {
                dev_err(dev, "Failed to create devlink port for VF %d, error 
%d\n",
                        vf->vf_id, err);
@@ -426,5 +426,5 @@ int ice_devlink_create_vf_port(struct ice_vf *vf)
 void ice_devlink_destroy_vf_port(struct ice_vf *vf)
 {
        devl_rate_leaf_destroy(&vf->devlink_port);
-       devlink_port_unregister(&vf->devlink_port);
+       devl_port_unregister(&vf->devlink_port);
 }
diff --git a/drivers/net/ethernet/intel/ice/ice_eswitch.c 
b/drivers/net/ethernet/intel/ice/ice_eswitch.c
index b102db8b829a..7b57a6561a5a 100644
--- a/drivers/net/ethernet/intel/ice/ice_eswitch.c
+++ b/drivers/net/ethernet/intel/ice/ice_eswitch.c
@@ -423,6 +423,7 @@ static void ice_eswitch_start_reprs(struct ice_pf *pf)
 int
 ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
 {
+       struct devlink *devlink = priv_to_devlink(pf);
        struct ice_repr *repr;
        int err;
 
@@ -437,7 +438,9 @@ ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
 
        ice_eswitch_stop_reprs(pf);
 
+       devl_lock(devlink);
        repr = ice_repr_add_vf(vf);
+       devl_unlock(devlink);
        if (IS_ERR(repr)) {
                err = PTR_ERR(repr);
                goto err_create_repr;
@@ -460,7 +463,9 @@ ice_eswitch_attach(struct ice_pf *pf, struct ice_vf *vf)
 err_xa_alloc:
        ice_eswitch_release_repr(pf, repr);
 err_setup_repr:
+       devl_lock(devlink);
        ice_repr_rem_vf(repr);
+       devl_unlock(devlink);
 err_create_repr:
        if (xa_empty(&pf->eswitch.reprs))
                ice_eswitch_disable_switchdev(pf);
@@ -484,6 +489,7 @@ void ice_eswitch_detach(struct ice_pf *pf, struct ice_vf 
*vf)
                ice_eswitch_disable_switchdev(pf);
 
        ice_eswitch_release_repr(pf, repr);
+       devl_lock(devlink);
        ice_repr_rem_vf(repr);
 
        if (xa_empty(&pf->eswitch.reprs)) {
@@ -491,12 +497,11 @@ void ice_eswitch_detach(struct ice_pf *pf, struct ice_vf 
*vf)
                 * no point in keeping the nodes
                 */
                ice_devlink_rate_clear_tx_topology(ice_get_main_vsi(pf));
-               devl_lock(devlink);
                devl_rate_nodes_destroy(devlink);
-               devl_unlock(devlink);
        } else {
                ice_eswitch_start_reprs(pf);
        }
+       devl_unlock(devlink);
 }
 
 /**
diff --git a/drivers/net/ethernet/intel/ice/ice_repr.c 
b/drivers/net/ethernet/intel/ice/ice_repr.c
index fe83f305cc7d..35a6ac8c0466 100644
--- a/drivers/net/ethernet/intel/ice/ice_repr.c
+++ b/drivers/net/ethernet/intel/ice/ice_repr.c
@@ -285,9 +285,7 @@ ice_repr_reg_netdev(struct net_device *netdev)
 
 static void ice_repr_remove_node(struct devlink_port *devlink_port)
 {
-       devl_lock(devlink_port->devlink);
        devl_rate_leaf_destroy(devlink_port);
-       devl_unlock(devlink_port->devlink);
 }
 
 /**
-- 
2.42.0

Reply via email to