Hello List, I have these 3 different call graphs, they are somehow connected in the Virtio-blk I/O path. Any help??
"->" means "invokes" virtio_blk_device_realize -> virtio_blk_complete_request -> virtqueue_push, virtqueue_notify, virtio_notify_vector -> pci_set_irq -> pci_irq_handler -> pci_change_irq_level chain 2) virtio_blk_device_realize -> virtio_blk_handle_output -> virtio_blk_submit_multireq -> submit_requests _> blk_aio_writev -> virtio_blk_rw_complete -> virtio_blk_req_complete -> complete_request_vring -> qemu_bh_schedule -> aio_notify -> event_notifier_set(EventNotifier *e) do { ret = write(e->wfd, &value, sizeof(value)); } w chain 3) virtio_pci_config_write -> virtio_ioport_write -> virtio_queue_notify -> virtio_queue_notify_vq -> VIRTIO_PCI_QUEUE_NOTIFY: /** * Notify hypervisor about queue update */ void virtio_queue_notify(struct virtio_device *dev, int queue) { if (dev->type == VIRTIO_TYPE_PCI) { ci_write_16(dev->base+VIRTIOHDR_QUEUE_NOTIFY, cpu_to_le16(queue)); } } Thanks in advance On Sat, Jul 30, 2016 at 4:38 PM, Charls D. Chap <chapcha...@gmail.com> wrote: > Hello List, > > I have these 3 different call graphs, they are somehow connected in > the Virtio-blk I/O path. Any help?? > > "->" means "invokes" > > virtio_blk_device_realize -> virtio_blk_complete_request -> > virtqueue_push, virtqueue_notify, virtio_notify_vector -> pci_set_irq -> > pci_irq_handler -> pci_change_irq_level > > > chain 2) > virtio_blk_device_realize -> virtio_blk_handle_output -> > virtio_blk_submit_multireq -> submit_requests _> > blk_aio_writev -> virtio_blk_rw_complete -> virtio_blk_req_complete -> > complete_request_vring -> qemu_bh_schedule -> aio_notify -> > event_notifier_set(EventNotifier *e) > do { > ret = write(e->wfd, &value, sizeof(value)); > } w > > > chain 3) > virtio_pci_config_write -> virtio_ioport_write -> virtio_queue_notify -> > virtio_queue_notify_vq -> > > VIRTIO_PCI_QUEUE_NOTIFY: > /** > * Notify hypervisor about queue update > */ > void virtio_queue_notify(struct virtio_device *dev, int queue) > { > if (dev->type == VIRTIO_TYPE_PCI) { > ci_write_16(dev->base+VIRTIOHDR_QUEUE_NOTIFY, cpu_to_le16(queue)); > } > } > > Thanks in advance