[v3] lib/librte_meter: fix divide by zero for RFC4115 meter

Message ID 155299743267.6865.5001245009415554669.stgit@dbuild (mailing list archive)
State Accepted, archived
Delegated to: Cristian Dumitrescu
Headers
Series [v3] lib/librte_meter: fix divide by zero for RFC4115 meter |

Checks

Context Check Description
ci/Intel-compilation success Compilation OK
ci/mellanox-Performance-Testing success Performance Testing PASS
ci/intel-Performance-Testing success Performance Testing PASS
ci/checkpatch success coding style OK

Commit Message

Eelco Chaudron March 19, 2019, 12:10 p.m. UTC
  RFC 4115 allows a meter with either cir and/or eir configured.
When only one is configured a divide by zero would occur.

Fixes: 655796d2b5fb ("meter: support RFC4115 trTCM")
Cc: echaudro@redhat.com

Signed-off-by: Eelco Chaudron <echaudro@redhat.com>

---
 v3 - Rather than using a 0 check, set up profile data such that no
      check at runtime is needed.
 v2 - Removed configuration change that got included by accident

 lib/librte_meter/rte_meter.c |   10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
  

Comments

Cristian Dumitrescu March 29, 2019, 8:04 p.m. UTC | #1
> -----Original Message-----
> From: Eelco Chaudron [mailto:echaudro@redhat.com]
> Sent: Tuesday, March 19, 2019 12:11 PM
> To: Dumitrescu, Cristian <cristian.dumitrescu@intel.com>
> Cc: dev@dpdk.org
> Subject: [PATCH v3] lib/librte_meter: fix divide by zero for RFC4115 meter
> 
> RFC 4115 allows a meter with either cir and/or eir configured.
> When only one is configured a divide by zero would occur.
> 
> Fixes: 655796d2b5fb ("meter: support RFC4115 trTCM")
> Cc: echaudro@redhat.com
> 
> Signed-off-by: Eelco Chaudron <echaudro@redhat.com>
> 
> ---
>  v3 - Rather than using a 0 check, set up profile data such that no
>       check at runtime is needed.
>  v2 - Removed configuration change that got included by accident
> 

Acked-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>

Applied to the next-qos tree, thanks!
  

Patch

diff --git a/lib/librte_meter/rte_meter.c b/lib/librte_meter/rte_meter.c
index e55f9be65..45679444e 100644
--- a/lib/librte_meter/rte_meter.c
+++ b/lib/librte_meter/rte_meter.c
@@ -19,7 +19,15 @@ 
 static void
 rte_meter_get_tb_params(uint64_t hz, uint64_t rate, uint64_t *tb_period, uint64_t *tb_bytes_per_period)
 {
-	double period = ((double) hz) / ((double) rate);
+	double period;
+
+	if (rate == 0) {
+		*tb_bytes_per_period = 0;
+		*tb_period = RTE_METER_TB_PERIOD_MIN;
+		return;
+	}
+
+	period = ((double) hz) / ((double) rate);
 
 	if (period >= RTE_METER_TB_PERIOD_MIN) {
 		*tb_bytes_per_period = 1;