]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.0-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Aug 2012 20:18:25 +0000 (13:18 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Aug 2012 20:18:25 +0000 (13:18 -0700)
added patches:
ftrace-disable-function-tracing-during-suspend-resume-and-hibernation-again.patch

queue-3.0/ftrace-disable-function-tracing-during-suspend-resume-and-hibernation-again.patch [new file with mode: 0644]
queue-3.0/series

diff --git a/queue-3.0/ftrace-disable-function-tracing-during-suspend-resume-and-hibernation-again.patch b/queue-3.0/ftrace-disable-function-tracing-during-suspend-resume-and-hibernation-again.patch
new file mode 100644 (file)
index 0000000..a3c98fa
--- /dev/null
@@ -0,0 +1,108 @@
+From 443772d408a25af62498793f6f805ce3c559309a Mon Sep 17 00:00:00 2001
+From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
+Date: Sat, 16 Jun 2012 15:30:45 +0200
+Subject: ftrace: Disable function tracing during suspend/resume and hibernation, again
+
+From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com>
+
+commit 443772d408a25af62498793f6f805ce3c559309a upstream.
+
+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 commit f42ac38c59e0a03d (ftrace:
+disable tracing for suspend to ram). However, the changes made by that commit
+got reverted by commit cbe2f5a6e84eebb (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>
+
+---
+ kernel/power/hibernate.c |    6 ++++++
+ kernel/power/suspend.c   |    3 +++
+ 2 files changed, 9 insertions(+)
+
+--- a/kernel/power/hibernate.c
++++ b/kernel/power/hibernate.c
+@@ -344,6 +344,7 @@ int hibernation_snapshot(int platform_mo
+               goto Complete_devices;
+       suspend_console();
++      ftrace_stop();
+       pm_restrict_gfp_mask();
+       error = dpm_suspend(PMSG_FREEZE);
+       if (error)
+@@ -369,6 +370,7 @@ int hibernation_snapshot(int platform_mo
+       if (error || !in_suspend)
+               pm_restore_gfp_mask();
++      ftrace_start();
+       resume_console();
+  Complete_devices:
+@@ -471,6 +473,7 @@ int hibernation_restore(int platform_mod
+       pm_prepare_console();
+       suspend_console();
++      ftrace_stop();
+       pm_restrict_gfp_mask();
+       error = dpm_suspend_start(PMSG_QUIESCE);
+       if (!error) {
+@@ -478,6 +481,7 @@ int hibernation_restore(int platform_mod
+               dpm_resume_end(PMSG_RECOVER);
+       }
+       pm_restore_gfp_mask();
++      ftrace_start();
+       resume_console();
+       pm_restore_console();
+       return error;
+@@ -504,6 +508,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)
+@@ -547,6 +552,7 @@ int hibernation_platform_enter(void)
+  Resume_devices:
+       entering_platform_hibernation = false;
+       dpm_resume_end(PMSG_RESTORE);
++      ftrace_start();
+       resume_console();
+  Close:
+--- a/kernel/power/suspend.c
++++ b/kernel/power/suspend.c
+@@ -23,6 +23,7 @@
+ #include <linux/slab.h>
+ #include <linux/suspend.h>
+ #include <linux/syscore_ops.h>
++#include <linux/ftrace.h>
+ #include <trace/events/power.h>
+ #include "power.h"
+@@ -210,6 +211,7 @@ int suspend_devices_and_enter(suspend_st
+                       goto Close;
+       }
+       suspend_console();
++      ftrace_stop();
+       suspend_test_start();
+       error = dpm_suspend_start(PMSG_SUSPEND);
+       if (error) {
+@@ -226,6 +228,7 @@ int suspend_devices_and_enter(suspend_st
+       suspend_test_start();
+       dpm_resume_end(PMSG_RESUME);
+       suspend_test_finish("resume devices");
++      ftrace_start();
+       resume_console();
+  Close:
+       if (suspend_ops->end)
index f90dd3c392d9c1ffe3b9d4b26ba33b3b2b402d05..15ff44961b5ef1cd6e5e5bbe82b01d3346d8c793 100644 (file)
@@ -12,3 +12,4 @@ alsa-hda-add-support-for-realtek-alc282.patch
 usbdevfs-correct-amount-of-data-copied-to-user-in-processcompl_compat.patch
 usb-gadget-fix-g_ether-interface-link-status.patch
 locks-fix-checking-of-fcntl_setlease-argument.patch
+ftrace-disable-function-tracing-during-suspend-resume-and-hibernation-again.patch