diff --git a/block/genhd.c b/block/genhd.c
index 6cace66..b0092bb 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -18,6 +18,7 @@
 #include <linux/mutex.h>
 #include <linux/idr.h>
 #include <linux/log2.h>
+#include <linux/pm_qos.h>
 
 #include "blk.h"
 
@@ -1595,9 +1596,14 @@ static void disk_events_workfn(struct work_struct *work)
 	unsigned int events;
 	unsigned long intv;
 	int nr_events = 0, i;
+	enum pm_qos_flags_status stat;
 
 	/* check events */
-	events = disk->fops->check_events(disk, clearing);
+	stat = dev_pm_qos_flags(disk->driverfs_dev, PM_QOS_FLAG_NO_POLL);
+	if (stat == PM_QOS_FLAGS_ALL)
+		events = 0;
+	else
+		events = disk->fops->check_events(disk, clearing);
 
 	/* accumulate pending events and schedule next poll if necessary */
 	spin_lock_irq(&ev->lock);
diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h
index 5a95013..318a422 100644
--- a/include/linux/pm_qos.h
+++ b/include/linux/pm_qos.h
@@ -36,6 +36,7 @@ enum pm_qos_flags_status {
 
 #define PM_QOS_FLAG_NO_POWER_OFF	(1 << 0)
 #define PM_QOS_FLAG_REMOTE_WAKEUP	(1 << 1)
+#define PM_QOS_FLAG_NO_POLL		(1 << 3)
 
 struct pm_qos_request {
 	struct plist_node node;
