>> +static inline u64 div_u64_rem(u64 dividend, u32 divisor, u32 *remainder) >> +{ >> + union { >> + u64 v64; >> + u32 v32[2]; >> + } d = { dividend }; >> + u32 upper; >> + >> + upper = d.v32[1]; >> + d.v32[1] = 0; >> + if (upper >= divisor) { >> + d.v32[1] = upper / divisor; >> + upper %= divisor; >> + } >> + asm ("divl %2" : "=a" (d.v32[0]), "=d" (*remainder) : >> + "rm" (divisor), "0" (d.v32[0]), "1" (upper)); >> + return d.v64; >> +} > >Why aren't you using the simple one from include/linux/math64.h ?
Cant't use div_u64() in math64.h directly, because that will cause ld error. Even in 64-bit environment, arch/x86/boot/*.o will be built as 32-bit binary. In 64-bit binary, the dividend is handled as 64-bit value, that's OK, but in 32-bit binary, that's wrong. So it's necessary to separate the dividend to upper and lower in 32-bit binary. That's why copy the needed div_u64() here. So, when copying kstrtoull(), we should copy div_u64(). When trying to include lib/kstrtox.c, even if other error in make period are solved, we will also meet this error. We should also copy div_u64 also. And then cover the math64.h in boot/string.c, and hanlde the other error and warining who comes together. So just like Baoquan said, it's a good choice to use simple_strtoull() for now. Thanks, Chao Fan > >Rest looks ok. > >-- >Regards/Gruss, > Boris. > >Good mailing practices for 400: avoid top-posting and trim the reply. > >