QEMU通过virtio接收报文处理流程(QEMU2.0.0)
来源:互联网 发布:淘宝女包品牌排行 编辑:程序博客网 时间:2024/06/05 07:53
1. set_guest_notifiers初始化流程
static void virtio_pci_bus_class_init(ObjectClass *klass, void *data){
k->set_guest_notifiers = virtio_pci_set_guest_notifiers;
}
2. guest_notifier的fdread函数初始化为virtio_queue_guest_notifier_read流程:
vhost_net_start
-> r = k->set_guest_notifiers(qbus->parent, total_queues * 2, true); //调用virtio_pci_set_guest_notifiers
-> virtio_pci_set_guest_notifiers
-> virtio_pci_set_guest_notifier
-> virtio_queue_set_guest_notifier_fd_handler
void virtio_queue_set_guest_notifier_fd_handler(VirtQueue *vq, bool assign, bool with_irqfd){
if (assign && !with_irqfd) {
event_notifier_set_handler(&vq->guest_notifier,virtio_queue_guest_notifier_read);
}
}
-> qemu_set_fd_handler
-> qemu_set_fd_handler2 (将virtio_queue_guest_notifier_read设置为guest_notifier的fdread函数,并加入到iohandlers中)
3. PCI的中断处理函数初始化
PCIBus *i440fx_init(){
pci_bus_irqs(b, piix3_set_irq, pci_slot_get_pirq, piix3, PIIX_NUM_PIRQS); //设定bus->set_irq为piix3_set_irq
}
4. notify初始化流程
virtio_pci_bus_class_init(){
k->notify = virtio_pci_notify;/*notify注册为virtio_pci_notify*/
}
5. 监听事件FD的过程
在vhost_net_start中,已经将guest_notifier加入到了iohandlers中
main
-> main_loop
-> main_loop_wait
-> qemu_iohandler_fill() //将iohandlers中所有的fd和处理函数加入到监听集合中
-> os_host_main_loop_wait
-> qemu_poll_ns //开始阻塞监听,返回时候说明有监听事件发生
6. Guest收包中断过程
os_host_main_loop_wait
-> qemu_poll_ns返回
-> qemu_iohandler_poll 遍历iohandlers对时间进行处理
-> 遍历iohandlers,处理所有的event
-> ioh->fd_read(ioh->opaque); //调用fdread函数,也就是virtio_queue_guest_notifier_read
-> virtio_queue_guest_notifier_read
-> virtio_irq
-> virtio_notify_vector
-> k->notify(qbus->parent, vector); //调用virtio_pci_notify
-> virtio_pci_notify
-> pci_set_irq
-> pci_irq_handler
-> pci_change_irq_level
-> bus->set_irq //调用的是piix3_set_irq
-> piix3_set_irq
-> piix3_set_irq_level
-> piix3_set_irq_pic
-> qemu_set_irq //产生中断
0 0
- QEMU通过virtio接收报文处理流程(QEMU2.0.0)
- qemu-kvm virtio 虚拟化-----Linux客户机 virtio设备初始化 (基于Qemu2.0.0 & kernel 3.10.0)
- QEMU的128位算法集合(基于QEMU2.0.0)
- QEMU内存管理之FlatView模型(QEMU2.0.0)
- ldp hello报文接收的处理流程
- qemu-kvm (QEMU2.0.0)代码分析
- Linux内核IP层的报文处理流程--从网卡接收的报文处理流程
- Linux内核IP层的报文处理流程--从网卡接收的报文处理流程
- QEMU中VCPU线程间的IPI发送核间中断(基于QEMU2.0.0)
- QEMU内存管理之生成FlatView内存拓扑模型过程分析(基于QEMU2.0.0)
- QEMU VCPU线程同步机制之QemuCond(基于QEMU2.0.0)
- linux报文处理流程
- virtio-blk后端处理-请求接收、解析、提交
- QEMU ARM异常处理流程
- isis dce接收到报文的流程
- Qemu Network Device全虚拟:前端网络流的建立(基于QEMU2.0.0)
- QEMU的AddrRange地址空间对象模型算法总结(QEMU2.0.0)
- 2309简化的报文接收处理
- virtio-netdev 数据包的发送(基于kernel v3.10)
- 最近要逛的几个地方
- vring的创建(基于kernel 3.10, qemu2.0.0)
- virtio netdev的创建(基于kernel 3.10.0; qemu 2.0.0)
- Intel 440FX(QEMU选用的主板)
- QEMU通过virtio接收报文处理流程(QEMU2.0.0)
- Android电话号码无需拨号即可显示状态(空号、通话中、有空、欠费、不在服务区等),像QQ状态一样 小黄人软件原创
- 苹果开发 笔记(82)记录一些错误日志
- 如何有效沟通-1分钟原则
- host_notifier, 虚拟机通过VHOST发包流程(基于kernel3.10.0 && qemu 2.0.0)
- Vhost Architecture(基于kernel3.10.0 & qemu2.0.0)
- linux内核的等待队列使用方法,wait_queue_head_t,进程休眠
- linux poll 和 等待队列休眠的关系(基于kernel 3.10.0)
- [个人推荐] Linux poll机制分析(基于内核3.10.0)