当前位置: 代码迷 >> 综合 >> irqfd内核代码阅读笔记
  详细解决方案

irqfd内核代码阅读笔记

热度:27   发布时间:2024-01-24 21:05:50.0

irqfd的入口是一个ioctl,kvm_irqfd->kvm_irqfd_assign。

kvm_irqfd_assign里其实是对poll功能的一个简单应用,poll可能poll多个文件,而irqfd只poll一个文件就是eventfd。

首先分配一个kvm_kernel_irqfd结构类似于poll_table_entry,里面有一个waitqueue_entry, 用来挂载到eventfd的waitqueue_head。

然后初始化一些变量重要的有gsi,eventctx的指针,waitqueue_entry的回调函数,poll_wait的回调函数,然后调用vsf_poll一次其实就是eventfd的poll,用来建立irqfd与eventfd的关联,此后eventfd一但有事件到来,irqfd_wakeup会被触发,它主要工作就是注入中断。这里没有对eventfd的计数器count做改动,倒也不是问题因为中断频率没那么快,不会导致溢出。

问题:irqfd对比KVM_IRQ_LINE的ioctl的优势在哪里,如果qemu虚拟出来的外设发出中断,这两种方式都需要陷入到内核,一个是write,一个是ioctl,irqfd用一个work来延后中断的注入,但是对于快速中断的情况没起作用。弄irqfd的一个新框架仅仅是为了这么点优化吗?

 

 

  相关解决方案