From patchwork Sat Apr 23 10:23:36 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 729031 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3NANteH020282 for ; Sat, 23 Apr 2011 10:23:55 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753285Ab1DWKXu (ORCPT ); Sat, 23 Apr 2011 06:23:50 -0400 Received: from fmmailgate02.web.de ([217.72.192.227]:44620 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753072Ab1DWKXp (ORCPT ); Sat, 23 Apr 2011 06:23:45 -0400 Received: from smtp08.web.de ( [172.20.5.216]) by fmmailgate02.web.de (Postfix) with ESMTP id 9CC0919C71325; Sat, 23 Apr 2011 12:23:44 +0200 (CEST) Received: from [88.64.17.9] (helo=localhost.localdomain) by smtp08.web.de with asmtp (TLSv1:AES256-SHA:256) (WEB.DE 4.110 #2) id 1QDa08-0001ah-01; Sat, 23 Apr 2011 12:23:44 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" Subject: [PATCH 3/7] qemu-kvm: Refactor MSI core API of KVM Date: Sat, 23 Apr 2011 12:23:36 +0200 Message-Id: X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: X-Sender: jan.kiszka@web.de X-Provags-ID: V01U2FsdGVkX1+Ecj7iBp4YmUwBT84DB4ybaDyjhBtBouVCWdm2 q1lo+xWVmLwjWBK4M95kcawowqOyljotLQHUxolXETzbvgtnCp K5kF/Zh0s= Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Sat, 23 Apr 2011 10:23:55 +0000 (UTC) From: Jan Kiszka Remove MSI-X from function names - the interface is valid for MSI as well - and use KVMMsiMessage as parameter. Signed-off-by: Jan Kiszka --- hw/msix.c | 15 ++++----------- kvm.h | 13 +++++-------- qemu-kvm.c | 32 +++++++++++++------------------- 3 files changed, 22 insertions(+), 38 deletions(-) diff --git a/hw/msix.c b/hw/msix.c index 42870c5..52facd4 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -51,12 +51,10 @@ int msix_supported; static void kvm_msix_free(PCIDevice *dev) { int vector, changed = 0; - KVMMsiMessage *kmm; for (vector = 0; vector < dev->msix_entries_nr; ++vector) { if (dev->msix_entry_used[vector]) { - kmm = &dev->msix_irq_entries[vector]; - kvm_del_msix(kmm->gsi, kmm->addr_lo, kmm->addr_hi, kmm->data); + kvm_msi_message_del(&dev->msix_irq_entries[vector]); changed = 1; } } @@ -94,9 +92,7 @@ static void kvm_msix_update(PCIDevice *dev, int vector, if (memcmp(entry, &e, sizeof e) != 0) { int r; - r = kvm_update_msix(entry->gsi, entry->addr_lo, - entry->addr_hi, entry->data, - e.gsi, e.addr_lo, e.addr_hi, e.data); + r = kvm_msi_message_update(entry, &e); if (r) { fprintf(stderr, "%s: kvm_update_msix failed: %s\n", __func__, strerror(-r)); @@ -131,7 +127,7 @@ static int kvm_msix_add(PCIDevice *dev, unsigned vector) } kmm->gsi = r; kvm_msix_message_from_vector(dev, vector, kmm); - r = kvm_add_msix(kmm->gsi, kmm->addr_lo, kmm->addr_hi, kmm->data); + r = kvm_msi_message_add(kmm); if (r < 0) { fprintf(stderr, "%s: kvm_add_msix failed: %s\n", __func__, strerror(-r)); return r; @@ -147,13 +143,10 @@ static int kvm_msix_add(PCIDevice *dev, unsigned vector) static void kvm_msix_del(PCIDevice *dev, unsigned vector) { - KVMMsiMessage *kmm; - if (dev->msix_entry_used[vector]) { return; } - kmm = &dev->msix_irq_entries[vector]; - kvm_del_msix(kmm->gsi, kmm->addr_lo, kmm->addr_hi, kmm->data); + kvm_msi_message_del(&dev->msix_irq_entries[vector]); kvm_commit_irq_routes(); } diff --git a/kvm.h b/kvm.h index 8ece0b3..179eb7e 100644 --- a/kvm.h +++ b/kvm.h @@ -223,14 +223,11 @@ typedef struct KVMMsiMessage { int kvm_has_gsi_routing(void); int kvm_get_irq_route_gsi(void); -int kvm_add_msix(uint32_t gsi, uint32_t addr_lo, - uint32_t addr_hi, uint32_t data); -int kvm_del_msix(uint32_t gsi, uint32_t addr_lo, - uint32_t addr_hi, uint32_t data); -int kvm_update_msix(uint32_t old_gsi, uint32_t old_addr_lo, - uint32_t old_addr_hi, uint32_t old_data, - uint32_t new_gsi, uint32_t new_addr_lo, - uint32_t new_addr_hi, uint32_t new_data); + +int kvm_msi_message_add(KVMMsiMessage *msg); +int kvm_msi_message_del(KVMMsiMessage *msg); +int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new); + int kvm_commit_irq_routes(void); int kvm_irqchip_in_kernel(void); diff --git a/qemu-kvm.c b/qemu-kvm.c index 7689225..9cbc109 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -969,46 +969,40 @@ int kvm_get_irq_route_gsi(void) return -ENOSPC; } -static void kvm_msix_routing_entry(struct kvm_irq_routing_entry *e, - uint32_t gsi, uint32_t addr_lo, - uint32_t addr_hi, uint32_t data) +static void kvm_msi_routing_entry(struct kvm_irq_routing_entry *e, + KVMMsiMessage *msg) { - e->gsi = gsi; + e->gsi = msg->gsi; e->type = KVM_IRQ_ROUTING_MSI; e->flags = 0; - e->u.msi.address_lo = addr_lo; - e->u.msi.address_hi = addr_hi; - e->u.msi.data = data; + e->u.msi.address_lo = msg->addr_lo; + e->u.msi.address_hi = msg->addr_hi; + e->u.msi.data = msg->data; } -int kvm_add_msix(uint32_t gsi, uint32_t addr_lo, - uint32_t addr_hi, uint32_t data) +int kvm_msi_message_add(KVMMsiMessage *msg) { struct kvm_irq_routing_entry e; - kvm_msix_routing_entry(&e, gsi, addr_lo, addr_hi, data); + kvm_msi_routing_entry(&e, msg); return kvm_add_routing_entry(&e); } -int kvm_del_msix(uint32_t gsi, uint32_t addr_lo, - uint32_t addr_hi, uint32_t data) +int kvm_msi_message_del(KVMMsiMessage *msg) { struct kvm_irq_routing_entry e; - kvm_msix_routing_entry(&e, gsi, addr_lo, addr_hi, data); + kvm_msi_routing_entry(&e, msg); return kvm_del_routing_entry(&e); } -int kvm_update_msix(uint32_t old_gsi, uint32_t old_addr_lo, - uint32_t old_addr_hi, uint32_t old_data, - uint32_t new_gsi, uint32_t new_addr_lo, - uint32_t new_addr_hi, uint32_t new_data) +int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new) { struct kvm_irq_routing_entry e1, e2; - kvm_msix_routing_entry(&e1, old_gsi, old_addr_lo, old_addr_hi, old_data); - kvm_msix_routing_entry(&e2, new_gsi, new_addr_lo, new_addr_hi, new_data); + kvm_msi_routing_entry(&e1, old); + kvm_msi_routing_entry(&e2, new); return kvm_update_routing_entry(&e1, &e2); }