| 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().