[04/31] batman-adv: iv_ogm, divide and round for ring buffer avg

Message ID 1417519009-20699-5-git-send-email-mpa@pengutronix.de (mailing list archive)
State Superseded, archived
Headers

Commit Message

Markus Pargmann Dec. 2, 2014, 11:16 a.m. UTC
  Instead of the normal division which looses precision, use a division
with rounding.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
---
 bat_iv_ogm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Simon Wunderlich Jan. 12, 2015, 3:52 p.m. UTC | #1
On Tuesday 02 December 2014 12:16:22 Markus Pargmann wrote:
> Instead of the normal division which looses precision, use a division
> with rounding.
> 
> Signed-off-by: Markus Pargmann <mpa@pengutronix.de>

Why do we need to have more precise rounding here? In doubt, we should rather 
always round down to avoid any spurious routing loops - the loop free property 
depends on monotonicity after all, and therefore its better to always round 
down.

I'm not convinced that this change is safe in that regard, if you think it is 
please explain further.

> ---
>  bat_iv_ogm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c
> index 1458ecfa66b8..10eada270015 100644
> --- a/bat_iv_ogm.c
> +++ b/bat_iv_ogm.c
> @@ -82,7 +82,7 @@ static uint8_t batadv_ring_buffer_avg(const uint8_t
> lq_recv[]) if (count == 0)
>  		return 0;
> 
> -	return (uint8_t)(sum / count);
> +	return (uint8_t)DIV_ROUND_CLOSEST(sum, count);
>  }
> 
>  /**
  

Patch

diff --git a/bat_iv_ogm.c b/bat_iv_ogm.c
index 1458ecfa66b8..10eada270015 100644
--- a/bat_iv_ogm.c
+++ b/bat_iv_ogm.c
@@ -82,7 +82,7 @@  static uint8_t batadv_ring_buffer_avg(const uint8_t lq_recv[])
 	if (count == 0)
 		return 0;
 
-	return (uint8_t)(sum / count);
+	return (uint8_t)DIV_ROUND_CLOSEST(sum, count);
 }
 
 /**