Skip to content

Commit 7cde474

Browse files
Michal Swiatkowskianguy11
authored andcommitted
ice: support subfunction devlink Tx topology
Flow for creating Tx topology is the same as for VF port representors, but the devlink port is stored in different place (sf->devlink_port). When creating VF devlink lock isn't taken, when creating subfunction it is. Setting Tx topology function needs to take this lock, check if it was taken before to not do it twice. Reviewed-by: Simon Horman <[email protected]> Reviewed-by: Przemek Kitszel <[email protected]> Reviewed-by: Wojciech Drewek <[email protected]> Signed-off-by: Michal Swiatkowski <[email protected]> Tested-by: Rafal Romanowski <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 54f0771 commit 7cde474

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

drivers/net/ethernet/intel/ice/devlink/devlink.c

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -746,6 +746,7 @@ static void ice_traverse_tx_tree(struct devlink *devlink, struct ice_sched_node
746746
struct ice_sched_node *tc_node, struct ice_pf *pf)
747747
{
748748
struct devlink_rate *rate_node = NULL;
749+
struct ice_dynamic_port *sf;
749750
struct ice_vf *vf;
750751
int i;
751752

@@ -757,6 +758,7 @@ static void ice_traverse_tx_tree(struct devlink *devlink, struct ice_sched_node
757758
/* create root node */
758759
rate_node = devl_rate_node_create(devlink, node, node->name, NULL);
759760
} else if (node->vsi_handle &&
761+
pf->vsi[node->vsi_handle]->type == ICE_VSI_VF &&
760762
pf->vsi[node->vsi_handle]->vf) {
761763
vf = pf->vsi[node->vsi_handle]->vf;
762764
if (!vf->devlink_port.devlink_rate)
@@ -765,6 +767,16 @@ static void ice_traverse_tx_tree(struct devlink *devlink, struct ice_sched_node
765767
*/
766768
devl_rate_leaf_create(&vf->devlink_port, node,
767769
node->parent->rate_node);
770+
} else if (node->vsi_handle &&
771+
pf->vsi[node->vsi_handle]->type == ICE_VSI_SF &&
772+
pf->vsi[node->vsi_handle]->sf) {
773+
sf = pf->vsi[node->vsi_handle]->sf;
774+
if (!sf->devlink_port.devlink_rate)
775+
/* leaf nodes doesn't have children
776+
* so we don't set rate_node
777+
*/
778+
devl_rate_leaf_create(&sf->devlink_port, node,
779+
node->parent->rate_node);
768780
} else if (node->info.data.elem_type != ICE_AQC_ELEM_TYPE_LEAF &&
769781
node->parent->rate_node) {
770782
rate_node = devl_rate_node_create(devlink, node, node->name,

drivers/net/ethernet/intel/ice/devlink/devlink_port.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -711,6 +711,7 @@ int ice_devlink_create_sf_port(struct ice_dynamic_port *dyn_port)
711711
*/
712712
void ice_devlink_destroy_sf_port(struct ice_dynamic_port *dyn_port)
713713
{
714+
devl_rate_leaf_destroy(&dyn_port->devlink_port);
714715
devl_port_unregister(&dyn_port->devlink_port);
715716
}
716717

drivers/net/ethernet/intel/ice/ice_repr.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -347,16 +347,13 @@ static void ice_repr_rem_sf(struct ice_repr *repr)
347347
ice_devlink_destroy_sf_port(repr->sf);
348348
}
349349

350-
static void ice_repr_set_tx_topology(struct ice_pf *pf)
350+
static void ice_repr_set_tx_topology(struct ice_pf *pf, struct devlink *devlink)
351351
{
352-
struct devlink *devlink;
353-
354352
/* only export if ADQ and DCB disabled and eswitch enabled*/
355353
if (ice_is_adq_active(pf) || ice_is_dcb_active(pf) ||
356354
!ice_is_switchdev_running(pf))
357355
return;
358356

359-
devlink = priv_to_devlink(pf);
360357
ice_devlink_rate_init_tx_topology(devlink, ice_get_main_vsi(pf));
361358
}
362359

@@ -408,6 +405,7 @@ static struct ice_repr *ice_repr_create(struct ice_vsi *src_vsi)
408405
static int ice_repr_add_vf(struct ice_repr *repr)
409406
{
410407
struct ice_vf *vf = repr->vf;
408+
struct devlink *devlink;
411409
int err;
412410

413411
err = ice_devlink_create_vf_port(vf);
@@ -424,7 +422,9 @@ static int ice_repr_add_vf(struct ice_repr *repr)
424422
goto err_cfg_vsi;
425423

426424
ice_virtchnl_set_repr_ops(vf);
427-
ice_repr_set_tx_topology(vf->pf);
425+
426+
devlink = priv_to_devlink(vf->pf);
427+
ice_repr_set_tx_topology(vf->pf, devlink);
428428

429429
return 0;
430430

@@ -480,6 +480,8 @@ static int ice_repr_add_sf(struct ice_repr *repr)
480480
if (err)
481481
goto err_netdev;
482482

483+
ice_repr_set_tx_topology(sf->vsi->back, priv_to_devlink(sf->vsi->back));
484+
483485
return 0;
484486

485487
err_netdev:

0 commit comments

Comments
 (0)