Before releasing the VSI, remove the VSI scheduler node. If not, the node is left in the scheduler tree and, on subsequent load, the scheduler tree contains the node so it does not set it in vsi_ctx. This, later, causes the node to not be found in ice_sched_get_free_qparent which leads to a "Failed to set LAN Tx queue context, error: -1". To remove the scheduler node, this patch introduces ice_rm_vsi_lan_cfg and related helpers. 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>
44 lines
1.4 KiB
C
44 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright (c) 2018, Intel Corporation. */
|
|
|
|
#ifndef _ICE_SCHED_H_
|
|
#define _ICE_SCHED_H_
|
|
|
|
#include "ice_common.h"
|
|
|
|
#define ICE_QGRP_LAYER_OFFSET 2
|
|
#define ICE_VSI_LAYER_OFFSET 4
|
|
|
|
struct ice_sched_agg_vsi_info {
|
|
struct list_head list_entry;
|
|
DECLARE_BITMAP(tc_bitmap, ICE_MAX_TRAFFIC_CLASS);
|
|
u16 vsi_handle;
|
|
};
|
|
|
|
struct ice_sched_agg_info {
|
|
struct list_head agg_vsi_list;
|
|
struct list_head list_entry;
|
|
DECLARE_BITMAP(tc_bitmap, ICE_MAX_TRAFFIC_CLASS);
|
|
u32 agg_id;
|
|
enum ice_agg_type agg_type;
|
|
};
|
|
|
|
/* FW AQ command calls */
|
|
enum ice_status ice_sched_init_port(struct ice_port_info *pi);
|
|
enum ice_status ice_sched_query_res_alloc(struct ice_hw *hw);
|
|
void ice_sched_cleanup_all(struct ice_hw *hw);
|
|
struct ice_sched_node *
|
|
ice_sched_find_node_by_teid(struct ice_sched_node *start_node, u32 teid);
|
|
enum ice_status
|
|
ice_sched_add_node(struct ice_port_info *pi, u8 layer,
|
|
struct ice_aqc_txsched_elem_data *info);
|
|
void ice_free_sched_node(struct ice_port_info *pi, struct ice_sched_node *node);
|
|
struct ice_sched_node *ice_sched_get_tc_node(struct ice_port_info *pi, u8 tc);
|
|
struct ice_sched_node *
|
|
ice_sched_get_free_qparent(struct ice_port_info *pi, u16 vsi_handle, u8 tc,
|
|
u8 owner);
|
|
enum ice_status
|
|
ice_sched_cfg_vsi(struct ice_port_info *pi, u16 vsi_handle, u8 tc, u16 maxqs,
|
|
u8 owner, bool enable);
|
|
enum ice_status ice_rm_vsi_lan_cfg(struct ice_port_info *pi, u16 vsi_handle);
|
|
#endif /* _ICE_SCHED_H_ */
|