hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/include/linux/math64.h
....@@ -28,7 +28,7 @@
2828 return dividend / divisor;
2929 }
3030
31
-/**
31
+/*
3232 * div_s64_rem - signed 64bit divide with 32bit divisor with remainder
3333 * @dividend: signed 64bit dividend
3434 * @divisor: signed 32bit divisor
....@@ -42,7 +42,7 @@
4242 return dividend / divisor;
4343 }
4444
45
-/**
45
+/*
4646 * div64_u64_rem - unsigned 64bit divide with 64bit divisor and remainder
4747 * @dividend: unsigned 64bit dividend
4848 * @divisor: unsigned 64bit divisor
....@@ -56,7 +56,7 @@
5656 return dividend / divisor;
5757 }
5858
59
-/**
59
+/*
6060 * div64_u64 - unsigned 64bit divide with 64bit divisor
6161 * @dividend: unsigned 64bit dividend
6262 * @divisor: unsigned 64bit divisor
....@@ -68,7 +68,7 @@
6868 return dividend / divisor;
6969 }
7070
71
-/**
71
+/*
7272 * div64_s64 - signed 64bit divide with 64bit divisor
7373 * @dividend: signed 64bit dividend
7474 * @divisor: signed 64bit divisor
....@@ -263,7 +263,41 @@
263263 }
264264 #endif /* mul_u64_u32_div */
265265
266
+u64 mul_u64_u64_div_u64(u64 a, u64 mul, u64 div);
267
+
266268 #define DIV64_U64_ROUND_UP(ll, d) \
267269 ({ u64 _tmp = (d); div64_u64((ll) + _tmp - 1, _tmp); })
268270
271
+/**
272
+ * DIV64_U64_ROUND_CLOSEST - unsigned 64bit divide with 64bit divisor rounded to nearest integer
273
+ * @dividend: unsigned 64bit dividend
274
+ * @divisor: unsigned 64bit divisor
275
+ *
276
+ * Divide unsigned 64bit dividend by unsigned 64bit divisor
277
+ * and round to closest integer.
278
+ *
279
+ * Return: dividend / divisor rounded to nearest integer
280
+ */
281
+#define DIV64_U64_ROUND_CLOSEST(dividend, divisor) \
282
+ ({ u64 _tmp = (divisor); div64_u64((dividend) + _tmp / 2, _tmp); })
283
+
284
+/*
285
+ * DIV_S64_ROUND_CLOSEST - signed 64bit divide with 32bit divisor rounded to nearest integer
286
+ * @dividend: signed 64bit dividend
287
+ * @divisor: signed 32bit divisor
288
+ *
289
+ * Divide signed 64bit dividend by signed 32bit divisor
290
+ * and round to closest integer.
291
+ *
292
+ * Return: dividend / divisor rounded to nearest integer
293
+ */
294
+#define DIV_S64_ROUND_CLOSEST(dividend, divisor)( \
295
+{ \
296
+ s64 __x = (dividend); \
297
+ s32 __d = (divisor); \
298
+ ((__x > 0) == (__d > 0)) ? \
299
+ div_s64((__x + (__d / 2)), __d) : \
300
+ div_s64((__x - (__d / 2)), __d); \
301
+} \
302
+)
269303 #endif /* _LINUX_MATH64_H */