diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-26 21:07:20 -0400 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2012-09-26 21:07:20 -0400 |
| commit | 5905db5ca0ac9a6d5bfe87f86b87cd1bdec3755a (patch) | |
| tree | 6edb13ed37d842ef0b70d072b94e4c78010f90cf /include/linux/kernel.h | |
| parent | c5aa1e554a20fb3542c62688ae46049c9225a965 (diff) | |
| parent | 6f0f9b6b3fcfe5e156f20d4f804f0d505c750b3c (diff) | |
Merge remote branch 'origin' into for-next
Diffstat (limited to 'include/linux/kernel.h')
| -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 604382143bcf..2451f1f7a1d9 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)); \ } \ ) |
