diff options
Diffstat (limited to 'drivers/pci/host/pci-hyperv.c')
-rw-r--r-- | drivers/pci/host/pci-hyperv.c | 8 |
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, |