From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: [PATCH for v1.0] qemu-kvm: msix: Fire mask notifier on global mask changes Date: Mon, 21 Nov 2011 19:14:08 +0200 Message-ID: <20111121171407.GA20261@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Jan Kiszka , Avi Kivity , Marcelo Tosatti , Anthony Liguori To: kvm@vger.kernel.org Return-path: Received: from mx1.redhat.com ([209.132.183.28]:16698 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753796Ab1KURN1 (ORCPT ); Mon, 21 Nov 2011 12:13:27 -0500 Content-Disposition: inline Sender: kvm-owner@vger.kernel.org List-ID: >From: Jan Kiszka Also invoke the mask notifier if the global MSI-X mask is modified. For this purpose, we push the notifier call from the per-vector mask update to the central msix_handle_mask_update. Signed-off-by: Jan Kiszka Signed-off-by: Michael S. Tsirkin --- This needs to be applied on top of: msix: avoid mask updates if mask is unchanged I'll send a reminder once it's merged. hw/msix.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/hw/msix.c b/hw/msix.c index 56422c6..e50074f 100644 --- a/hw/msix.c +++ b/hw/msix.c @@ -231,6 +231,12 @@ static void msix_handle_mask_update(PCIDevice *dev, int vector, bool was_masked) return; } + if (dev->msix_mask_notifier) { + int ret; + ret = dev->msix_mask_notifier(dev, vector, is_masked); + assert(ret >= 0); + } + if (!is_masked && msix_is_pending(dev, vector)) { msix_clr_pending(dev, vector); msix_notify(dev, vector); @@ -292,11 +298,6 @@ static void msix_mmio_write(void *opaque, target_phys_addr_t addr, if (kvm_enabled() && kvm_irqchip_in_kernel()) { kvm_msix_update(dev, vector, was_masked, msix_is_masked(dev, vector)); } - if (was_masked != msix_is_masked(dev, vector) && dev->msix_mask_notifier) { - int r = dev->msix_mask_notifier(dev, vector, - msix_is_masked(dev, vector)); - assert(r >= 0); - } msix_handle_mask_update(dev, vector, was_masked); } -- 1.7.5.53.gc233e