mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-08 15:48:23 +00:00
ice: check for a leaf node presence
Check for a leaf node presence for a given VSI. This check is required before removing a VSI since VSIs can't be removed with enabled queues (with leaf nodes) from the FW scheduler tree unless its a reset. Signed-off-by: Victor Raj <victor.raj@intel.com> Reviewed-by: Bruce Allan <bruce.w.allan@intel.com> Signed-off-by: Anirudh Venkataramanan <anirudh.venkataramanan@intel.com> Tested-by: Andrew Bowers <andrewx.bowers@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
This commit is contained in:
parent
6e9650d533
commit
f70b9d5f44
2 changed files with 24 additions and 0 deletions
|
@ -1615,6 +1615,23 @@ ice_sched_rm_agg_vsi_info(struct ice_port_info *pi, u16 vsi_handle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_sched_is_leaf_node_present - check for a leaf node in the sub-tree
|
||||||
|
* @node: pointer to the sub-tree node
|
||||||
|
*
|
||||||
|
* This function checks for a leaf node presence in a given sub-tree node.
|
||||||
|
*/
|
||||||
|
static bool ice_sched_is_leaf_node_present(struct ice_sched_node *node)
|
||||||
|
{
|
||||||
|
u8 i;
|
||||||
|
|
||||||
|
for (i = 0; i < node->num_children; i++)
|
||||||
|
if (ice_sched_is_leaf_node_present(node->children[i]))
|
||||||
|
return true;
|
||||||
|
/* check for a leaf node */
|
||||||
|
return (node->info.data.elem_type == ICE_AQC_ELEM_TYPE_LEAF);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_sched_rm_vsi_cfg - remove the VSI and its children nodes
|
* ice_sched_rm_vsi_cfg - remove the VSI and its children nodes
|
||||||
* @pi: port information structure
|
* @pi: port information structure
|
||||||
|
@ -1649,6 +1666,12 @@ ice_sched_rm_vsi_cfg(struct ice_port_info *pi, u16 vsi_handle, u8 owner)
|
||||||
if (!vsi_node)
|
if (!vsi_node)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (ice_sched_is_leaf_node_present(vsi_node)) {
|
||||||
|
ice_debug(pi->hw, ICE_DBG_SCHED,
|
||||||
|
"VSI has leaf nodes in TC %d\n", i);
|
||||||
|
status = ICE_ERR_IN_USE;
|
||||||
|
goto exit_sched_rm_vsi_cfg;
|
||||||
|
}
|
||||||
while (j < vsi_node->num_children) {
|
while (j < vsi_node->num_children) {
|
||||||
if (vsi_node->children[j]->owner == owner) {
|
if (vsi_node->children[j]->owner == owner) {
|
||||||
ice_free_sched_node(pi, vsi_node->children[j]);
|
ice_free_sched_node(pi, vsi_node->children[j]);
|
||||||
|
|
|
@ -22,6 +22,7 @@ enum ice_status {
|
||||||
ICE_ERR_OUT_OF_RANGE = -13,
|
ICE_ERR_OUT_OF_RANGE = -13,
|
||||||
ICE_ERR_ALREADY_EXISTS = -14,
|
ICE_ERR_ALREADY_EXISTS = -14,
|
||||||
ICE_ERR_DOES_NOT_EXIST = -15,
|
ICE_ERR_DOES_NOT_EXIST = -15,
|
||||||
|
ICE_ERR_IN_USE = -16,
|
||||||
ICE_ERR_MAX_LIMIT = -17,
|
ICE_ERR_MAX_LIMIT = -17,
|
||||||
ICE_ERR_RESET_ONGOING = -18,
|
ICE_ERR_RESET_ONGOING = -18,
|
||||||
ICE_ERR_BUF_TOO_SHORT = -52,
|
ICE_ERR_BUF_TOO_SHORT = -52,
|
||||||
|
|
Loading…
Add table
Reference in a new issue