app/test-fib: fix possible division by zero
Checks
Commit Message
This patch fixes the division by 0, which occurs if the number of routes is less than 10.
Can be triggered by passing -n argument with value < 10:
./dpdk-test-fib -- -n 9
...
Floating point exception (core dumped)
Fixes: 103809d032cd ("app/test-fib: add test application for FIB")
Cc: vladimir.medvedkin@intel.com
Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
---
app/test-fib/main.c | 40 ++++++++++++++++++++++++----------------
1 file changed, 24 insertions(+), 16 deletions(-)
Comments
On 23/12/2021 15:25, Vladimir Medvedkin wrote:
> This patch fixes the division by 0, which occurs if the number of routes is less than 10.
> Can be triggered by passing -n argument with value < 10:
>
9 causing a divide by zero - another example of inflation :-)
> ./dpdk-test-fib -- -n 9
> ...
> Floating point exception (core dumped)
>
> Fixes: 103809d032cd ("app/test-fib: add test application for FIB")
> Cc: vladimir.medvedkin@intel.com
>
You probably want to add 'Cc: stable@dpdk.org' for this.
> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
> ---
> app/test-fib/main.c | 40 ++++++++++++++++++++++++----------------
> 1 file changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/app/test-fib/main.c b/app/test-fib/main.c
> index ecd420116a..9bc8b8a7ca 100644
> --- a/app/test-fib/main.c
> +++ b/app/test-fib/main.c
> @@ -902,8 +902,9 @@ run_v4(void)
> return -ret;
> }
> }
> - printf("AVG FIB add %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG FIB add %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
You are just not printing the result for these cases. Do you think it is
worth to print a warning message (one), and update any documentation so
the user is aware of the acceptable bounds?
> i += j;
> }
>
> @@ -930,8 +931,9 @@ run_v4(void)
> return -ret;
> }
> }
> - printf("AVG LPM add %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG LPM add %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
> }
> @@ -984,8 +986,9 @@ run_v4(void)
> for (j = 0; j < (config.nb_routes - i) / k; j++)
> rte_fib_delete(fib, rt[i + j].addr, rt[i + j].depth);
>
> - printf("AVG FIB delete %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG FIB delete %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
>
> @@ -996,8 +999,9 @@ run_v4(void)
> rte_lpm_delete(lpm, rt[i + j].addr,
> rt[i + j].depth);
>
> - printf("AVG LPM delete %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG LPM delete %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
> }
> @@ -1097,8 +1101,9 @@ run_v6(void)
> return -ret;
> }
> }
> - printf("AVG FIB add %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG FIB add %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
>
> @@ -1125,8 +1130,9 @@ run_v6(void)
> return -ret;
> }
> }
> - printf("AVG LPM add %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG LPM add %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
> }
> @@ -1183,8 +1189,9 @@ run_v6(void)
> for (j = 0; j < (config.nb_routes - i) / k; j++)
> rte_fib6_delete(fib, rt[i + j].addr, rt[i + j].depth);
>
> - printf("AVG FIB delete %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG FIB delete %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
>
> @@ -1195,8 +1202,9 @@ run_v6(void)
> rte_lpm6_delete(lpm, rt[i + j].addr,
> rt[i + j].depth);
>
> - printf("AVG LPM delete %"PRIu64"\n",
> - (rte_rdtsc_precise() - start) / j);
> + if (j != 0)
> + printf("AVG LPM delete %"PRIu64"\n",
> + (rte_rdtsc_precise() - start) / j);
> i += j;
> }
> }
>
Hi Kevin,
On 11/01/2022 17:15, Kevin Traynor wrote:
> On 23/12/2021 15:25, Vladimir Medvedkin wrote:
>> This patch fixes the division by 0, which occurs if the number of
>> routes is less than 10.
>> Can be triggered by passing -n argument with value < 10:
>>
>
> 9 causing a divide by zero - another example of inflation :-)
>
Too bad that we are not working in a wheel
(https://en.wikipedia.org/wiki/Wheel_theory), where division by 0 is
always defined :)
>> ./dpdk-test-fib -- -n 9
>> ...
>> Floating point exception (core dumped)
>>
>> Fixes: 103809d032cd ("app/test-fib: add test application for FIB")
>> Cc: vladimir.medvedkin@intel.com
>>
>
> You probably want to add 'Cc: stable@dpdk.org' for this.
>
>> Signed-off-by: Vladimir Medvedkin <vladimir.medvedkin@intel.com>
>> ---
>> app/test-fib/main.c | 40 ++++++++++++++++++++++++----------------
>> 1 file changed, 24 insertions(+), 16 deletions(-)
>>
>> diff --git a/app/test-fib/main.c b/app/test-fib/main.c
>> index ecd420116a..9bc8b8a7ca 100644
>> --- a/app/test-fib/main.c
>> +++ b/app/test-fib/main.c
>> @@ -902,8 +902,9 @@ run_v4(void)
>> return -ret;
>> }
>> }
>> - printf("AVG FIB add %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG FIB add %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>
>
> You are just not printing the result for these cases. Do you think it is
> worth to print a warning message (one), and update any documentation so
> the user is aware of the acceptable bounds?
>
Agree, I'll send v2
>> i += j;
>> }
>> @@ -930,8 +931,9 @@ run_v4(void)
>> return -ret;
>> }
>> }
>> - printf("AVG LPM add %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG LPM add %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> }
>> @@ -984,8 +986,9 @@ run_v4(void)
>> for (j = 0; j < (config.nb_routes - i) / k; j++)
>> rte_fib_delete(fib, rt[i + j].addr, rt[i + j].depth);
>> - printf("AVG FIB delete %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG FIB delete %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> @@ -996,8 +999,9 @@ run_v4(void)
>> rte_lpm_delete(lpm, rt[i + j].addr,
>> rt[i + j].depth);
>> - printf("AVG LPM delete %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG LPM delete %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> }
>> @@ -1097,8 +1101,9 @@ run_v6(void)
>> return -ret;
>> }
>> }
>> - printf("AVG FIB add %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG FIB add %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> @@ -1125,8 +1130,9 @@ run_v6(void)
>> return -ret;
>> }
>> }
>> - printf("AVG LPM add %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG LPM add %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> }
>> @@ -1183,8 +1189,9 @@ run_v6(void)
>> for (j = 0; j < (config.nb_routes - i) / k; j++)
>> rte_fib6_delete(fib, rt[i + j].addr, rt[i + j].depth);
>> - printf("AVG FIB delete %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG FIB delete %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> @@ -1195,8 +1202,9 @@ run_v6(void)
>> rte_lpm6_delete(lpm, rt[i + j].addr,
>> rt[i + j].depth);
>> - printf("AVG LPM delete %"PRIu64"\n",
>> - (rte_rdtsc_precise() - start) / j);
>> + if (j != 0)
>> + printf("AVG LPM delete %"PRIu64"\n",
>> + (rte_rdtsc_precise() - start) / j);
>> i += j;
>> }
>> }
>>
>
@@ -902,8 +902,9 @@ run_v4(void)
return -ret;
}
}
- printf("AVG FIB add %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG FIB add %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
@@ -930,8 +931,9 @@ run_v4(void)
return -ret;
}
}
- printf("AVG LPM add %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG LPM add %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
}
@@ -984,8 +986,9 @@ run_v4(void)
for (j = 0; j < (config.nb_routes - i) / k; j++)
rte_fib_delete(fib, rt[i + j].addr, rt[i + j].depth);
- printf("AVG FIB delete %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG FIB delete %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
@@ -996,8 +999,9 @@ run_v4(void)
rte_lpm_delete(lpm, rt[i + j].addr,
rt[i + j].depth);
- printf("AVG LPM delete %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG LPM delete %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
}
@@ -1097,8 +1101,9 @@ run_v6(void)
return -ret;
}
}
- printf("AVG FIB add %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG FIB add %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
@@ -1125,8 +1130,9 @@ run_v6(void)
return -ret;
}
}
- printf("AVG LPM add %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG LPM add %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
}
@@ -1183,8 +1189,9 @@ run_v6(void)
for (j = 0; j < (config.nb_routes - i) / k; j++)
rte_fib6_delete(fib, rt[i + j].addr, rt[i + j].depth);
- printf("AVG FIB delete %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG FIB delete %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
@@ -1195,8 +1202,9 @@ run_v6(void)
rte_lpm6_delete(lpm, rt[i + j].addr,
rt[i + j].depth);
- printf("AVG LPM delete %"PRIu64"\n",
- (rte_rdtsc_precise() - start) / j);
+ if (j != 0)
+ printf("AVG LPM delete %"PRIu64"\n",
+ (rte_rdtsc_precise() - start) / j);
i += j;
}
}