|  | /* Copyright (c) 2016 Google Inc. | 
|  | * Barret Rhoden <brho@cs.berkeley.edu> | 
|  | * See LICENSE for details. | 
|  | * | 
|  | * Usage: wrmsr MSR VAL | 
|  | * | 
|  | * This will write VAL to *all cores* MSR. | 
|  | * | 
|  | * e.g. wrmsr 0x199 0x100002600 */ | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <stdint.h> | 
|  | #include <sys/types.h> | 
|  | #include <sys/stat.h> | 
|  | #include <fcntl.h> | 
|  | #include <assert.h> | 
|  | #include <unistd.h> | 
|  |  | 
|  | int main(int argc, char **argv) | 
|  | { | 
|  | uint32_t msr; | 
|  | uint64_t val; | 
|  | int fd; | 
|  | ssize_t ret; | 
|  |  | 
|  | if (argc < 3) { | 
|  | printf("Usage: %s MSR VAL\n", argv[0]); | 
|  | exit(-1); | 
|  | } | 
|  | msr = strtoul(argv[1], 0, 0); | 
|  | val = strtoul(argv[2], 0, 0); | 
|  |  | 
|  | fd = open("#arch/msr", O_RDWR); | 
|  | if (fd < 0) { | 
|  | perror("open"); | 
|  | exit(-1); | 
|  | } | 
|  | ret = pwrite(fd, &val, sizeof(val), msr); | 
|  | if (ret < 0) { | 
|  | perror("pwrite"); | 
|  | exit(-1); | 
|  | } | 
|  | return 0; | 
|  | } |