[PATCH] net/ice: allow setting CIR
markus.theil at tu-ilmenau.de
markus.theil at tu-ilmenau.de
Thu Jul 6 13:45:14 CEST 2023
From: Michael Rossberg <michael.rossberg at tu-ilmenau.de>
ice only allowed to set peak information rate (PIR), while the hardware
also supports setting committed information rate (CIR). In many use
cases both values are needed, therefore add support for CIR.
Signed-off-by: Michael Rossberg <michael.rossberg at tu-ilmenau.de>
---
drivers/net/ice/ice_tm.c | 39 ++++++++++++++++++++++++++++-----------
1 file changed, 28 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ice/ice_tm.c b/drivers/net/ice/ice_tm.c
index 34a0bfcff8..f5ea47ae83 100644
--- a/drivers/net/ice/ice_tm.c
+++ b/drivers/net/ice/ice_tm.c
@@ -693,6 +693,7 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
struct ice_vsi *vsi;
int ret_val = ICE_SUCCESS;
uint64_t peak = 0;
+ uint64_t committed = 0;
uint8_t priority;
uint32_t i;
uint32_t idx_vsi_child;
@@ -801,17 +802,33 @@ static int ice_hierarchy_commit(struct rte_eth_dev *dev,
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;
- peak = peak / 1000 * BITS_PER_BYTE;
- ret_val = ice_cfg_q_bw_lmt(hw->port_info, vsi->idx,
- tm_node->tc, tm_node->id,
- ICE_MAX_BW, (u32)peak);
- if (ret_val) {
- error->type = RTE_TM_ERROR_TYPE_UNSPECIFIED;
- PMD_DRV_LOG(ERR,
- "configure queue %u bandwidth failed",
- tm_node->id);
- goto fail_clear;
+ if (tm_node->shaper_profile->profile.peak.rate > 0) {
+ peak = tm_node->shaper_profile->profile.peak.rate;
+ peak = peak / 1000 * BITS_PER_BYTE;
+ ret_val = ice_cfg_q_bw_lmt(hw->port_info, vsi->idx,
+ tm_node->tc, tm_node->id,
+ ICE_MAX_BW, (u32)peak);
+ if (ret_val) {
+ error->type = RTE_TM_ERROR_TYPE_UNSPECIFIED;
+ PMD_DRV_LOG(ERR,
+ "configure queue %u peak bandwidth failed",
+ tm_node->id);
+ goto fail_clear;
+ }
+ }
+ if (tm_node->shaper_profile->profile.committed.rate > 0) {
+ committed = tm_node->shaper_profile->profile.committed.rate;
+ committed = committed / 1000 * BITS_PER_BYTE;
+ ret_val = ice_cfg_q_bw_lmt(hw->port_info, vsi->idx,
+ tm_node->tc, tm_node->id,
+ ICE_MIN_BW, (u32)committed);
+ if (ret_val) {
+ error->type = RTE_TM_ERROR_TYPE_UNSPECIFIED;
+ PMD_DRV_LOG(ERR,
+ "configure queue %u committed bandwidth failed",
+ tm_node->id);
+ goto fail_clear;
+ }
}
}
priority = 7 - tm_node->priority;
--
2.41.0
More information about the dev
mailing list