Lines Matching full:intx
58 * Disabling BAR mmaping can be slow, but toggling it around INTx can
69 * other options with the x-intx-mmap-timeout-ms parameter (a value of
76 if (vdev->intx.pending) { in vfio_intx_mmap_enable()
77 timer_mod(vdev->intx.mmap_timer, in vfio_intx_mmap_enable()
78 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vdev->intx.mmap_timeout); in vfio_intx_mmap_enable()
89 if (!event_notifier_test_and_clear(&vdev->intx.interrupt)) { in vfio_intx_interrupt()
93 trace_vfio_intx_interrupt(vdev->vbasedev.name, 'A' + vdev->intx.pin); in vfio_intx_interrupt()
95 vdev->intx.pending = true; in vfio_intx_interrupt()
98 if (vdev->intx.mmap_timeout) { in vfio_intx_interrupt()
99 timer_mod(vdev->intx.mmap_timer, in vfio_intx_interrupt()
100 qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) + vdev->intx.mmap_timeout); in vfio_intx_interrupt()
108 if (!vdev->intx.pending) { in vfio_intx_eoi()
114 vdev->intx.pending = false; in vfio_intx_eoi()
122 int irq_fd = event_notifier_get_fd(&vdev->intx.interrupt); in vfio_intx_enable_kvm()
125 vdev->intx.route.mode != PCI_INTX_ENABLED || in vfio_intx_enable_kvm()
133 vdev->intx.pending = false; in vfio_intx_enable_kvm()
137 if (event_notifier_init(&vdev->intx.unmask, 0)) { in vfio_intx_enable_kvm()
143 &vdev->intx.interrupt, in vfio_intx_enable_kvm()
144 &vdev->intx.unmask, in vfio_intx_enable_kvm()
145 vdev->intx.route.irq)) { in vfio_intx_enable_kvm()
152 event_notifier_get_fd(&vdev->intx.unmask), in vfio_intx_enable_kvm()
160 vdev->intx.kvm_accel = true; in vfio_intx_enable_kvm()
167 kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, &vdev->intx.interrupt, in vfio_intx_enable_kvm()
168 vdev->intx.route.irq); in vfio_intx_enable_kvm()
170 event_notifier_cleanup(&vdev->intx.unmask); in vfio_intx_enable_kvm()
183 if (!vdev->intx.kvm_accel) { in vfio_intx_disable_kvm()
192 vdev->intx.pending = false; in vfio_intx_disable_kvm()
195 /* Tell KVM to stop listening for an INTx irqfd */ in vfio_intx_disable_kvm()
196 if (kvm_irqchip_remove_irqfd_notifier_gsi(kvm_state, &vdev->intx.interrupt, in vfio_intx_disable_kvm()
197 vdev->intx.route.irq)) { in vfio_intx_disable_kvm()
198 error_report("vfio: Error: Failed to disable INTx irqfd: %m"); in vfio_intx_disable_kvm()
202 event_notifier_cleanup(&vdev->intx.unmask); in vfio_intx_disable_kvm()
205 qemu_set_fd_handler(event_notifier_get_fd(&vdev->intx.interrupt), in vfio_intx_disable_kvm()
208 vdev->intx.kvm_accel = false; in vfio_intx_disable_kvm()
222 vdev->intx.route.irq, route->irq); in vfio_intx_update()
226 vdev->intx.route = *route; in vfio_intx_update()
249 route = pci_device_route_intx_to_irq(&vdev->pdev, vdev->intx.pin); in vfio_intx_routing_notifier()
251 if (pci_intx_route_changed(&vdev->intx.route, &route)) { in vfio_intx_routing_notifier()
261 vfio_intx_update(vdev, &vdev->intx.route); in vfio_irqchip_change()
278 vdev->intx.pin = pin - 1; /* Pin A (1) -> irq[0] */ in vfio_intx_enable()
287 vdev->intx.route = pci_device_route_intx_to_irq(&vdev->pdev, in vfio_intx_enable()
288 vdev->intx.pin); in vfio_intx_enable()
292 ret = event_notifier_init(&vdev->intx.interrupt, 0); in vfio_intx_enable()
297 fd = event_notifier_get_fd(&vdev->intx.interrupt); in vfio_intx_enable()
303 event_notifier_cleanup(&vdev->intx.interrupt); in vfio_intx_enable()
321 timer_del(vdev->intx.mmap_timer); in vfio_intx_disable()
324 vdev->intx.pending = false; in vfio_intx_disable()
328 fd = event_notifier_get_fd(&vdev->intx.interrupt); in vfio_intx_disable()
330 event_notifier_cleanup(&vdev->intx.interrupt); in vfio_intx_disable()
782 * out to fall back to INTx for this device. in vfio_msi_enable()
1326 * device to INTx mode (if supported). Therefore we need to first in vfio_disable_interrupts()
1327 * disable MSI/X and then cleanup by disabling INTx. in vfio_disable_interrupts()
2432 * Also put INTx Disable in known state. in vfio_pci_pre_reset()
3173 vdev->intx.mmap_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, in vfio_realize()
3238 if (vdev->intx.mmap_timer) { in vfio_realize()
3239 timer_free(vdev->intx.mmap_timer); in vfio_realize()
3282 if (vdev->intx.mmap_timer) { in vfio_exitfn()
3283 timer_free(vdev->intx.mmap_timer); in vfio_exitfn()
3371 DEFINE_PROP_UINT32("x-intx-mmap-timeout-ms", VFIOPCIDevice,
3372 intx.mmap_timeout, 1100),
3386 DEFINE_PROP_BOOL("x-no-kvm-intx", VFIOPCIDevice, no_kvm_intx, false),