summaryrefslogtreecommitdiff
path: root/include/linux/math64.h
diff options
context:
space:
mode:
authorTony Lindgren <tony@atomide.com>2021-07-27 11:25:08 +0300
committerTony Lindgren <tony@atomide.com>2021-07-27 11:25:08 +0300
commit353b7a55dcaf5fb8758e09ebe2ddf5f3adbac7c5 (patch)
tree081200957b3d8925cbe913020d45a4e3ba61a7a3 /include/linux/math64.h
parent3ff340e24c9dd5cff9fc07d67914c5adf67f80d6 (diff)
parentc68ef4ad180e09805fa46965d15e1dfadf09ffa5 (diff)
Merge branch 'fixes-v5.14' into fixes
Diffstat (limited to 'include/linux/math64.h')
-rw-r--r--include/linux/math64.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/math64.h b/include/linux/math64.h
index 66deb1fdc2ef..2928f03d6d46 100644
--- a/include/linux/math64.h
+++ b/include/linux/math64.h
@@ -3,6 +3,7 @@
#define _LINUX_MATH64_H
#include <linux/types.h>
+#include <linux/math.h>
#include <vdso/math64.h>
#include <asm/div64.h>
@@ -234,6 +235,24 @@ static inline u64 mul_u64_u64_shr(u64 a, u64 b, unsigned int shift)
#endif
+#ifndef mul_s64_u64_shr
+static inline u64 mul_s64_u64_shr(s64 a, u64 b, unsigned int shift)
+{
+ u64 ret;
+
+ /*
+ * Extract the sign before the multiplication and put it back
+ * afterwards if needed.
+ */
+ ret = mul_u64_u64_shr(abs(a), b, shift);
+
+ if (a < 0)
+ ret = -((s64) ret);
+
+ return ret;
+}
+#endif /* mul_s64_u64_shr */
+
#ifndef mul_u64_u32_div
static inline u64 mul_u64_u32_div(u64 a, u32 mul, u32 divisor)
{