[04/31] batman-adv: iv_ogm, divide and round for ring buffer avg
Commit Message
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
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);
> }
>
> /**
@@ -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);
}
/**