@@ -197,12 +197,6 @@ struct platform_s2idle_ops {
void (*end)(void);
};
-#if defined(CONFIG_SUSPEND) || defined(CONFIG_HIBERNATION)
-extern bool pm_in_action;
-#else
-# define pm_in_action false
-#endif
-
#ifdef CONFIG_SUSPEND
extern suspend_state_t mem_sleep_current;
extern suspend_state_t mem_sleep_default;
@@ -689,10 +689,6 @@ static int load_image_and_restore(void)
return error;
}
-#ifndef CONFIG_SUSPEND
-bool pm_in_action;
-#endif
-
/**
* hibernate - Carry out system hibernation, including saving the image.
*/
@@ -706,8 +702,6 @@ int hibernate(void)
return -EPERM;
}
- pm_in_action = true;
-
lock_system_sleep();
/* The snapshot device should not be opened while we're running */
if (!atomic_add_unless(&snapshot_device_available, -1, 0)) {
@@ -784,7 +778,6 @@ int hibernate(void)
atomic_inc(&snapshot_device_available);
Unlock:
unlock_system_sleep();
- pm_in_action = false;
pr_info("hibernation exit\n");
return error;
@@ -595,8 +595,6 @@ static int enter_state(suspend_state_t state)
return error;
}
-bool pm_in_action;
-
/**
* pm_suspend - Externally visible function for suspending the system.
* @state: System sleep state to enter.
@@ -611,7 +609,6 @@ int pm_suspend(suspend_state_t state)
if (state <= PM_SUSPEND_ON || state >= PM_SUSPEND_MAX)
return -EINVAL;
- pm_in_action = true;
pr_info("suspend entry (%s)\n", mem_sleep_labels[state]);
error = enter_state(state);
if (error) {
@@ -621,7 +618,6 @@ int pm_suspend(suspend_state_t state)
suspend_stats.success++;
}
pr_info("suspend exit\n");
- pm_in_action = false;
return error;
}
EXPORT_SYMBOL(pm_suspend);
@@ -35,7 +35,6 @@ EXPORT_SYMBOL(swake_up_locked);
void swake_up_all_locked(struct swait_queue_head *q)
{
struct swait_queue *curr;
- int wakes = 0;
while (!list_empty(&q->task_list)) {
@@ -43,11 +42,7 @@ void swake_up_all_locked(struct swait_queue_head *q)
task_list);
wake_up_process(curr->task);
list_del_init(&curr->task_list);
- wakes++;
}
- if (pm_in_action)
- return;
- WARN(wakes > 2, "complete_all() with %d waiters\n", wakes);
}
EXPORT_SYMBOL(swake_up_all_locked);
The warning was introduced to find callers of complete_all() having multiple waiters enqueued. As completa_all() wakes all waiters with disabled interrupts it may lead visibile latency spikes with a larger amount of waiters. Since the warning was introduced, most of the feedback was in the "setup/configure" phase which is nothing that would disturb the RT workload because it is not yet active. There were reports regarding the crypto code which may wake multiple waiters if all of them request an algorithm which requires a module to be loaded first. If this really become a problem during runtime it should be investigated then. Remove the warning if more than two waiters are worken up via the complete_all() interface. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> --- include/linux/suspend.h | 6 ------ kernel/power/hibernate.c | 7 ------- kernel/power/suspend.c | 4 ---- kernel/sched/swait.c | 5 ----- 4 files changed, 22 deletions(-)