From patchwork Tue Jul 6 16:16:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Xu, Ting" X-Patchwork-Id: 95419 X-Patchwork-Delegate: qi.z.zhang@intel.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5F0EBA0C48; Tue, 6 Jul 2021 18:13:48 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1B2AC4128B; Tue, 6 Jul 2021 18:13:48 +0200 (CEST) Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by mails.dpdk.org (Postfix) with ESMTP id 477664120E; Tue, 6 Jul 2021 18:13:46 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="196313585" X-IronPort-AV: E=Sophos;i="5.83,328,1616482800"; d="scan'208";a="196313585" Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Jul 2021 09:13:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,328,1616482800"; d="scan'208";a="497094150" Received: from dpdk-xuting-second.sh.intel.com ([10.67.116.193]) by fmsmga002.fm.intel.com with ESMTP; 06 Jul 2021 09:13:41 -0700 From: Ting Xu To: dev@dpdk.org Cc: qi.z.zhang@intel.com, jingjing.wu@intel.com, beilei.xing@intel.com, Ting Xu , stable@dpdk.org Date: Wed, 7 Jul 2021 00:16:44 +0800 Message-Id: <20210706161644.64837-1-ting.xu@intel.com> X-Mailer: git-send-email 2.17.1 Subject: [dpdk-dev] [PATCH v1] net/ice: fix error check for QoS in DCF X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This patch fixed some unreasonable error check. Move all checks into one helper function before configuring. Skip the check for DCF (VF0). Fixes: 3a5a5bfc618b ("net/ice: support QoS config VF bandwidth in DCF") Cc: stable@dpdk.org Signed-off-by: Ting Xu --- drivers/net/ice/ice_dcf_sched.c | 65 ++++++++++++++++++++++----------- 1 file changed, 44 insertions(+), 21 deletions(-) diff --git a/drivers/net/ice/ice_dcf_sched.c b/drivers/net/ice/ice_dcf_sched.c index 4371bbc820..d24fd5b1c1 100644 --- a/drivers/net/ice/ice_dcf_sched.c +++ b/drivers/net/ice/ice_dcf_sched.c @@ -631,6 +631,43 @@ ice_dcf_validate_tc_bw(struct virtchnl_dcf_bw_cfg_list *tc_bw, return 0; } + +static int ice_dcf_commit_check(struct ice_dcf_hw *hw) +{ + struct ice_dcf_tm_node_list *tc_list = &hw->tm_conf.tc_list; + struct ice_dcf_tm_node_list *vsi_list = &hw->tm_conf.vsi_list; + struct ice_dcf_tm_node *tm_node; + + if (!(hw->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_QOS)) { + PMD_DRV_LOG(ERR, "Configure VF bandwidth is not supported"); + return ICE_ERR_NOT_SUPPORTED; + } + + /* check if all TC nodes are set */ + if (BIT(hw->tm_conf.nb_tc_node) & hw->ets_config->tc_valid_bits) { + PMD_DRV_LOG(ERR, "Not all enabled TC nodes are set"); + return ICE_ERR_PARAM; + } + + /* check if all VF vsi nodes are binded to all TCs */ + TAILQ_FOREACH(tm_node, tc_list, node) { + if (tm_node->reference_count != hw->num_vfs) { + PMD_DRV_LOG(ERR, "Not all VFs are binded to TC%u", + tm_node->tc); + return ICE_ERR_PARAM; + } + } + + /* check if VF vsi node id start with 0 */ + tm_node = TAILQ_FIRST(vsi_list); + if (tm_node->id != 0) { + PMD_DRV_LOG(ERR, "VF vsi node id must start with 0"); + return ICE_ERR_PARAM; + } + + return ICE_SUCCESS; +} + static int ice_dcf_hierarchy_commit(struct rte_eth_dev *dev, int clear_on_fail, __rte_unused struct rte_tm_error *error) @@ -645,20 +682,11 @@ static int ice_dcf_hierarchy_commit(struct rte_eth_dev *dev, uint32_t port_bw, cir_total; uint16_t size, vf_id; uint8_t num_elem = 0; - int i, ret_val = ICE_SUCCESS; - - if (!(hw->vf_res->vf_cap_flags & VIRTCHNL_VF_OFFLOAD_QOS)) { - PMD_DRV_LOG(ERR, "Configure VF bandwidth is not supported"); - ret_val = ICE_ERR_NOT_SUPPORTED; - goto fail_clear; - } + int i, ret_val; - /* check if all TC nodes are set */ - if (BIT(hw->tm_conf.nb_tc_node) & hw->ets_config->tc_valid_bits) { - PMD_DRV_LOG(ERR, "Not all enabled TC nodes are set"); - ret_val = ICE_ERR_PARAM; + ret_val = ice_dcf_commit_check(hw); + if (ret_val) goto fail_clear; - } size = sizeof(struct virtchnl_dcf_bw_cfg_list) + sizeof(struct virtchnl_dcf_bw_cfg) * @@ -690,7 +718,10 @@ static int ice_dcf_hierarchy_commit(struct rte_eth_dev *dev, VIRTCHNL_DCF_BW_PIR | VIRTCHNL_DCF_BW_CIR; } - for (vf_id = 0; vf_id < hw->num_vfs; vf_id++) { + /* start with VF1, skip VF0 since DCF does not need to configure + * bandwidth for itself + */ + for (vf_id = 1; vf_id < hw->num_vfs; vf_id++) { num_elem = 0; vf_bw->vf_id = vf_id; vf_bw->node_type = VIRTCHNL_DCF_TARGET_VF_BW; @@ -722,14 +753,6 @@ static int ice_dcf_hierarchy_commit(struct rte_eth_dev *dev, num_elem++; } - /* check if all TC nodes are set with VF vsi nodes */ - if (num_elem != hw->tm_conf.nb_tc_node) { - PMD_DRV_LOG(ERR, "VF%u vsi nodes are not set to all TC nodes, node id should be continuous", - vf_id); - ret_val = ICE_ERR_PARAM; - goto fail_clear; - } - vf_bw->num_elem = num_elem; ret_val = ice_dcf_set_vf_bw(hw, vf_bw, size); if (ret_val)