aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci
diff options
context:
space:
mode:
authorBjorn Helgaas <bhelgaas@google.com>2017-09-07 13:23:59 -0500
committerBjorn Helgaas <bhelgaas@google.com>2017-09-07 13:23:59 -0500
commitb7c19476bd80183f105c6aa22d2bbad1ecd26a2e (patch)
tree465c32893639c462ab77e38164e698b654f8302a /drivers/pci
parentMerge branch 'pci/host-hisi' into next (diff)
parentPCI: hv: Do not sleep in compose_msi_msg() (diff)
downloadlinux-dev-b7c19476bd80183f105c6aa22d2bbad1ecd26a2e.tar.xz
linux-dev-b7c19476bd80183f105c6aa22d2bbad1ecd26a2e.zip
Merge branch 'pci/host-hv' into next
* pci/host-hv: PCI: hv: Do not sleep in compose_msi_msg()
Diffstat (limited to 'drivers/pci')
-rw-r--r--drivers/pci/host/pci-hyperv.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/pci/host/pci-hyperv.c b/drivers/pci/host/pci-hyperv.c
index 415dcc69a502..334c9a7b8991 100644
--- a/drivers/pci/host/pci-hyperv.c
+++ b/drivers/pci/host/pci-hyperv.c
@@ -50,6 +50,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
+#include <linux/delay.h>
#include <linux/semaphore.h>
#include <linux/irqdomain.h>
#include <asm/irqdomain.h>
@@ -1159,7 +1160,12 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
goto free_int_desc;
}
- wait_for_completion(&comp.comp_pkt.host_event);
+ /*
+ * Since this function is called with IRQ locks held, can't
+ * do normal wait for completion; instead poll.
+ */
+ while (!try_wait_for_completion(&comp.comp_pkt.host_event))
+ udelay(100);
if (comp.comp_pkt.completion_status < 0) {
dev_err(&hbus->hdev->device,