18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 28c2ecf20Sopenharmony_ci#include <math.h> 38c2ecf20Sopenharmony_ci#include <unistd.h> 48c2ecf20Sopenharmony_ci#include <stdio.h> 58c2ecf20Sopenharmony_ci#include <stdlib.h> 68c2ecf20Sopenharmony_ci#include <sys/types.h> 78c2ecf20Sopenharmony_ci#include <sys/stat.h> 88c2ecf20Sopenharmony_ci#include <fcntl.h> 98c2ecf20Sopenharmony_ci#include <sys/timeb.h> 108c2ecf20Sopenharmony_ci#include <sched.h> 118c2ecf20Sopenharmony_ci#include <errno.h> 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ciint main(int argc, char **argv) { 158c2ecf20Sopenharmony_ci int cpu, fd; 168c2ecf20Sopenharmony_ci long long msr; 178c2ecf20Sopenharmony_ci char msr_file_name[64]; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci if (argc != 2) 208c2ecf20Sopenharmony_ci return 1; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci errno = 0; 238c2ecf20Sopenharmony_ci cpu = strtol(argv[1], (char **) NULL, 10); 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci if (errno) 268c2ecf20Sopenharmony_ci return 1; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci sprintf(msr_file_name, "/dev/cpu/%d/msr", cpu); 298c2ecf20Sopenharmony_ci fd = open(msr_file_name, O_RDONLY); 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci if (fd == -1) { 328c2ecf20Sopenharmony_ci perror("Failed to open"); 338c2ecf20Sopenharmony_ci return 1; 348c2ecf20Sopenharmony_ci } 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci pread(fd, &msr, sizeof(msr), 0x199); 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci printf("msr 0x199: 0x%llx\n", msr); 398c2ecf20Sopenharmony_ci return 0; 408c2ecf20Sopenharmony_ci} 41