发布于 2021-06-21 15:46:20
使用64位除法的Linux内核代码应该使用#include <linux/math64.h>提供的函数。否则,在为32位架构构建时,GCC将尝试使用内核不使用的libgcc函数。
例如,div_u64函数将64位无符号除数除以32位无符号除数,并返回64位无符号商。OP引用的KMD代码包含以下功能:
int64_t dla_get_time_us(void)
{
return ktime_get_ns() / NSEC_PER_USEC;
}添加#include <linux/math64.h>之后,可以重写为使用div_u64函数,如下所示:
int64_t dla_get_time_us(void)
{
return div_u64(ktime_get_ns(), NSEC_PER_USEC);
}(请注意,ktime_get_ns()返回一个u64 (无符号64位整数),NSEC_PER_USEC的值为1000,因此可以用作32位除数。)
在代码中可能还有其他地方使用64位除法,但这是我发现的第一处。
https://stackoverflow.com/questions/68063150
复制相似问题