Linux Power Management development
 help / color / mirror / Atom feed
* [PATCH] PM: Fix crash on graph trace through x86 suspend
@ 2016-03-03  0:05 Todd Brandt
  2016-03-03  0:19 ` Rafael J. Wysocki
  0 siblings, 1 reply; 7+ messages in thread
From: Todd Brandt @ 2016-03-03  0:05 UTC (permalink / raw)
  To: linux-pm, rafael.j.wysocki; +Cc: rjw, todd.e.brandt, todd.e.brandt

Pause/unpause graph tracing around do_suspend_lowlevel as it has
inconsistent call/return info after it jumps to the wakeup vector.
The graph trace buffer will otherwise become misaligned and
may eventually crash and hang on suspend.

To reproduce the issue and test the fix:
Run a function_graph trace over suspend/resume and set the graph 
function to suspend_devices_and_enter. This consistently hangs the
system without this fix.

Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
---
 arch/x86/kernel/acpi/sleep.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
index d1daead..311360e 100644
--- a/arch/x86/kernel/acpi/sleep.c
+++ b/arch/x86/kernel/acpi/sleep.c
@@ -16,6 +16,7 @@
 #include <asm/cacheflush.h>
 #include <asm/realmode.h>
 
+#include <linux/ftrace.h>
 #include "../../realmode/rm/wakeup.h"
 #include "sleep.h"
 
@@ -107,7 +108,13 @@ int x86_acpi_suspend_lowlevel(void)
        saved_magic = 0x123456789abcdef0L;
 #endif /* CONFIG_64BIT */
 
+	/*
+	 * Pause/unpause graph tracing around do_suspend_lowlevel as it has
+	 * inconsistent call/return info after it jumps to the wakeup vector
+	 */
+	pause_graph_tracing();
 	do_suspend_lowlevel();
+	unpause_graph_tracing();
 	return 0;
 }
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-03-03  2:16 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-03-03  0:05 [PATCH] PM: Fix crash on graph trace through x86 suspend Todd Brandt
2016-03-03  0:19 ` Rafael J. Wysocki
2016-03-03  0:43   ` Todd Brandt
2016-03-03  1:34     ` Rafael J. Wysocki
2016-03-03  1:36       ` Rafael J. Wysocki
2016-03-03  2:07         ` Steven Rostedt
2016-03-03  2:16           ` Rafael J. Wysocki

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox