From patchwork Sat Apr 23 10:23:39 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 729041 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 p3NANvAZ020321 for ; Sat, 23 Apr 2011 10:23:57 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753081Ab1DWKXx (ORCPT ); Sat, 23 Apr 2011 06:23:53 -0400 Received: from fmmailgate02.web.de ([217.72.192.227]:44631 "EHLO fmmailgate02.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753227Ab1DWKXq (ORCPT ); Sat, 23 Apr 2011 06:23:46 -0400 Received: from smtp08.web.de ( [172.20.5.216]) by fmmailgate02.web.de (Postfix) with ESMTP id A5BFF19C737B6; Sat, 23 Apr 2011 12:23:45 +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 1QDa09-0001ah-01; Sat, 23 Apr 2011 12:23:45 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org, "Michael S. Tsirkin" Subject: [PATCH 6/7] qemu-kvm: Move entry comparison into kvm_msi_update_message Date: Sat, 23 Apr 2011 12:23:39 +0200 Message-Id: <9b5264ccc95a950e682bccbc489866b317fdaa14.1303554218.git.jan.kiszka@web.de> 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: V01U2FsdGVkX18uTunoNJagT5XCTp13ikeO10XMVU28FCfGbhZ1 0NtlTkjt+Hj59I3utAxHkNfZCTQB9CenKezHRt4vmJmMfjMwbV eFy1/OZM8= 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:57 +0000 (UTC) From: Jan Kiszka Checking the the update chances the message content is a common task for both MSI types. Signed-off-by: Jan Kiszka --- hw/msix.c | 26 +++++++++++++------------- qemu-kvm.c | 14 +++++++++++++- 2 files changed, 26 insertions(+), 14 deletions(-) diff --git a/hw/msix.c b/hw/msix.c index 8c8bc18..9cee086 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -76,8 +76,10 @@ static void kvm_msix_message_from_vector(PCIDevice *dev, unsigned vector, static void kvm_msix_update(PCIDevice *dev, int vector, int was_masked, int is_masked) { - KVMMsiMessage e = {}, *entry; + KVMMsiMessage new_entry, *entry; int mask_cleared = was_masked && !is_masked; + int r; + /* It is only legal to change an entry when it is masked. Therefore, it is * enough to update the routing in kernel when mask is being cleared. */ if (!mask_cleared) { @@ -86,19 +88,17 @@ static void kvm_msix_update(PCIDevice *dev, int vector, if (!dev->msix_entry_used[vector]) { return; } - entry = dev->msix_irq_entries + vector; - e.gsi = entry->gsi; - kvm_msix_message_from_vector(dev, vector, &e); - if (memcmp(entry, &e, sizeof e) != 0) { - int r; - r = kvm_msi_message_update(entry, &e); - if (r) { - fprintf(stderr, "%s: kvm_update_msix failed: %s\n", __func__, - strerror(-r)); - exit(1); - } - *entry = e; + entry = dev->msix_irq_entries + vector; + kvm_msix_message_from_vector(dev, vector, &new_entry); + r = kvm_msi_message_update(entry, &new_entry); + if (r < 0) { + fprintf(stderr, "%s: kvm_update_msix failed: %s\n", __func__, + strerror(-r)); + exit(1); + } + if (r > 0) { + *entry = new_entry; r = kvm_commit_irq_routes(); if (r) { fprintf(stderr, "%s: kvm_commit_irq_routes failed: %s\n", __func__, diff --git a/qemu-kvm.c b/qemu-kvm.c index 7317f87..e8c2009 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -1011,10 +1011,22 @@ int kvm_msi_message_del(KVMMsiMessage *msg) int kvm_msi_message_update(KVMMsiMessage *old, KVMMsiMessage *new) { struct kvm_irq_routing_entry e1, e2; + int ret; + + new->gsi = old->gsi; + if (memcmp(old, new, sizeof(KVMMsiMessage)) == 0) { + return 0; + } kvm_msi_routing_entry(&e1, old); kvm_msi_routing_entry(&e2, new); - return kvm_update_routing_entry(&e1, &e2); + + ret = kvm_update_routing_entry(&e1, &e2); + if (ret < 0) { + return ret; + } + + return 1; }