aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/host/pci-hyperv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/pci/host/pci-hyperv.c')
-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 aba041438566..0fe3ea164ee5 100644
--- a/drivers/pci/host/pci-hyperv.c
+++ b/drivers/pci/host/pci-hyperv.c
@@ -50,6 +50,7 @@
50#include <linux/kernel.h> 50#include <linux/kernel.h>
51#include <linux/module.h> 51#include <linux/module.h>
52#include <linux/pci.h> 52#include <linux/pci.h>
53#include <linux/delay.h>
53#include <linux/semaphore.h> 54#include <linux/semaphore.h>
54#include <linux/irqdomain.h> 55#include <linux/irqdomain.h>
55#include <asm/irqdomain.h> 56#include <asm/irqdomain.h>
@@ -1113,7 +1114,12 @@ static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
1113 goto free_int_desc; 1114 goto free_int_desc;
1114 } 1115 }
1115 1116
1116 wait_for_completion(&comp.comp_pkt.host_event); 1117 /*
1118 * Since this function is called with IRQ locks held, can't
1119 * do normal wait for completion; instead poll.
1120 */
1121 while (!try_wait_for_completion(&comp.comp_pkt.host_event))
1122 udelay(100);
1117 1123
1118 if (comp.comp_pkt.completion_status < 0) { 1124 if (comp.comp_pkt.completion_status < 0) {
1119 dev_err(&hbus->hdev->device, 1125 dev_err(&hbus->hdev->device,