]> git.droids-corp.org - dpdk.git/commitdiff
net/ice: support queue and queue group priority config
authorWenjun Wu <wenjun1.wu@intel.com>
Tue, 17 May 2022 05:09:30 +0000 (13:09 +0800)
committerQi Zhang <qi.z.zhang@intel.com>
Wed, 18 May 2022 04:23:11 +0000 (06:23 +0200)
This patch adds queue and queue group priority configuration
support. The highest priority is 0, and the lowest priority
is 7.

Signed-off-by: Wenjun Wu <wenjun1.wu@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
doc/guides/rel_notes/release_22_07.rst
drivers/net/ice/ice_tm.c

index 89fdf010df16e27125fa39a1a238e41ff40b1c92..33204229c11314e8abab105b8328a12c987e8227 100644 (file)
@@ -102,6 +102,7 @@ New Features
  * Added support for MAC configuration in DCF mode.
  * Added support for VLAN filter and offload configuration in DCF mode.
  * Added Tx QoS queue / queue group rate limitation configure support.
+ * Added Tx QoS queue / queue group priority configuration support.
 
 * **Updated Mellanox mlx5 driver.**
 
index d70d07728679cd9b4f7de7339dbbf6167eb6280e..105455f3ccb3fb7ca3624f47643815393235141a 100644 (file)
@@ -147,9 +147,9 @@ ice_node_param_check(struct ice_pf *pf, uint32_t node_id,
                return -EINVAL;
        }
 
-       if (priority) {
+       if (priority >= 8) {
                error->type = RTE_TM_ERROR_TYPE_NODE_PRIORITY;
-               error->message = "priority should be 0";
+               error->message = "priority should be less than 8";
                return -EINVAL;
        }
 
@@ -684,6 +684,7 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
        struct ice_vsi *vsi;
        int ret_val = ICE_SUCCESS;
        uint64_t peak = 0;
+       uint8_t priority;
        uint32_t i;
        uint32_t idx_vsi_child;
        uint32_t idx_qg;
@@ -763,6 +764,15 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
                                goto fail_clear;
                        }
                }
+               priority = 7 - tm_node->priority;
+               ret_val = ice_sched_cfg_sibl_node_prio_lock(hw->port_info, qgroup_sched_node,
+                                                           priority);
+               if (ret_val) {
+                       error->type = RTE_TM_ERROR_TYPE_NODE_PRIORITY;
+                       PMD_DRV_LOG(ERR, "configure queue group %u priority failed",
+                                   tm_node->priority);
+                       goto fail_clear;
+               }
                idx_qg++;
                if (idx_qg >= nb_qg) {
                        idx_qg = 0;
@@ -779,6 +789,7 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
                qid = tm_node->id;
                txq = dev->data->tx_queues[qid];
                vsi = txq->vsi;
+               q_teid = txq->q_teid;
                if (tm_node->shaper_profile) {
                        /* Transfer from Byte per seconds to Kbps */
                        peak = tm_node->shaper_profile->profile.peak.rate;
@@ -794,6 +805,14 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
                                goto fail_clear;
                        }
                }
+               priority = 7 - tm_node->priority;
+               ret_val = ice_cfg_vsi_q_priority(hw->port_info, 1,
+                                                &q_teid, &priority);
+               if (ret_val) {
+                       error->type = RTE_TM_ERROR_TYPE_NODE_PRIORITY;
+                       PMD_DRV_LOG(ERR, "configure queue %u priority failed", tm_node->priority);
+                       goto fail_clear;
+               }
        }
 
        return ret_val;