| RDMSR(9) | Kernel Developer's Manual (x86) | RDMSR(9) | 
msr, rdmsr,
  rdmsr_safe, wrmsr —
#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);
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.
rdmsr(msr)rdmsr_safe(msr,
    valp)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)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().
| February 17, 2017 | NetBSD 9.4 |