diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2012-08-17 08:58:58 +0200 |
---|---|---|
committer | Marcelo Tosatti <mtosatti@redhat.com> | 2012-08-23 17:02:33 -0300 |
commit | 9f13b061c7ef6ee4e7df6151141dddb879333c35 (patch) | |
tree | cc1aa355e27b4812fd51966f445e6c7ae3f6adf6 | |
parent | 343c765f3fdb5fb670b18d9580802e5255618899 (diff) |
pci-assign: Replace kvm_assign_set_msix_nr with kvm_device_msix_init_vectors
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@siemens.com>
Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
-rw-r--r-- | hw/device-assignment.c | 7 | ||||
-rw-r--r-- | qemu-kvm.c | 5 | ||||
-rw-r--r-- | qemu-kvm.h | 1 | ||||
-rw-r--r-- | target-i386/kvm.c | 11 | ||||
-rw-r--r-- | target-i386/kvm_i386.h | 2 |
5 files changed, 15 insertions, 11 deletions
diff --git a/hw/device-assignment.c b/hw/device-assignment.c index 80ac2fc5a..0e2f8e6aa 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 8416a8d15..1a2a4fdc3 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 c247ad09d..3fd6046f4 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 789b3612e..8c8eea1b3 100644 --- a/target-i386/kvm.c +++ b/target-i386/kvm.c @@ -2162,6 +2162,17 @@ 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, + }; + + 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 6f66b6d7d..aac14eba6 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 |