首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >native_apic_mem_write与native_apic_msr_write的差异?

native_apic_mem_write与native_apic_msr_write的差异?
EN

Stack Overflow用户
提问于 2012-08-06 18:21:13
回答 1查看 380关注 0票数 0

我是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的内联程序集,而且我对此也不太熟悉。

我附上了下面的代码。有人能解释一下里面发生了什么吗?不一定要很详细。任何信息都会有帮助的,谢谢。

代码语言:javascript
复制
#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"
EN

回答 1

Stack Overflow用户

发布于 2012-08-06 18:33:17

我相信这是SMP替代品 --这是同一个二进制内核在SMP和UP系统上运行不同指令的一种方式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11833750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档