net/mlx5: fix the EIR calculation
Checks
Commit Message
Before the yellow color policy was supported, the only supported
profile of metering is RFC2697 and EIR is not part of the profile.
When creating a meter with this profile, the EIR part was always
zero.
After the yellow color policy supported and RFC2698 & 4115 support
was introduced, EIR is relevant and should be calculated. Usually
the EIR could not be zero and the formula for calculating CIR
mantissa & exponent could be reused.
The EIR could be 0 and then only green and red colors will be
supported from the specification. Both the mantissa and exponent
parts should be set to 0. Currently, the formula wrongly sets
non-zero values for the EIR=0 case.
Setting the mantissa and the exponent parts to zeros when EIR is 0
will solve the issue.
Fixes: 33a7493c8df8 ("net/mlx5: support meter for trTCM profiles")
Signed-off-by: Bing Zhao <bingz@nvidia.com>
Acked-by: Matan Azrad <matan@nvidia.com>
---
drivers/net/mlx5/mlx5_flow_meter.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
Comments
Hi,
> -----Original Message-----
> From: Bing Zhao <bingz@nvidia.com>
> Sent: Thursday, July 29, 2021 7:04 PM
> To: Slava Ovsiienko <viacheslavo@nvidia.com>; Matan Azrad
> <matan@nvidia.com>
> Cc: dev@dpdk.org; Ori Kam <orika@nvidia.com>; Raslan Darawsheh
> <rasland@nvidia.com>; NBU-Contact-Thomas Monjalon
> <thomas@monjalon.net>
> Subject: [PATCH] net/mlx5: fix the EIR calculation
>
> Before the yellow color policy was supported, the only supported profile of
> metering is RFC2697 and EIR is not part of the profile.
> When creating a meter with this profile, the EIR part was always zero.
>
> After the yellow color policy supported and RFC2698 & 4115 support was
> introduced, EIR is relevant and should be calculated. Usually the EIR could not
> be zero and the formula for calculating CIR mantissa & exponent could be
> reused.
>
> The EIR could be 0 and then only green and red colors will be supported from
> the specification. Both the mantissa and exponent parts should be set to 0.
> Currently, the formula wrongly sets non-zero values for the EIR=0 case.
>
> Setting the mantissa and the exponent parts to zeros when EIR is 0 will solve
> the issue.
>
> Fixes: 33a7493c8df8 ("net/mlx5: support meter for trTCM profiles")
>
> Signed-off-by: Bing Zhao <bingz@nvidia.com>
> Acked-by: Matan Azrad <matan@nvidia.com>
> ---
> drivers/net/mlx5/mlx5_flow_meter.c | 14 ++++++++++----
> 1 file changed, 10 insertions(+), 4 deletions(-)
>
Patch applied to next-net-mlx,
Kindest regards,
Raslan Darawsheh
@@ -245,17 +245,23 @@ mlx5_flow_meter_profile_validate(struct rte_eth_dev *dev,
static inline void
mlx5_flow_meter_xir_man_exp_calc(int64_t xir, uint8_t *man, uint8_t *exp)
{
- int64_t _cir;
+ int64_t _xir;
int64_t delta = INT64_MAX;
uint8_t _man = 0;
uint8_t _exp = 0;
uint64_t m, e;
+ /* Special case xir == 0 ? both exp and matissa are 0. */
+ if (xir == 0) {
+ *man = 0;
+ *exp = 0;
+ return;
+ }
for (m = 0; m <= 0xFF; m++) { /* man width 8 bit */
for (e = 0; e <= 0x1F; e++) { /* exp width 5bit */
- _cir = (1000000000ULL * m) >> e;
- if (llabs(xir - _cir) <= delta) {
- delta = llabs(xir - _cir);
+ _xir = (1000000000ULL * m) >> e;
+ if (llabs(xir - _xir) <= delta) {
+ delta = llabs(xir - _xir);
_man = m;
_exp = e;
}