]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.9-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 May 2013 18:03:13 +0000 (11:03 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 10 May 2013 18:03:13 +0000 (11:03 -0700)
added patches:
math64-new-div64_u64_rem-helper.patch

queue-3.9/math64-new-div64_u64_rem-helper.patch [new file with mode: 0644]
queue-3.9/series

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 (file)
index 0000000..5ca9349
--- /dev/null
@@ -0,0 +1,119 @@
+From f792685006274a850e6cc0ea9ade275ccdfc90bc Mon Sep 17 00:00:00 2001
+From: Frederic Weisbecker <fweisbec@gmail.com>
+Date: Tue, 5 Mar 2013 18:05:46 +0100
+Subject: math64: New div64_u64_rem helper
+
+From: Frederic Weisbecker <fweisbec@gmail.com>
+
+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 <fweisbec@gmail.com>
+Cc: Stanislaw Gruszka <sgruszka@redhat.com>
+Cc: Steven Rostedt <rostedt@goodmis.org>
+Cc: Peter Zijlstra <peterz@infradead.org>
+Cc: Ingo Molnar <mingo@kernel.org>
+Cc: Andrew Morton <akpm@linux-foundation.org>
+Acked-by: Ingo Molnar <mingo@kernel.org>
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ 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
+ /**
index 6d52cebbdaee68d94f50d53d5e5fc051f4d325b2..03b198ef56f26c82717bca5fa063a907be83bb98 100644 (file)
@@ -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