diff options
| -rw-r--r-- | include/linux/kernel.h | 12 | 
1 files changed, 10 insertions, 2 deletions
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 604382143bc..594b419b7d2 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -82,10 +82,18 @@  	__x - (__x % (y));				\  }							\  ) + +/* + * Divide positive or negative dividend by positive divisor and round + * to closest integer. Result is undefined for negative divisors. + */  #define DIV_ROUND_CLOSEST(x, divisor)(			\  {							\ -	typeof(divisor) __divisor = divisor;		\ -	(((x) + ((__divisor) / 2)) / (__divisor));	\ +	typeof(x) __x = x;				\ +	typeof(divisor) __d = divisor;			\ +	(((typeof(x))-1) >= 0 || (__x) >= 0) ?		\ +		(((__x) + ((__d) / 2)) / (__d)) :	\ +		(((__x) - ((__d) / 2)) / (__d));	\  }							\  )  |