PM / sleep: Print active wakeup sources when blocking on wakeup_count reads
authorxing wei <xing.wei@intel.com>
Wed, 7 Dec 2016 11:31:16 +0000 (19:31 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 8 Dec 2016 00:26:23 +0000 (01:26 +0100)
If there are any wakeup events being processed, read operation
on /sys/power/wakeup_count will be blocked, so print the names
of all active wakeup sources to help to find out who is preventing
system suspend from triggering.

While at it change pr_info() in pm_print_active_wakeup_sources()
to pr_debug() to avoid excessive log noise.

Signed-off-by: xing wei <xing.wei@intel.com>
[ rjw: Subject & changelog ]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/base/power/wakeup.c

index 62e4de2aa8d159222bbfce1b7c498a311eace2cb..bf9ba26981a5590f97c6cf029bbf0ccb1fe31aa8 100644 (file)
@@ -811,7 +811,7 @@ void pm_print_active_wakeup_sources(void)
        rcu_read_lock();
        list_for_each_entry_rcu(ws, &wakeup_sources, entry) {
                if (ws->active) {
-                       pr_info("active wakeup source: %s\n", ws->name);
+                       pr_debug("active wakeup source: %s\n", ws->name);
                        active = 1;
                } else if (!active &&
                           (!last_activity_ws ||
@@ -822,7 +822,7 @@ void pm_print_active_wakeup_sources(void)
        }
 
        if (!active && last_activity_ws)
-               pr_info("last active wakeup source: %s\n",
+               pr_debug("last active wakeup source: %s\n",
                        last_activity_ws->name);
        rcu_read_unlock();
 }
@@ -905,7 +905,7 @@ bool pm_get_wakeup_count(unsigned int *count, bool block)
                        split_counters(&cnt, &inpr);
                        if (inpr == 0 || signal_pending(current))
                                break;
-
+                       pm_print_active_wakeup_sources();
                        schedule();
                }
                finish_wait(&wakeup_count_wait_queue, &wait);