From patchwork Sat Apr 23 10:23:37 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 729021 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 p3NANpY5020264 for ; Sat, 23 Apr 2011 10:23:52 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753087Ab1DWKXt (ORCPT ); Sat, 23 Apr 2011 06:23:49 -0400 Received: from fmmailgate03.web.de ([217.72.192.234]:56547 "EHLO fmmailgate03.web.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753172Ab1DWKXp (ORCPT ); Sat, 23 Apr 2011 06:23:45 -0400 Received: from smtp08.web.de ( [172.20.5.216]) by fmmailgate03.web.de (Postfix) with ESMTP id E250E18BD3A4D; 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-02; 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 4/7] qemu-kvm: Fix and clean up msix vector use/unuse hooks Date: Sat, 23 Apr 2011 12:23:37 +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: V01U2FsdGVkX19C7TyCV3V0Q5SlgyNuCEXjvzwfTI60JKuXK9KS 27dVMyTUnwXzwXE20d4CtthUuXNg6lVCQvyZtQKqSw+uf4BctH QEShe5Nog= 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:52 +0000 (UTC) From: Jan Kiszka Remove the premature return from msix_vector_use if the vector was already in use, this could cause usage counter imbalances. In contrast, the check for msix_entry_used on deletion was redundant. At this chance, rename the internal API to clarify what is added/deleted here. Signed-off-by: Jan Kiszka Acked-by: Michael S. Tsirkin --- hw/msix.c | 17 ++++++----------- 1 files changed, 6 insertions(+), 11 deletions(-) diff --git a/hw/msix.c b/hw/msix.c index 52facd4..1bdffb6 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -108,7 +108,7 @@ static void kvm_msix_update(PCIDevice *dev, int vector, } } -static int kvm_msix_add(PCIDevice *dev, unsigned vector) +static int kvm_msix_vector_add(PCIDevice *dev, unsigned vector) { KVMMsiMessage *kmm = dev->msix_irq_entries + vector; int r; @@ -141,11 +141,8 @@ static int kvm_msix_add(PCIDevice *dev, unsigned vector) return 0; } -static void kvm_msix_del(PCIDevice *dev, unsigned vector) +static void kvm_msix_vector_del(PCIDevice *dev, unsigned vector) { - if (dev->msix_entry_used[vector]) { - return; - } kvm_msi_message_del(&dev->msix_irq_entries[vector]); kvm_commit_irq_routes(); } @@ -548,11 +545,9 @@ int msix_vector_use(PCIDevice *dev, unsigned vector) int ret; if (vector >= dev->msix_entries_nr) return -EINVAL; - if (dev->msix_entry_used[vector]) { - return 0; - } - if (kvm_enabled() && kvm_irqchip_in_kernel()) { - ret = kvm_msix_add(dev, vector); + if (kvm_enabled() && kvm_irqchip_in_kernel() && + !dev->msix_entry_used[vector]) { + ret = kvm_msix_vector_add(dev, vector); if (ret) { return ret; } @@ -571,7 +566,7 @@ void msix_vector_unuse(PCIDevice *dev, unsigned vector) return; } if (kvm_enabled() && kvm_irqchip_in_kernel()) { - kvm_msix_del(dev, vector); + kvm_msix_vector_del(dev, vector); } msix_clr_pending(dev, vector); }