diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h
index c4d3b035f619d715a8cc8e28af1ff4972e01c72b..a4b294fddc93941dd813d4feb1ae2e46abc00f9c 100644
--- a/drivers/pci/hotplug/pciehp.h
+++ b/drivers/pci/hotplug/pciehp.h
@@ -126,7 +126,7 @@ struct controller {
 	unsigned int power_fault_detected;
 	atomic_t pending_events;
 	int request_result;
-	struct completion requester;
+	wait_queue_head_t requester;
 };
 
 /**
diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c
index e12f62b234d423a271668df098c6ea6d0d8a4dbe..b6274e58f95d9f8ee056dec90e3005c18114f056 100644
--- a/drivers/pci/hotplug/pciehp_ctrl.c
+++ b/drivers/pci/hotplug/pciehp_ctrl.c
@@ -403,9 +403,9 @@ int pciehp_sysfs_enable_slot(struct slot *p_slot)
 		 * card before the thread wakes up, so initialize to -ENODEV.
 		 */
 		ctrl->request_result = -ENODEV;
-		reinit_completion(&ctrl->requester);
 		pciehp_request(ctrl, PCI_EXP_SLTSTA_PDC);
-		wait_for_completion(&ctrl->requester);
+		wait_event(ctrl->requester,
+			   !atomic_read(&ctrl->pending_events));
 		return ctrl->request_result;
 	case POWERON_STATE:
 		ctrl_info(ctrl, "Slot(%s): Already in powering on state\n",
@@ -436,9 +436,9 @@ int pciehp_sysfs_disable_slot(struct slot *p_slot)
 	case BLINKINGOFF_STATE:
 	case ON_STATE:
 		mutex_unlock(&p_slot->lock);
-		reinit_completion(&ctrl->requester);
 		pciehp_request(ctrl, DISABLE_SLOT);
-		wait_for_completion(&ctrl->requester);
+		wait_event(ctrl->requester,
+			   !atomic_read(&ctrl->pending_events));
 		return ctrl->request_result;
 	case POWEROFF_STATE:
 		ctrl_info(ctrl, "Slot(%s): Already in powering off state\n",
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c
index 50d856f9534d2bd880f04275eb0ebded867daff0..43bb78122795a9de7df5488886746b1a5f660fe8 100644
--- a/drivers/pci/hotplug/pciehp_hpc.c
+++ b/drivers/pci/hotplug/pciehp_hpc.c
@@ -739,7 +739,7 @@ static irqreturn_t pciehp_ist(int irq, void *dev_id)
 	up_read(&ctrl->reset_lock);
 
 	pci_config_pm_runtime_put(pdev);
-	complete(&ctrl->requester);
+	wake_up(&ctrl->requester);
 	return IRQ_HANDLED;
 }
 
@@ -953,7 +953,7 @@ struct controller *pcie_init(struct pcie_device *dev)
 	ctrl->slot_cap = slot_cap;
 	mutex_init(&ctrl->ctrl_lock);
 	init_rwsem(&ctrl->reset_lock);
-	init_completion(&ctrl->requester);
+	init_waitqueue_head(&ctrl->requester);
 	init_waitqueue_head(&ctrl->queue);
 	dbg_ctrl(ctrl);