[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20240529095206.2568162-3-yi.zhang@huaweicloud.com>
Date: Wed, 29 May 2024 17:52:00 +0800
From: Zhang Yi <yi.zhang@...weicloud.com>
To: linux-xfs@...r.kernel.org,
linux-fsdevel@...r.kernel.org
Cc: linux-kernel@...r.kernel.org,
djwong@...nel.org,
hch@...radead.org,
brauner@...nel.org,
david@...morbit.com,
chandanbabu@...nel.org,
jack@...e.cz,
willy@...radead.org,
yi.zhang@...wei.com,
yi.zhang@...weicloud.com,
chengzhihao1@...wei.com,
yukuai3@...wei.com
Subject: [RFC PATCH v4 2/8] math64: add rem_u64() to just return the remainder
From: Zhang Yi <yi.zhang@...wei.com>
Add a new helper rem_u64() to only get the remainder of unsigned 64bit
divide with 32bit divisor.
Signed-off-by: Zhang Yi <yi.zhang@...wei.com>
---
include/linux/math64.h | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/include/linux/math64.h b/include/linux/math64.h
index d34def7f9a8c..618df4862091 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/log2.h>
#include <linux/math.h>
#include <asm/div64.h>
#include <vdso/math64.h>
@@ -12,6 +13,20 @@
#define div64_long(x, y) div64_s64((x), (y))
#define div64_ul(x, y) div64_u64((x), (y))
+/**
+ * rem_u64 - remainder of unsigned 64bit divide with 32bit divisor
+ * @dividend: unsigned 64bit dividend
+ * @divisor: unsigned 32bit divisor
+ *
+ * Return: dividend % divisor
+ */
+static inline u32 rem_u64(u64 dividend, u32 divisor)
+{
+ if (is_power_of_2(divisor))
+ return dividend & (divisor - 1);
+ return dividend % divisor;
+}
+
/**
* div_u64_rem - unsigned 64bit divide with 32bit divisor with remainder
* @dividend: unsigned 64bit dividend
@@ -86,6 +101,15 @@ static inline s64 div64_s64(s64 dividend, s64 divisor)
#define div64_long(x, y) div_s64((x), (y))
#define div64_ul(x, y) div_u64((x), (y))
+#ifndef rem_u64
+static inline u32 rem_u64(u64 dividend, u32 divisor)
+{
+ if (is_power_of_2(divisor))
+ return dividend & (divisor - 1);
+ return do_div(dividend, divisor);
+}
+#endif
+
#ifndef div_u64_rem
static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder)
{
--
2.39.2
Powered by blists - more mailing lists