aboutsummaryrefslogtreecommitdiff
path: root/hw/usb
diff options
context:
space:
mode:
authorRuimei Yan <ruimei.yan@windriver.com>2021-05-21 10:42:23 +0800
committerGerd Hoffmann <kraxel@redhat.com>2021-05-28 09:10:14 +0200
commit3c6151cd11ae7e4a7dae10f8c17ab1fe2f0a73bf (patch)
treebc7c7bdb1f7505bc988d78794d7e4e83d8565b21 /hw/usb
parentf9c481247f6a2c87439e0ebfa42cd56325db2ac0 (diff)
downloadqemu-3c6151cd11ae7e4a7dae10f8c17ab1fe2f0a73bf.zip
qemu-3c6151cd11ae7e4a7dae10f8c17ab1fe2f0a73bf.tar.gz
qemu-3c6151cd11ae7e4a7dae10f8c17ab1fe2f0a73bf.tar.bz2
hw/usb: hcd-xhci-pci: Raise MSI/MSI-X interrupts only when told to
At present MSI / MSI-X interrupts are triggered regardless of the irq level. We should have checked the level to determine whether the interrupt needs to be delivered. The level check logic was present in early versions of the xhci model, but got dropped later by a rework of interrupt handling under commit 4c4abe7cc903 ("xhci: rework interrupt handling"). Fixes: 4c4abe7cc903 ("xhci: rework interrupt handling") Signed-off-by: Ruimei Yan <ruimei.yan@windriver.com> Signed-off-by: Bin Meng <bin.meng@windriver.com> Message-Id: <20210521024224.2277634-1-bmeng.cn@gmail.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Diffstat (limited to 'hw/usb')
-rw-r--r--hw/usb/hcd-xhci-pci.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/hw/usb/hcd-xhci-pci.c b/hw/usb/hcd-xhci-pci.c
index 9421734..b6acd17 100644
--- a/hw/usb/hcd-xhci-pci.c
+++ b/hw/usb/hcd-xhci-pci.c
@@ -67,12 +67,13 @@ static void xhci_pci_intr_raise(XHCIState *xhci, int n, bool level)
msi_enabled(pci_dev))) {
pci_set_irq(pci_dev, level);
}
- if (msix_enabled(pci_dev)) {
+
+ if (msix_enabled(pci_dev) && level) {
msix_notify(pci_dev, n);
return;
}
- if (msi_enabled(pci_dev)) {
+ if (msi_enabled(pci_dev) && level) {
msi_notify(pci_dev, n);
return;
}