struct rng_dev {
u8 status;
+ u8 isr;
u16 config_vector;
int fd;
ioport__write8(data, rdev.status);
break;
case VIRTIO_PCI_ISR:
- ioport__write8(data, 0x1);
- kvm__irq_line(kvm, virtio_rng_pci_device.irq_line, 0);
+ ioport__write8(data, rdev.isr);
+ kvm__irq_line(kvm, virtio_rng_pci_device.irq_line, VIRTIO_IRQ_LOW);
+ rdev.isr = VIRTIO_IRQ_LOW;
break;
case VIRTIO_MSI_CONFIG_VECTOR:
ioport__write16(data, rdev.config_vector);
while (virt_queue__available(vq)) {
virtio_rng_do_io_request(kvm, vq);
- kvm__irq_line(kvm, virtio_rng_pci_device.irq_line, 1);
+ virt_queue__trigger_irq(vq, virtio_rng_pci_device.irq_line, &rdev.isr, kvm);
}
}