我是linux内核的新手,对它不太了解。出于某种原因,我必须跟踪linux主机内核和kvm来宾内核上的延迟问题。现在我只需要比较一下在native_apic_msr_write(this linux主机内核中使用的与kvm内核中的naitve_apic_mem_write(used )。
根据我有限的知识,我试着读取这两个函数调用的源代码,我相信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"发布于 2012-08-06 18:33:17
我相信这是SMP替代品 --这是同一个二进制内核在SMP和UP系统上运行不同指令的一种方式。
https://stackoverflow.com/questions/11833750
复制相似问题