1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __VDSO_MATH64_H 3 #define __VDSO_MATH64_H 4 5 static __always_inline u32 6 __iter_div_u64_rem(u64 dividend, u32 divisor, u64 *remainder) 7 { 8 u32 ret = 0; 9 10 while (dividend >= divisor) { 11 /* The following asm() prevents the compiler from 12 optimising this loop into a modulo operation. */ 13 asm("" : "+rm"(dividend)); 14 15 dividend -= divisor; 16 ret++; 17 } 18 19 *remainder = dividend; 20 21 return ret; 22 } 23 24 #endif /* __VDSO_MATH64_H */ 25