From patchwork Thu Aug 16 13:54:23 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 1332261 Return-Path: X-Original-To: patchwork-kvm@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id 5B0A940211 for ; Thu, 16 Aug 2012 13:56:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932566Ab2HPNzy (ORCPT ); Thu, 16 Aug 2012 09:55:54 -0400 Received: from goliath.siemens.de ([192.35.17.28]:22709 "EHLO goliath.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757143Ab2HPNym (ORCPT ); Thu, 16 Aug 2012 09:54:42 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by goliath.siemens.de (8.13.6/8.13.6) with ESMTP id q7GDsZH1030767; Thu, 16 Aug 2012 15:54:35 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id q7GDsYJJ012893; Thu, 16 Aug 2012 15:54:34 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org, Alex Williamson Subject: [PATCH 09/19] pci-assign: Replace kvm_assign_set_msix_nr with kvm_device_msix_init_vectors Date: Thu, 16 Aug 2012 15:54:23 +0200 Message-Id: <44ab26b933d40d65ac3a28d28a426900ff8156e9.1345125266.git.jan.kiszka@siemens.com> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: References: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org The refactored version cleanly hides the KVM IOCTL structure from the users and also zeros out the padding field. Signed-off-by: Jan Kiszka --- 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