with multilib lib32 support, the rootfs will be 32-bit, the kernel is still 64-bit, in this case run turbostat will failed with "out of range" error.
Thanks, Liwei. On 8/14/20 05:43, Len Brown wrote: > Huh? > > On Fri, Jul 17, 2020 at 2:09 AM Liwei Song <liwei.s...@windriver.com> wrote: >> >> with 32-bit rootfs, the offset may out of range when set it >> to 0xc0010299, define it as "unsigned long long" type and >> call pread64 directly in kernel. >> >> Signed-off-by: Liwei Song <liwei.s...@windriver.com> >> --- >> tools/power/x86/turbostat/turbostat.c | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/tools/power/x86/turbostat/turbostat.c >> b/tools/power/x86/turbostat/turbostat.c >> index 33b370865d16..4c5cdfcb5721 100644 >> --- a/tools/power/x86/turbostat/turbostat.c >> +++ b/tools/power/x86/turbostat/turbostat.c >> @@ -33,6 +33,7 @@ >> #include <sys/capability.h> >> #include <errno.h> >> #include <math.h> >> +#include <sys/syscall.h> >> >> char *proc_stat = "/proc/stat"; >> FILE *outf; >> @@ -381,11 +382,11 @@ int get_msr_fd(int cpu) >> return fd; >> } >> >> -int get_msr(int cpu, off_t offset, unsigned long long *msr) >> +int get_msr(int cpu, unsigned long long offset, unsigned long long *msr) >> { >> ssize_t retval; >> >> - retval = pread(get_msr_fd(cpu), msr, sizeof(*msr), offset); >> + retval = syscall(SYS_pread64, get_msr_fd(cpu), msr, sizeof(*msr), >> offset); >> >> if (retval != sizeof *msr) >> err(-1, "cpu%d: msr offset 0x%llx read failed", cpu, >> (unsigned long long)offset); >> -- >> 2.17.1 >> > >