函数源码

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source File:arch\x86\include\asm\msr.h Create Date:2022-07-27 06:38:55
首页 Copyright©Brick

136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
static inline unsigned long long native_read_msr_safe(unsigned int msr,
                              int *err)
{
    DECLARE_ARGS(val, low, high);
 
    asm volatile("2: rdmsr ; xor %[err],%[err]\n"
             "1:\n\t"
             ".section .fixup,\"ax\"\n\t"
             "3: mov %[fault],%[err]\n\t"
             "xorl %%eax, %%eax\n\t"
             "xorl %%edx, %%edx\n\t"
             "jmp 1b\n\t"
             ".previous\n\t"
             _ASM_EXTABLE(2b, 3b)
             : [err] "=r" (*err), EAX_EDX_RET(val, low, high)
             : "c" (msr), [fault] "i" (-EIO));
    if (msr_tracepoint_active(__tracepoint_read_msr))
        do_trace_read_msr(msr, EAX_EDX_VAL(val, low, high), *err);
    return EAX_EDX_VAL(val, low, high);
}