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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  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
  0 siblings, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2016-03-03  0:19 UTC (permalink / raw)
  To: Todd Brandt
  Cc: linux-pm@vger.kernel.org, Rafael Wysocki, Rafael J. Wysocki,
	todd.e.brandt

On Thu, Mar 3, 2016 at 1:05 AM, Todd Brandt
<todd.e.brandt@linux.intel.com> wrote:
> 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>

OK

I guess we'll need that in -stable, right?

> ---
>  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
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  2016-03-03  0:19 ` Rafael J. Wysocki
@ 2016-03-03  0:43   ` Todd Brandt
  2016-03-03  1:34     ` Rafael J. Wysocki
  0 siblings, 1 reply; 7+ messages in thread
From: Todd Brandt @ 2016-03-03  0:43 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: linux-pm@vger.kernel.org, Rafael Wysocki, Rafael J. Wysocki,
	todd.e.brandt

On Thu, 2016-03-03 at 01:19 +0100, Rafael J. Wysocki wrote:
> On Thu, Mar 3, 2016 at 1:05 AM, Todd Brandt
> <todd.e.brandt@linux.intel.com> wrote:
> > 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>
> 
> OK
> 
> I guess we'll need that in -stable, right?

Sure, it's pretty important. The new analyze_suspend features are going
to rely pretty heavily on full graph trace of suspend (all we can do is
standby and freeze now because of the bug). Thanks!

> 
> > ---
> >  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
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  2016-03-03  0:43   ` Todd Brandt
@ 2016-03-03  1:34     ` Rafael J. Wysocki
  2016-03-03  1:36       ` Rafael J. Wysocki
  0 siblings, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2016-03-03  1:34 UTC (permalink / raw)
  To: Todd Brandt
  Cc: linux-pm@vger.kernel.org, Rafael Wysocki, todd.e.brandt,
	Linux Kernel Mailing List, x86, Steven Rostedt,
	ACPI Devel Maling List

On Thu, Mar 3, 2016 at 1:43 AM, Todd Brandt
<todd.e.brandt@linux.intel.com> wrote:
> On Thu, 2016-03-03 at 01:19 +0100, Rafael J. Wysocki wrote:
>> On Thu, Mar 3, 2016 at 1:05 AM, Todd Brandt
>> <todd.e.brandt@linux.intel.com> wrote:
>> > 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>
>>
>> OK
>>
>> I guess we'll need that in -stable, right?
>
> Sure, it's pretty important. The new analyze_suspend features are going
> to rely pretty heavily on full graph trace of suspend (all we can do is
> standby and freeze now because of the bug). Thanks!

OK, applied, but let Steven and the x86 folks see it.

>>
>> > ---
>> >  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
>> >
>> > --


Thanks,
Rafael

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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  2016-03-03  1:34     ` Rafael J. Wysocki
@ 2016-03-03  1:36       ` Rafael J. Wysocki
  2016-03-03  2:07         ` Steven Rostedt
  0 siblings, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2016-03-03  1:36 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Todd Brandt, linux-pm@vger.kernel.org, Rafael Wysocki,
	todd.e.brandt, Linux Kernel Mailing List, x86,
	ACPI Devel Maling List, Steven Rostedt

Well, fix up the Steven's address.

On Thu, Mar 3, 2016 at 2:34 AM, Rafael J. Wysocki <rafael@kernel.org> wrote:
> On Thu, Mar 3, 2016 at 1:43 AM, Todd Brandt
> <todd.e.brandt@linux.intel.com> wrote:
>> On Thu, 2016-03-03 at 01:19 +0100, Rafael J. Wysocki wrote:
>>> On Thu, Mar 3, 2016 at 1:05 AM, Todd Brandt
>>> <todd.e.brandt@linux.intel.com> wrote:
>>> > 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>
>>>
>>> OK
>>>
>>> I guess we'll need that in -stable, right?
>>
>> Sure, it's pretty important. The new analyze_suspend features are going
>> to rely pretty heavily on full graph trace of suspend (all we can do is
>> standby and freeze now because of the bug). Thanks!
>
> OK, applied, but let Steven and the x86 folks see it.
>
>>>
>>> > ---
>>> >  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
>>> >
>>> > --
>
>
> Thanks,
> Rafael

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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  2016-03-03  1:36       ` Rafael J. Wysocki
@ 2016-03-03  2:07         ` Steven Rostedt
  2016-03-03  2:16           ` Rafael J. Wysocki
  0 siblings, 1 reply; 7+ messages in thread
From: Steven Rostedt @ 2016-03-03  2:07 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Todd Brandt, linux-pm@vger.kernel.org, Rafael Wysocki,
	todd.e.brandt, Linux Kernel Mailing List, x86,
	ACPI Devel Maling List

On Thu, 3 Mar 2016 02:36:26 +0100
"Rafael J. Wysocki" <rafael@kernel.org> wrote:

> > OK, applied, but let Steven and the x86 folks see it.

The below patch looks fine to me. Anything else I should look at?

-- Steve

> >  
> >>>  
> >>> > ---
> >>> >  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
> >>> >
> >>> > --  
> >
> >
> > Thanks,
> > Rafael  

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

* Re: [PATCH] PM: Fix crash on graph trace through x86 suspend
  2016-03-03  2:07         ` Steven Rostedt
@ 2016-03-03  2:16           ` Rafael J. Wysocki
  0 siblings, 0 replies; 7+ messages in thread
From: Rafael J. Wysocki @ 2016-03-03  2:16 UTC (permalink / raw)
  To: Steven Rostedt
  Cc: Rafael J. Wysocki, Todd Brandt, linux-pm@vger.kernel.org,
	Rafael Wysocki, todd.e.brandt, Linux Kernel Mailing List, x86,
	ACPI Devel Maling List

On Thu, Mar 3, 2016 at 3:07 AM, Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 3 Mar 2016 02:36:26 +0100
> "Rafael J. Wysocki" <rafael@kernel.org> wrote:
>
>> > OK, applied, but let Steven and the x86 folks see it.
>
> The below patch looks fine to me. Anything else I should look at?

No, that was it, thanks!

^ permalink raw reply	[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