RDMSR(9) | Kernel Developer's Manual (x86) | RDMSR(9)

# NAME

msr, rdmsr, rdmsr_safe, wrmsr — functions for x86 MSRs

# SYNOPSIS

#include <x86/cpufunc.h>

uint64_t
rdmsr(u_int msr);

int
rdmsr_safe(u_int msr, uint64_t *valp);

void
wrmsr(u_int msr, uint64_t val);

# DESCRIPTION

The RDMSR instruction reads from a x86 model-specific register (MSR). Conversely, the WRMSR instruction is used to write to a MSR. In NetBSD the rdmsr(), rdmsr_safe(), and wrmsr() functions are used to access MSRs. The header <x86/specialreg.h> includes definitions for some of the commonly used MSRs, that is, control registers that are present in some x86 processor models but unavailable in others.

# FUNCTIONS

rdmsr(msr)
  Returns the value read from msr.
rdmsr_safe(msr, valp)
  The rdmsr_safe() function is a safer variant of rdmsr(). Upon successful completion, the function returns zero and the value read from the register msr is returned in valp. If a fault occurs while accessing msr, rdmsr_safe() returns EFAULT.
wrmsr(msr, val)
  The wrmsr() function writes val to the register msr.

Note that even though rdmsr_safe() provides support for reading MSRs in a safe manner, it is still a good practice to always verify that the given model-specific register is present by using the CPUID instruction, available in NetBSD via x86_cpuid().

# SEE ALSO

rdtsc(9), x86_msr_xcall(9)

October 28, 2011 | NetBSD 7.2