Add DIV_ROUND_CLOSEST

Bring in this useful function from Linux 4.7.

BUG=chrome-os-partner:56556
BRANCH=none
TEST=build on gru

Change-Id: I37617e35b4784d6cdc51e6910aa91f566caf971d
Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/382320
Reviewed-by: Julius Werner <jwerner@chromium.org>
This commit is contained in:
Simon Glass 2016-09-07 16:01:55 -06:00 committed by chrome-bot
parent e09cdfde26
commit 99f22182c2

View file

@ -16,6 +16,22 @@ static inline unsigned long div_round_up(unsigned int n, unsigned int d)
{
return (n + d - 1) / d;
}
/*
* Divide positive or negative dividend by positive divisor and round
* to closest integer. Result is undefined for negative divisors and
* for negative dividends if the divisor variable type is unsigned.
*/
#define DIV_ROUND_CLOSEST(x, divisor)( \
{ \
typeof(x) __x = x; \
typeof(divisor) __d = divisor; \
(((typeof(x))-1) > 0 || \
((typeof(divisor))-1) > 0 || (__x) > 0) ? \
(((__x) + ((__d) / 2)) / (__d)) : \
(((__x) - ((__d) / 2)) / (__d)); \
} \
)
#endif