Xen对中断的处理.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Xen对中断的处理

一个search代码的好命令:grep common_interrupt . -nR 说明:自己所用系统为xen3.4 x86-64 简略笔记: XEN 1.xen中断处理的公共入口为common_interrupt 2.common_interrupt中对中断现场进行保存之后,调用do_IRQ函数具体对中断进行处理。do_IRQ函数返回后调用中断返回函数ret_from_intr。 3.xen仅仅需要处理2个物理中断,即串口中断(ns16550)和计时器中断。 4.对于Guest OS中注册了的中断,do_IRQ里面会调用__do_IRQ_guest函数进行处理。 5.__do_IRQ_guest最终会对每一个注册了该中断的Domain调用send_guest_pirq,在send_guest_pirq 中设置对应vcpu(irq都是绑定在一个vcpu上)event-channel的pending位。 Guest OS 1.系统启动时在cpu_initialize_context函数中设置event_callback_eip地址为hypervisor_callback 2.hypervisor_callback实际处理的是do_hypervisor_callback 3.do_hypervisor_callback中进行堆栈等工作处理之后,调用evtchn_do_upcall对事件进行处理(所有的irq最终都转化为了事件) 4.evtchn_do_upcall调用do_IRQ进行处理 代码跟踪分析: XEN 中断处理函数入口 /xen/include/asm/x86_64/asm_defns.h 117 asmlinkage void IRQ_NAME(nr);?????????????????? \ 118 __asm__(??????????????????????????????????????? \ 119 \n__ALIGN_STR\n???????????????????????????? \ 120 STR(IRQ) #nr _interrupt:\n\t????????????????? \ 121???? pushq $0\n\t????????????????????????????? \ 122???? movl $#nr,4(%rsp)\n\t?????????????????? \ 123???? jmp common_interrupt); 中断处理公共代码 /xen/include/asm/x86_64/asm_defns.h 105 __asm__(??????????????????????????????????????? \ 106???? \n __ALIGN_STR\n??????????????????????? \ 107???? common_interrupt:\n\t???????????????????? \ 108???? STR(SAVE_ALL)?????????????????????????????? \ 109???? movq %rsp,%rdi\n\t??????????????????????? \ 110???? callq STR(do_IRQ) \n\t???????????????? \ 111???? jmp ret_from_intr\n); do_IRQ中断处理 /xen/arch/x86/irq.c 112 asmlinkage void do_IRQ(struct cpu_user_regs *regs) 113 { 114???? unsigned int????? vector = regs-entry_vector; 115???? irq_desc_t?????? *desc = irq_desc[vector]; 116???? struct irqaction *action; ................................................. 123???? if ( likely(desc-status IRQ_GUEST) ) 124???? { 125???????? irq_enter(); 126???????? __do_IRQ_guest(vector); 127???????? irq_exit(); 128???????? spin_unlock(desc-lock); 129???????? return; 130???? } ........................... 160 } /xen/arch/x86/irq.c 302 static void _

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档