From: Greg Kroah-Hartman Date: Fri, 10 May 2013 18:03:13 +0000 (-0700) Subject: 3.9-stable patches X-Git-Tag: v3.9.2~6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=642700551daa8790792772cc91cea2b9f4aae352;p=thirdparty%2Fkernel%2Fstable-queue.git 3.9-stable patches added patches: math64-new-div64_u64_rem-helper.patch --- diff --git a/queue-3.9/math64-new-div64_u64_rem-helper.patch b/queue-3.9/math64-new-div64_u64_rem-helper.patch new file mode 100644 index 00000000000..5ca93491808 --- /dev/null +++ b/queue-3.9/math64-new-div64_u64_rem-helper.patch @@ -0,0 +1,119 @@ +From f792685006274a850e6cc0ea9ade275ccdfc90bc Mon Sep 17 00:00:00 2001 +From: Frederic Weisbecker +Date: Tue, 5 Mar 2013 18:05:46 +0100 +Subject: math64: New div64_u64_rem helper + +From: Frederic Weisbecker + +commit f792685006274a850e6cc0ea9ade275ccdfc90bc upstream. + +Provide an extended version of div64_u64() that +also returns the remainder of the division. + +We are going to need this to refine the cputime +scaling code. + +Signed-off-by: Frederic Weisbecker +Cc: Stanislaw Gruszka +Cc: Steven Rostedt +Cc: Peter Zijlstra +Cc: Ingo Molnar +Cc: Andrew Morton +Acked-by: Ingo Molnar +Signed-off-by: Stanislaw Gruszka +Signed-off-by: Greg Kroah-Hartman + +--- + include/linux/math64.h | 19 ++++++++++++++++++- + lib/div64.c | 19 +++++++++++++------ + 2 files changed, 31 insertions(+), 7 deletions(-) + +--- a/include/linux/math64.h ++++ b/include/linux/math64.h +@@ -30,6 +30,15 @@ static inline s64 div_s64_rem(s64 divide + } + + /** ++ * div64_u64_rem - unsigned 64bit divide with 64bit divisor ++ */ ++static inline u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder) ++{ ++ *remainder = dividend % divisor; ++ return dividend / divisor; ++} ++ ++/** + * div64_u64 - unsigned 64bit divide with 64bit divisor + */ + static inline u64 div64_u64(u64 dividend, u64 divisor) +@@ -61,8 +70,16 @@ static inline u64 div_u64_rem(u64 divide + extern s64 div_s64_rem(s64 dividend, s32 divisor, s32 *remainder); + #endif + ++#ifndef div64_u64_rem ++extern u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder); ++#endif ++ + #ifndef div64_u64 +-extern u64 div64_u64(u64 dividend, u64 divisor); ++static inline u64 div64_u64(u64 dividend, u64 divisor) ++{ ++ u64 remainder; ++ return div64_u64_rem(dividend, divisor, &remainder); ++} + #endif + + #ifndef div64_s64 +--- a/lib/div64.c ++++ b/lib/div64.c +@@ -79,9 +79,10 @@ EXPORT_SYMBOL(div_s64_rem); + #endif + + /** +- * div64_u64 - unsigned 64bit divide with 64bit divisor ++ * div64_u64_rem - unsigned 64bit divide with 64bit divisor and 64bit remainder + * @dividend: 64bit dividend + * @divisor: 64bit divisor ++ * @remainder: 64bit remainder + * + * This implementation is a modified version of the algorithm proposed + * by the book 'Hacker's Delight'. The original source and full proof +@@ -89,27 +90,33 @@ EXPORT_SYMBOL(div_s64_rem); + * + * 'http://www.hackersdelight.org/HDcode/newCode/divDouble.c.txt' + */ +-#ifndef div64_u64 +-u64 div64_u64(u64 dividend, u64 divisor) ++#ifndef div64_u64_rem ++u64 div64_u64_rem(u64 dividend, u64 divisor, u64 *remainder) + { + u32 high = divisor >> 32; + u64 quot; + + if (high == 0) { +- quot = div_u64(dividend, divisor); ++ u32 rem32; ++ quot = div_u64_rem(dividend, divisor, &rem32); ++ *remainder = rem32; + } else { + int n = 1 + fls(high); + quot = div_u64(dividend >> n, divisor >> n); + + if (quot != 0) + quot--; +- if ((dividend - quot * divisor) >= divisor) ++ ++ *remainder = dividend - quot * divisor; ++ if (*remainder >= divisor) { + quot++; ++ *remainder -= divisor; ++ } + } + + return quot; + } +-EXPORT_SYMBOL(div64_u64); ++EXPORT_SYMBOL(div64_u64_rem); + #endif + + /** diff --git a/queue-3.9/series b/queue-3.9/series index 6d52cebbdae..03b198ef56f 100644 --- a/queue-3.9/series +++ b/queue-3.9/series @@ -15,3 +15,4 @@ dm-stripe-fix-regression-in-stripe_width-calculation.patch dm-bufio-avoid-a-possible-__vmalloc-deadlock.patch dm-snapshot-fix-error-return-code-in-snapshot_ctr.patch dm-cache-fix-error-return-code-in-cache_create.patch +math64-new-div64_u64_rem-helper.patch