The refactored version cleanly hides the KVM IOCTL structure from the users and also zeros out the padding field. Signed-off-by: Jan Kiszka <jan.kiszka@xxxxxxxxxxx> --- hw/device-assignment.c | 7 ++----- qemu-kvm.c | 5 ----- qemu-kvm.h | 1 - target-i386/kvm.c | 12 ++++++++++++ target-i386/kvm_i386.h | 2 ++ 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 80ac2fc..0e2f8e6 100644 --- a/hw/device-assignment.c +++ b/hw/device-assignment.c @@ -1045,7 +1045,6 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) AssignedDevice *adev = DO_UPCAST(AssignedDevice, dev, pci_dev); uint16_t entries_nr = 0; int i, r = 0; - struct kvm_assigned_msix_nr msix_nr; struct kvm_assigned_msix_entry msix_entry; MSIXTableEntry *entry = adev->msix_table; @@ -1064,9 +1063,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) return 0; } - msix_nr.assigned_dev_id = adev->dev_id; - msix_nr.entry_nr = entries_nr; - r = kvm_assign_set_msix_nr(kvm_state, &msix_nr); + r = kvm_device_msix_init_vectors(kvm_state, adev->dev_id, entries_nr); if (r != 0) { fprintf(stderr, "fail to set MSI-X entry number for MSIX! %s\n", strerror(-r)); @@ -1078,7 +1075,7 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev) adev->irq_entries_nr = adev->msix_max; adev->entry = g_malloc0(adev->msix_max * sizeof(*(adev->entry))); - msix_entry.assigned_dev_id = msix_nr.assigned_dev_id; + msix_entry.assigned_dev_id = adev->dev_id; entry = adev->msix_table; for (i = 0; i < adev->msix_max; i++, entry++) { if (msix_masked(entry)) { diff --git a/qemu-kvm.c b/qemu-kvm.c index 8416a8d..1a2a4fd 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -186,11 +186,6 @@ int kvm_get_irq_route_gsi(void) } #ifdef KVM_CAP_DEVICE_MSIX -int kvm_assign_set_msix_nr(KVMState *s, struct kvm_assigned_msix_nr *msix_nr) -{ - return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_NR, msix_nr); -} - int kvm_assign_set_msix_entry(KVMState *s, struct kvm_assigned_msix_entry *entry) { diff --git a/qemu-kvm.h b/qemu-kvm.h index c247ad0..3fd6046 100644 --- a/qemu-kvm.h +++ b/qemu-kvm.h @@ -66,7 +66,6 @@ int kvm_update_routing_entry(struct kvm_irq_routing_entry *entry, struct kvm_irq_routing_entry *newentry); -int kvm_assign_set_msix_nr(KVMState *s, struct kvm_assigned_msix_nr *msix_nr); int kvm_assign_set_msix_entry(KVMState *s, struct kvm_assigned_msix_entry *entry); diff --git a/target-i386/kvm.c b/target-i386/kvm.c index 677a791..676f45b 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -2161,6 +2161,18 @@ bool kvm_device_msix_supported(KVMState *s) return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_NR, NULL) == -EFAULT; } +int kvm_device_msix_init_vectors(KVMState *s, uint32_t dev_id, + uint32_t nr_vectors) +{ + struct kvm_assigned_msix_nr msix_nr = { + .assigned_dev_id = dev_id, + .entry_nr = nr_vectors, + .padding = 0, + }; + + return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_NR, &msix_nr); +} + int kvm_device_msix_deassign(KVMState *s, uint32_t dev_id) { return kvm_deassign_irq_internal(s, dev_id, KVM_DEV_IRQ_GUEST_MSIX | diff --git a/target-i386/kvm_i386.h b/target-i386/kvm_i386.h index 6f66b6d..aac14eb 100644 --- a/target-i386/kvm_i386.h +++ b/target-i386/kvm_i386.h @@ -28,6 +28,8 @@ int kvm_device_msi_assign(KVMState *s, uint32_t dev_id, int virq); int kvm_device_msi_deassign(KVMState *s, uint32_t dev_id); bool kvm_device_msix_supported(KVMState *s); +int kvm_device_msix_init_vectors(KVMState *s, uint32_t dev_id, + uint32_t nr_vectors); int kvm_device_msix_deassign(KVMState *s, uint32_t dev_id); #endif -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html