Last blog records how to data access between VFIO-MDEV driver(virtual device) to virtual machine. Now this blog records the interrupt from VFIO-MDEV driver(virtual device) to virtual machine.
Host side:
Actually mtty sample code has the good implementation of VFIO interrupt. The turth is VFIO-MDEV driver sends event to virtual machine.
Here we can see VFIO-MDEV driver will use event to simulate the interrupt -- MSI or legacy.
And the whole flow is about:
1. Virtual machine get interrupt information(how many interrupts in VFIO-MDEV device) from VFIO-MDEV driver by 'VFIO_DEVICE_GET_IRQ_INFO'.
2. Virtual machine setup the event path by 'VFIO_DEVICE_SET_IRQS'.
So your VFIO-MDEV driver has to implement this two cases in mdev_parent_ops.ioctl(). Please read the mtty.c and you will understand it.
OK, now we can call this trigger function.
On virtual machine:
I added code the get the irq number and register irq handler to the system.
Here you can see I use legacy interrupt as mtty device's original code setup it.
Result:
On virtual machine:
We can see firstly I got the irq number and then my irq handler was triggered.
So the interrupt works.