mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-04 10:12:16 +09:00
ftrace: Disable function tracing during suspend/resume and hibernation, again
commit443772d408upstream. If function tracing is enabled for some of the low-level suspend/resume functions, it leads to triple fault during resume from suspend, ultimately ending up in a reboot instead of a resume (or a total refusal to come out of suspended state, on some machines). This issue was explained in more detail in commitf42ac38c59(ftrace: disable tracing for suspend to ram). However, the changes made by that commit got reverted by commitcbe2f5a6e8(tracing: allow tracing of suspend/resume & hibernation code again). So, unfortunately since things are not yet robust enough to allow tracing of low-level suspend/resume functions, suspend/resume is still broken when ftrace is enabled. So fix this by disabling function tracing during suspend/resume & hibernation. Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
db7711b459
commit
8d0c5f5b12
@@ -353,6 +353,7 @@ int hibernation_snapshot(int platform_mode)
|
||||
}
|
||||
|
||||
suspend_console();
|
||||
ftrace_stop();
|
||||
pm_restrict_gfp_mask();
|
||||
|
||||
error = dpm_suspend(PMSG_FREEZE);
|
||||
@@ -378,6 +379,7 @@ int hibernation_snapshot(int platform_mode)
|
||||
if (error || !in_suspend)
|
||||
pm_restore_gfp_mask();
|
||||
|
||||
ftrace_start();
|
||||
resume_console();
|
||||
dpm_complete(msg);
|
||||
|
||||
@@ -480,6 +482,7 @@ int hibernation_restore(int platform_mode)
|
||||
|
||||
pm_prepare_console();
|
||||
suspend_console();
|
||||
ftrace_stop();
|
||||
pm_restrict_gfp_mask();
|
||||
error = dpm_suspend_start(PMSG_QUIESCE);
|
||||
if (!error) {
|
||||
@@ -487,6 +490,7 @@ int hibernation_restore(int platform_mode)
|
||||
dpm_resume_end(PMSG_RECOVER);
|
||||
}
|
||||
pm_restore_gfp_mask();
|
||||
ftrace_start();
|
||||
resume_console();
|
||||
pm_restore_console();
|
||||
return error;
|
||||
@@ -513,6 +517,7 @@ int hibernation_platform_enter(void)
|
||||
|
||||
entering_platform_hibernation = true;
|
||||
suspend_console();
|
||||
ftrace_stop();
|
||||
error = dpm_suspend_start(PMSG_HIBERNATE);
|
||||
if (error) {
|
||||
if (hibernation_ops->recover)
|
||||
@@ -556,6 +561,7 @@ int hibernation_platform_enter(void)
|
||||
Resume_devices:
|
||||
entering_platform_hibernation = false;
|
||||
dpm_resume_end(PMSG_RESTORE);
|
||||
ftrace_start();
|
||||
resume_console();
|
||||
|
||||
Close:
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/export.h>
|
||||
#include <linux/suspend.h>
|
||||
#include <linux/syscore_ops.h>
|
||||
#include <linux/ftrace.h>
|
||||
#include <trace/events/power.h>
|
||||
|
||||
#include "power.h"
|
||||
@@ -212,6 +213,7 @@ int suspend_devices_and_enter(suspend_state_t state)
|
||||
goto Close;
|
||||
}
|
||||
suspend_console();
|
||||
ftrace_stop();
|
||||
suspend_test_start();
|
||||
error = dpm_suspend_start(PMSG_SUSPEND);
|
||||
if (error) {
|
||||
@@ -231,6 +233,7 @@ int suspend_devices_and_enter(suspend_state_t state)
|
||||
suspend_test_start();
|
||||
dpm_resume_end(PMSG_RESUME);
|
||||
suspend_test_finish("resume devices");
|
||||
ftrace_start();
|
||||
resume_console();
|
||||
Close:
|
||||
if (suspend_ops->end)
|
||||
|
||||
Reference in New Issue
Block a user