[kvmtool PATCH v9 12/15] PCI: inject PCI device ID on MSI injection
Marc Zyngier
marc.zyngier at arm.com
Wed Mar 29 01:50:03 PDT 2017
On 02/02/17 16:32, Andre Przywara wrote:
> The ITS emulation requires a unique device ID to be passed along the
> MSI payload when kvmtool wants to trigger an MSI in the guest.
> According to the proposed changes to the interface add the PCI
> bus/device/function triple to the structure passed with the ioctl.
> Check the respective capability before actually adding the device ID
> to the kvm_msi struct.
>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>
> ---
> virtio/pci.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/virtio/pci.c b/virtio/pci.c
> index 98bf6b7..cecfe8a 100644
> --- a/virtio/pci.c
> +++ b/virtio/pci.c
> @@ -321,14 +321,28 @@ static void virtio_pci__msix_mmio_callback(struct kvm_cpu *vcpu,
> update_msix_map(vpci, table, vecnum);
> }
>
> -static void virtio_pci__signal_msi(struct kvm *kvm, struct virtio_pci *vpci, int vec)
> +static void virtio_pci__signal_msi(struct kvm *kvm, struct virtio_pci *vpci,
> + int vec)
> {
> + static int needs_devid = 0;
> struct kvm_msi msi = {
> .address_lo = vpci->msix_table[vec].msg.address_lo,
> .address_hi = vpci->msix_table[vec].msg.address_hi,
> .data = vpci->msix_table[vec].msg.data,
> };
>
> + if (needs_devid == 0) {
> + if (kvm__supports_vm_extension(kvm, KVM_CAP_MSI_DEVID))
Grump... Pretty horrible, even if it works. Even if we will never end-up
in a situation where we can mix ITS and non-ITS MSIs, could we instead
store this as a flag in the virtio_pci device?
> + needs_devid = 1;
> + else
> + needs_devid = -1;
> + }
> +
> + if (needs_devid > 0) {
> + msi.flags = KVM_MSI_VALID_DEVID;
> + msi.devid = vpci->dev_hdr.dev_num << 3;
> + }
> +
> ioctl(kvm->vm_fd, KVM_SIGNAL_MSI, &msi);
> }
>
>
Thanks,
M.
--
Jazz is not dead. It just smells funny...
More information about the linux-arm-kernel
mailing list