我是linux内核的新手,对此并不了解。出于某种原因,我必须跟踪linux主机内核和kvm来宾内核的延迟问题。现在我只需要将 native_apic_msr_write (这在 linux主机内核中使用)与 naitve_apic_mem_write 进行比较(用于 kvm guset内核)。
基于我的有限知识,我试图读取这两个函数调用的源代码,我相信native_apic_msr_write用于向msr寄存器写入一个值(希望这是正确的)。 我的问题是我不明白native_apic_mem_write的作用,因为它调用了一些名为ALTERNATIVE的内联汇编,我也不熟悉它。
我附上了以下代码。 有人可以解释一下里面发生了什么?它不必非常详细。任何信息都会有所帮助,谢谢。
#define ALTERNATIVE(oldinstr, newinstr, feature) \
80 \
81 "661:\n\t" oldinstr "\n662:\n" \
82 ".section .altinstructions,\"a\"\n" \
83 " .long 661b - .\n" /* label */ \
84 " .long 663f - .\n" /* new instruction */ \
85 " .word " __stringify(feature) "\n" /* feature bit */ \
86 " .byte 662b-661b\n" /* sourcelen */ \
87 " .byte 664f-663f\n" /* replacementlen */ \
88 ".previous\n" \
89 ".section .discard,\"aw\",@progbits\n" \
90 " .byte 0xff + (664f-663f) - (662b-661b)\n" /* rlen <= slen */ \
91 ".previous\n" \
92 ".section .altinstr_replacement, \"ax\"\n" \
93 "663:\n\t" newinstr "\n664:\n" /* replacement */ \
94 ".previous"