msrtool: Linux /dev/cpu/*/msr returns the low 32 bits before the high 32 bits.
authorPeter Stuge <peter@stuge.se>
Mon, 26 Jan 2009 17:03:05 +0000 (17:03 +0000)
committerPeter Stuge <peter@stuge.se>
Mon, 26 Jan 2009 17:03:05 +0000 (17:03 +0000)
Thanks to Mart for spotting this!

Signed-off-by: Peter Stuge <peter@stuge.se>
Acked-by: Peter Stuge <peter@stuge.se>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3920 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/msrtool/linux.c

index efd30870617aecf6bc511c0884a668505291da39..ac94d803f97b9502172becf8c160ef31fdb24656 100644 (file)
@@ -76,13 +76,16 @@ int linux_close(uint8_t cpu) {
 }
 
 int linux_rdmsr(uint8_t cpu, uint32_t addr, struct msr *val) {
+       struct msr tmp;
        if (lseek(msr_fd[cpu], addr, SEEK_SET) == -1) {
                SYSERROR(lseek, addr);
                return 0;
        }
-       if (read(msr_fd[cpu], val, 8) != 8) {
+       if (read(msr_fd[cpu], &tmp, 8) != 8) {
                SYSERROR(read, addr);
                return 0;
        }
+       val->hi = tmp.lo;
+       val->lo = tmp.hi;
        return 1;
 }