Эх сурвалжийг харах

Merge branch 'pci/host-hv' into next

* pci/host-hv:
  PCI: hv: Do not sleep in compose_msi_msg()
Bjorn Helgaas 8 жил өмнө
parent
commit
b7c19476bd

+ 7 - 1
drivers/pci/host/pci-hyperv.c

@@ -50,6 +50,7 @@
 #include <linux/kernel.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/module.h>
 #include <linux/pci.h>
 #include <linux/pci.h>
+#include <linux/delay.h>
 #include <linux/semaphore.h>
 #include <linux/semaphore.h>
 #include <linux/irqdomain.h>
 #include <linux/irqdomain.h>
 #include <asm/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;
 		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) {
 	if (comp.comp_pkt.completion_status < 0) {
 		dev_err(&hbus->hdev->device,
 		dev_err(&hbus->hdev->device,