|
|
76daa3 |
From c4a89076814a915d3db4680df7138930d8d12ffb Mon Sep 17 00:00:00 2001
|
|
|
76daa3 |
From: Peter Xu <peterx@redhat.com>
|
|
|
76daa3 |
Date: Tue, 6 Jun 2017 06:57:31 +0200
|
|
|
76daa3 |
Subject: [PATCH 08/17] kvm: irqchip: skip update msi when disabled
|
|
|
76daa3 |
|
|
|
76daa3 |
RH-Author: Peter Xu <peterx@redhat.com>
|
|
|
76daa3 |
Message-id: <1496732251-27935-4-git-send-email-peterx@redhat.com>
|
|
|
76daa3 |
Patchwork-id: 75490
|
|
|
76daa3 |
O-Subject: [RHEL7.4 qemu-kvm-rhev PATCH 3/3] kvm: irqchip: skip update msi when disabled
|
|
|
76daa3 |
Bugzilla: 1448813
|
|
|
76daa3 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Xiao Wang <jasowang@redhat.com>
|
|
|
76daa3 |
RH-Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
It's possible that one device kept its irqfd/virq there even when
|
|
|
76daa3 |
MSI/MSIX was disabled globally for that device. One example is
|
|
|
76daa3 |
virtio-net-pci (see commit f1d0f15a6 and virtio_pci_vq_vector_mask()).
|
|
|
76daa3 |
It is used as a fast path to avoid allocate/release irqfd/virq
|
|
|
76daa3 |
frequently when guest enables/disables MSIX.
|
|
|
76daa3 |
|
|
|
76daa3 |
However, this fast path brought a problem to msi_route_list, that the
|
|
|
76daa3 |
device MSIRouteEntry is still dangling there even if MSIX disabled -
|
|
|
76daa3 |
then we cannot know which message to fetch, even if we can, the messages
|
|
|
76daa3 |
are meaningless. In this case, we can just simply ignore this entry.
|
|
|
76daa3 |
|
|
|
76daa3 |
It's safe, since when MSIX is enabled again, we'll rebuild them no
|
|
|
76daa3 |
matter what.
|
|
|
76daa3 |
|
|
|
76daa3 |
Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1448813
|
|
|
76daa3 |
|
|
|
76daa3 |
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
|
76daa3 |
Message-Id: <1494309644-18743-4-git-send-email-peterx@redhat.com>
|
|
|
76daa3 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
76daa3 |
(cherry picked from commit 207aa6d44ce2cbd2444eac9cea0d853a4265303e)
|
|
|
76daa3 |
Signed-off-by: Peter Xu <peterx@redhat.com>
|
|
|
76daa3 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
76daa3 |
|
|
|
76daa3 |
Conflicts:
|
|
|
76daa3 |
target/i386/kvm.c
|
|
|
76daa3 |
|
|
|
76daa3 |
The conflict is caused by missing of upstream commit 795c40b8
|
|
|
76daa3 |
("migration: Create migration/blocker.h"), which removed the include of
|
|
|
76daa3 |
"migration/migration.h" but introduced "migration/blocker.h".
|
|
|
76daa3 |
---
|
|
|
76daa3 |
target/i386/kvm.c | 12 +++++++++---
|
|
|
76daa3 |
1 file changed, 9 insertions(+), 3 deletions(-)
|
|
|
76daa3 |
|
|
|
76daa3 |
diff --git a/target/i386/kvm.c b/target/i386/kvm.c
|
|
|
76daa3 |
index cfd7695..c3fae53 100644
|
|
|
76daa3 |
--- a/target/i386/kvm.c
|
|
|
76daa3 |
+++ b/target/i386/kvm.c
|
|
|
76daa3 |
@@ -43,6 +43,7 @@
|
|
|
76daa3 |
#include "standard-headers/asm-x86/hyperv.h"
|
|
|
76daa3 |
#include "hw/pci/pci.h"
|
|
|
76daa3 |
#include "hw/pci/msi.h"
|
|
|
76daa3 |
+#include "hw/pci/msix.h"
|
|
|
76daa3 |
#include "migration/migration.h"
|
|
|
76daa3 |
#include "exec/memattrs.h"
|
|
|
76daa3 |
#include "trace.h"
|
|
|
76daa3 |
@@ -3510,12 +3511,17 @@ static void kvm_update_msi_routes_all(void *private, bool global,
|
|
|
76daa3 |
int cnt = 0;
|
|
|
76daa3 |
MSIRouteEntry *entry;
|
|
|
76daa3 |
MSIMessage msg;
|
|
|
76daa3 |
+ PCIDevice *dev;
|
|
|
76daa3 |
+
|
|
|
76daa3 |
/* TODO: explicit route update */
|
|
|
76daa3 |
QLIST_FOREACH(entry, &msi_route_list, list) {
|
|
|
76daa3 |
cnt++;
|
|
|
76daa3 |
- msg = pci_get_msi_message(entry->dev, entry->vector);
|
|
|
76daa3 |
- kvm_irqchip_update_msi_route(kvm_state, entry->virq,
|
|
|
76daa3 |
- msg, entry->dev);
|
|
|
76daa3 |
+ dev = entry->dev;
|
|
|
76daa3 |
+ if (!msix_enabled(dev) && !msi_enabled(dev)) {
|
|
|
76daa3 |
+ continue;
|
|
|
76daa3 |
+ }
|
|
|
76daa3 |
+ msg = pci_get_msi_message(dev, entry->vector);
|
|
|
76daa3 |
+ kvm_irqchip_update_msi_route(kvm_state, entry->virq, msg, dev);
|
|
|
76daa3 |
}
|
|
|
76daa3 |
kvm_irqchip_commit_routes(kvm_state);
|
|
|
76daa3 |
trace_kvm_x86_update_msi_routes(cnt);
|
|
|
76daa3 |
--
|
|
|
76daa3 |
1.8.3.1
|
|
|
76daa3 |
|