msix table entry 填充
#0 pci_msi_domain_write_msg (irq_data=0xffff888102363c28, msg=0xffffc900003934a8) at drivers/pci/msi.c:1270
#1 0xffffffff810d19fb in irq_chip_write_msi_msg (msg=0xffffc900003934a8, data=0xffff888102363c28) at kernel/irq/msi.c:212
#2 msi_domain_activate (domain=
#3 0xffffffff810ce300 in __irq_domain_activate_irq (irqd=irqd@entry=0xffff888102363c28, reserve=reserve@entry=true) at kernel/irq/irqdomain.c:1763
#4 0xffffffff810cfe54 in irq_domain_activate_irq (irq_data=0xffff888102363c28, reserve=reserve@entry=true) at kernel/irq/irqdomain.c:1786
#5 0xffffffff810d2101 in __msi_domain_alloc_irqs (domain=0xffff888100049480, dev=0xffff888102eeb0d0, nvec=
#6 0xffffffff810d23f2 in msi_domain_alloc_irqs (domain=0xffff888102363c28, dev=0xffffc900003934a8, dev@entry=0xffff888102eeb0d0, nvec=0, nvec@entry=3) at kernel/irq/msi.c:638
#7 0xffffffff814949d0 in pci_msi_setup_msi_irqs (type=17, nvec=3, dev=0xffff888102eeb000) at drivers/pci/msi.c:43
#8 msix_capability_init (affd=
#9 __pci_enable_msix (flags=
#10 __pci_enable_msix_range (dev=dev@entry=0xffff888102eeb000, entries=entries@entry=0x0
flags=flags@entry=4) at drivers/pci/msi.c:1069
#11 0xffffffff81494c6a in __pci_enable_msix_range (flags=4, affd=0x0
#12 pci_alloc_irq_vectors_affinity (dev=0xffff888102eeb000, min_vecs=min_vecs@entry=3, max_vecs=max_vecs@entry=3, flags=4, affd=affd@entry=0x0
#13 0xffffffff81518fe3 in vp_request_msix_vectors (desc=0x0
#14 vp_find_vqs_msix (vdev=vdev@entry=0xffff888102ef9400, nvqs=nvqs@entry=3, vqs=vqs@entry=0xffff888104c7e760, callbacks=callbacks@entry=0xffff888104c7e7a0, names=names@entry=0xffff888104c7e7c0,
per_vq_vectors=per_vq_vectors@entry=true, ctx=0xffff8881009acc50, desc=0x0
#15 0xffffffff815193f3 in vp_find_vqs (vdev=vdev@entry=0xffff888102ef9400, nvqs=3, vqs=0xffff888104c7e760, callbacks=0xffff888104c7e7a0, names=0xffff888104c7e7c0, ctx=0xffff8881009acc50,
desc=0x0
#16 0xffffffff81518636 in vp_modern_find_vqs (vdev=0xffff888102ef9400, nvqs=
desc=0x0
#17 0xffffffff817c9e56 in virtio_find_vqs_ctx (desc=0x0
vdev=0xffff888102363c28) at ./include/linux/virtio_config.h:215
#18 virtnet_find_vqs (vi=vi@entry=0xffff888102eea8c0) at drivers/net/virtio_net.c:2882
#19 0xffffffff817ca3b1 in init_vqs (vi=0xffff888102eea8c0) at drivers/net/virtio_net.c:2967
#20 virtnet_probe (vdev=0xffff888102ef9400) at drivers/net/virtio_net.c:3218
#21 0xffffffff8151404b in virtio_dev_probe (_d=0xffff888102ef9410) at drivers/virtio/virtio.c:273
#22 0xffffffff81717e6d in call_driver_probe (drv=0xffffffff82de7d00
#23 really_probe (dev=dev@entry=0xffff888102ef9410, drv=drv@entry=0xffffffff82de7d00
#24 0xffffffff81718294 in __driver_probe_device (drv=drv@entry=0xffffffff82de7d00
#25 0xffffffff8171832e in driver_probe_device (drv=drv@entry=0xffffffff82de7d00
#26 0xffffffff81718911 in __device_attach_driver (drv=0xffffffff82de7d00
#27 0xffffffff81715a8d in bus_for_each_drv (bus=
at drivers/base/bus.c:427
#28 0xffffffff817185f9 in __device_attach (dev=dev@entry=0xffff888102ef9410, allow_async=allow_async@entry=true) at drivers/base/dd.c:969
#29 0xffffffff81718b2e in device_initial_probe (dev=dev@entry=0xffff888102ef9410) at drivers/base/dd.c:1016
#30 0xffffffff81716dea in bus_probe_device (dev=dev@entry=0xffff888102ef9410) at drivers/base/bus.c:487
#31 0xffffffff81714312 in device_add (dev=dev@entry=0xffff888102ef9410) at drivers/base/core.c:3396
#32 0xffffffff81513ca2 in register_virtio_device (dev=dev@entry=0xffff888102ef9400) at drivers/virtio/virtio.c:423
#33 0xffffffff81518bcb in virtio_pci_probe (pci_dev=0xffff888102eeb000, id=
#34 0xffffffff8148a0d3 in local_pci_probe (_ddi=_ddi@entry=0xffffc90000393b68) at drivers/pci/pci-driver.c:323
#35 0xffffffff8148b94d in pci_call_probe (id=
#36 __pci_device_probe (pci_dev=0xffff888102eeb000, drv=0xffffffff82dc0da0
#37 pci_device_probe (dev=0xffff888102eeb0d0) at drivers/pci/pci-driver.c:448
msix table entry unmask
#0 pci_msi_unmask_irq (data=0xffff888102363c28) at drivers/pci/msi.c:243
#1 0xffffffff810cc97f in unmask_irq (desc=
#2 unmask_irq (desc=
#3 irq_enable (desc=desc@entry=0xffff888102363c00) at kernel/irq/chip.c:345
#4 0xffffffff810cca15 in __irq_startup (desc=desc@entry=0xffff888102363c00) at kernel/irq/chip.c:249
#5 0xffffffff810ccaee in irq_startup (desc=desc@entry=0xffff888102363c00, resend=resend@entry=true, force=force@entry=false) at kernel/irq/chip.c:270
#6 0xffffffff810ca198 in __setup_irq (irq=irq@entry=33, desc=desc@entry=0xffff888102363c00, new=new@entry=0xffff888104cfd300) at kernel/irq/manage.c:1737
#7 0xffffffff810ca2df in request_threaded_irq (irq=33, handler=handler@entry=0xffffffff81518910
devname=devname@entry=0xffff888102ef9c00 “virtio1-config”, dev_id=dev_id@entry=0xffff888102ef9400) at kernel/irq/manage.c:2172
#8 0xffffffff8151905b in request_irq (dev=0xffff888102ef9400, name=0xffff888102ef9c00 “virtio1-config”, flags=0, handler=0xffffffff81518910
at ./include/linux/interrupt.h:168
#9 vp_request_msix_vectors (desc=
#10 vp_find_vqs_msix (vdev=vdev@entry=0xffff888102ef9400, nvqs=nvqs@entry=3, vqs=vqs@entry=0xffff888104c7e760, callbacks=callbacks@entry=0xffff888104c7e7a0, names=names@entry=0xffff888104c7e7c0,
per_vq_vectors=per_vq_vectors@entry=true, ctx=0xffff8881009acc50, desc=0x0
#11 0xffffffff815193f3 in vp_find_vqs (vdev=vdev@entry=0xffff888102ef9400, nvqs=3, vqs=0xffff888104c7e760, callbacks=0xffff888104c7e7a0, names=0xffff888104c7e7c0, ctx=0xffff8881009acc50,
desc=0x0
#12 0xffffffff81518636 in vp_modern_find_vqs (vdev=0xffff888102ef9400, nvqs=
desc=0x0
#13 0xffffffff817c9e56 in virtio_find_vqs_ctx (desc=0x0
vdev=0xffff888102363c28) at ./include/linux/virtio_config.h:215
#14 virtnet_find_vqs (vi=vi@entry=0xffff888102eea8c0) at drivers/net/virtio_net.c:2882
#15 0xffffffff817ca3b1 in init_vqs (vi=0xffff888102eea8c0) at drivers/net/virtio_net.c:2967
#16 virtnet_probe (vdev=0xffff888102ef9400) at drivers/net/virtio_net.c:3218
#17 0xffffffff8151404b in virtio_dev_probe (_d=0xffff888102ef9410) at drivers/virtio/virtio.c:273
#18 0xffffffff81717e6d in call_driver_probe (drv=0xffffffff82de7d00
#19 really_probe (dev=dev@entry=0xffff888102ef9410, drv=drv@entry=0xffffffff82de7d00
#20 0xffffffff81718294 in __driver_probe_device (drv=drv@entry=0xffffffff82de7d00
#21 0xffffffff8171832e in driver_probe_device (drv=drv@entry=0xffffffff82de7d00
#22 0xffffffff81718911 in __device_attach_driver (drv=0xffffffff82de7d00
#23 0xffffffff81715a8d in bus_for_each_drv (bus=
at drivers/base/bus.c:427
#24 0xffffffff817185f9 in __device_attach (dev=dev@entry=0xffff888102ef9410, allow_async=allow_async@entry=true) at drivers/base/dd.c:969
#25 0xffffffff81718b2e in device_initial_probe (dev=dev@entry=0xffff888102ef9410) at drivers/base/dd.c:1016
#26 0xffffffff81716dea in bus_probe_device (dev=dev@entry=0xffff888102ef9410) at drivers/base/bus.c:487
#27 0xffffffff81714312 in device_add (dev=dev@entry=0xffff888102ef9410) at drivers/base/core.c:3396
#28 0xffffffff81513ca2 in register_virtio_device (dev=dev@entry=0xffff888102ef9400) at drivers/virtio/virtio.c:423
#29 0xffffffff81518bcb in virtio_pci_probe (pci_dev=0xffff888102eeb000, id=
#30 0xffffffff8148a0d3 in local_pci_probe (_ddi=_ddi@entry=0xffffc90000393b68) at drivers/pci/pci-driver.c:323
#31 0xffffffff8148b94d in pci_call_probe (id=
中断配置
qemu
virtio_pci_modern_regions_init
kernel
struct virtio_pci_common_cfg {
/* About the whole device. /
__le32 device_feature_select; / read-write /
__le32 device_feature; / read-only /
__le32 guest_feature_select; / read-write /
__le32 guest_feature; / read-write /
__le16 msix_config; / read-write /
__le16 num_queues; / read-only /
__u8 device_status; / read-write /
__u8 config_generation; / read-only */
/* About a specific virtqueue. */
__le16 queue_select; /* read-write */
__le16 queue_size; /* read-write, power of 2. */
__le16 queue_msix_vector; /* read-write */
__le16 queue_enable; /* read-write */
__le16 queue_notify_off; /* read-only */
__le32 queue_desc_lo; /* read-write */
__le32 queue_desc_hi; /* read-write */
__le32 queue_avail_lo; /* read-write */
__le32 queue_avail_hi; /* read-write */
__le32 queue_used_lo; /* read-write */
__le32 queue_used_hi; /* read-write */
};