summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Kiszka <jan.kiszka@siemens.com>2012-08-17 08:58:59 +0200
committerMarcelo Tosatti <mtosatti@redhat.com>2012-08-23 17:02:33 -0300
commit59ac4119b4df8f2690482da228cb8ffc53258a24 (patch)
tree517cc34c9376714b2635481eecb5909d1ae0a0de
parent9f13b061c7ef6ee4e7df6151141dddb879333c35 (diff)
pci-assign: Replace kvm_assign_set_msix_entry with kvm_device_msix_set_vector
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.c7
-rw-r--r--qemu-kvm.c8
-rw-r--r--qemu-kvm.h4
-rw-r--r--target-i386/kvm.c12
-rw-r--r--target-i386/kvm_i386.h2
5 files changed, 16 insertions, 17 deletions
diff --git a/hw/device-assignment.c b/hw/device-assignment.c
index 0e2f8e6aa..af8a5aa32 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_entry msix_entry;
MSIXTableEntry *entry = adev->msix_table;
/* Get the usable entry number for allocating */
@@ -1075,7 +1074,6 @@ 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 = adev->dev_id;
entry = adev->msix_table;
for (i = 0; i < adev->msix_max; i++, entry++) {
if (msix_masked(entry)) {
@@ -1098,9 +1096,8 @@ static int assigned_dev_update_msix_mmio(PCIDevice *pci_dev)
kvm_add_routing_entry(kvm_state, &adev->entry[i]);
- msix_entry.gsi = adev->entry[i].gsi;
- msix_entry.entry = i;
- r = kvm_assign_set_msix_entry(kvm_state, &msix_entry);
+ r = kvm_device_msix_set_vector(kvm_state, adev->dev_id, i,
+ adev->entry[i].gsi);
if (r) {
fprintf(stderr, "fail to set MSI-X entry! %s\n", strerror(-r));
break;
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 1a2a4fdc3..ec1911f35 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -185,14 +185,6 @@ int kvm_get_irq_route_gsi(void)
#endif
}
-#ifdef KVM_CAP_DEVICE_MSIX
-int kvm_assign_set_msix_entry(KVMState *s,
- struct kvm_assigned_msix_entry *entry)
-{
- return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_ENTRY, entry);
-}
-#endif
-
#if !defined(TARGET_I386)
void kvm_arch_init_irq_routing(KVMState *s)
{
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 3fd6046f4..ad628d598 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -65,10 +65,6 @@ int kvm_del_routing_entry(struct kvm_irq_routing_entry *entry);
int kvm_update_routing_entry(struct kvm_irq_routing_entry *entry,
struct kvm_irq_routing_entry *newentry);
-
-int kvm_assign_set_msix_entry(KVMState *s,
- struct kvm_assigned_msix_entry *entry);
-
#endif /* CONFIG_KVM */
#endif
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 8c8eea1b3..a0adda03a 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -2173,6 +2173,18 @@ int kvm_device_msix_init_vectors(KVMState *s, uint32_t dev_id,
return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_NR, &msix_nr);
}
+int kvm_device_msix_set_vector(KVMState *s, uint32_t dev_id, uint32_t vector,
+ int virq)
+{
+ struct kvm_assigned_msix_entry msix_entry = {
+ .assigned_dev_id = dev_id,
+ .gsi = virq,
+ .entry = vector,
+ };
+
+ return kvm_vm_ioctl(s, KVM_ASSIGN_SET_MSIX_ENTRY, &msix_entry);
+}
+
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 aac14eba6..bd3b398b1 100644
--- a/target-i386/kvm_i386.h
+++ b/target-i386/kvm_i386.h
@@ -30,6 +30,8 @@ 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_set_vector(KVMState *s, uint32_t dev_id, uint32_t vector,
+ int virq);
int kvm_device_msix_deassign(KVMState *s, uint32_t dev_id);
#endif