PM-Trace: add pm-trace support for suspending phase
Subsystems (5)
PATCH 1/1 PM-Trace: add pm-trace support for suspending phase
Quoted 1 line
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001
From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phase
Occasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make PM_TRACE infrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.
--- arch/x86/include/asm/pm-trace.h | 36 +++++++++++++++++++++++++++++++++++ arch/x86/include/asm/resume-trace.h | 21 -------------------- drivers/base/power/main.c | 20 +++++++++++++++--- drivers/base/power/trace.c | 6 ++-- include/linux/pm-trace.h | 35 ++++++++++++++++++++++++++++++++++ include/linux/resume-trace.h | 34 --------------------------------- kernel/power/main.c | 2 +- 7 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 arch/x86/include/asm/pm-trace.h delete mode 100644 arch/x86/include/asm/resume-trace.h create mode 100644 include/linux/pm-trace.h delete mode 100644 include/linux/resume-trace.h
arch/x86/include/asm/pm-trace.h new file +36 -0
@@ -0,0 +1,36 @@ +#ifndef _ASM_X86_PM_TRACE_H +#define _ASM_X86_PM_TRACE_H + +#include <asm/asm.h> + +#define TRACE_RESUME (user) \ +do { \ + if (pm_trace_enabled) { \ + const void *tracedata; \ + asm volatile(_ASM_MOV " $1f,%0\n" \ + ".section .tracedata,\"a\"\n" \ + "1:\t.word %c1\n\t" \ + _ASM_PTR " %c2\n" \ + ".previous" \ + :"=r" (tracedata) \ + : "i" (__LINE__), "i" (__FILE__)); \ + generate_pm_trace(tracedata, user); \ + } \ +} while (0) + +#define TRACE_SUSPEND (user) \ +do { \ + if (pm_trace_enabled) { \ + const void *tracedata; \ + asm volatile(_ASM_MOV " $1f,%0\n" \ + ".section .tracedata,\"a\"\n" \ + "1:\t.word %c1\n\t" \ + _ASM_PTR " %c2\n" \ + ".previous" \ + :"=r" (tracedata) \ + : "i" (__LINE__), "i" (__FILE__)); \ + generate_pm_trace(tracedata, user); \ + } \ +} while (0) + +#endif /* _ASM_X86_PM_TRACE_H */
arch/x86/include/asm/resume-trace.h deleted +0 -21
@@ -1,21 +0,0 @@ -#ifndef _ASM_X86_RESUME_TRACE_H -#define _ASM_X86_RESUME_TRACE_H - -#include <asm/asm.h> - -#define TRACE_RESUME (user) \ -do { \ - if (pm_trace_enabled) { \ - const void *tracedata; \ - asm volatile(_ASM_MOV " $1f,%0\n" \ - ".section .tracedata,\"a\"\n" \ - "1:\t.word %c1\n\t" \ - _ASM_PTR " %c2\n" \ - ".previous" \ - :"=r" (tracedata) \ - : "i" (__LINE__), "i" (__FILE__)); \ - generate_resume_trace(tracedata, user); \ - } \ -} while (0) - -#endif /* _ASM_X86_RESUME_TRACE_H */
drivers/base/power/main.c +16 -4
@@ -23,7 +23,7 @@#include <linux/mutex.h> #include <linux/pm.h> #include <linux/pm_runtime.h> -#include <linux/resume-trace.h> +#include <linux/pm-trace.h> #include <linux/interrupt.h> #include <linux/sched.h> #include <linux/async.h>
@@ -1017,6 +1017,9 @@ static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool achar *info =NULL ;int error =0 ; +TRACE_DEVICE (dev); +TRACE_SUSPEND (0 ); +if (async_error) goto Complete;
@@ -1057,6 +1060,7 @@ static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool a Complete:complete_all (&dev->power.completion); +TRACE_SUSPEND (error);return error; }
@@ -1078,7 +1082,7 @@ static int device_suspend_noirq(struct device *dev) {reinit_completion (&dev->power.completion); -if (pm_async_enabled && dev->power.async_suspend) { +if (is_async (dev)) {get_device (dev);async_schedule (async_suspend_noirq, dev);return 0 ;
@@ -1157,6 +1161,9 @@ static int __device_suspend_late(struct device *dev, pm_message_t state, bool aschar *info =NULL ;int error =0 ; +TRACE_DEVICE (dev); +TRACE_SUSPEND (0 ); +__pm_runtime_disable (dev, false);if (async_error)
@@ -1198,6 +1205,7 @@ static int __device_suspend_late(struct device *dev, pm_message_t state, bool as async_error = error; Complete: +TRACE_SUSPEND (error);complete_all (&dev->power.completion);return error; }
@@ -1219,7 +1227,7 @@ static int device_suspend_late(struct device *dev) {reinit_completion (&dev->power.completion); -if (pm_async_enabled && dev->power.async_suspend) { +if (is_async (dev)) {get_device (dev);async_schedule (async_suspend_late, dev);return 0 ;
@@ -1338,6 +1346,9 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)int error =0 ;DECLARE_DPM_WATCHDOG_ON_STACK (wd); +TRACE_DEVICE (dev); +TRACE_SUSPEND (0 ); +dpm_wait_for_children (dev, async);if (async_error)
@@ -1444,6 +1455,7 @@ static int __device_suspend(struct device *dev, pm_message_t state, bool async)if (error) async_error = error; +TRACE_SUSPEND (error);return error; }
@@ -1465,7 +1477,7 @@ static int device_suspend(struct device *dev) {reinit_completion (&dev->power.completion); -if (pm_async_enabled && dev->power.async_suspend) { +if (is_async (dev)) {get_device (dev);async_schedule (async_suspend, dev);return 0 ;
drivers/base/power/trace.c +3 -3
@@ -7,7 +7,7 @@* devices may be working. */ -#include <linux/resume-trace.h> +#include <linux/pm-trace.h> #include <linux/export.h> #include <linux/rtc.h>
@@ -154,7 +154,7 @@ EXPORT_SYMBOL(set_trace_device);* it's not any guarantee, but it's a high _likelihood_ that * the match is valid). */ -void generate_resume_trace (const void *tracedata,unsigned int user) +void generate_pm_trace (const void *tracedata,unsigned int user) {unsigned short lineno = *(unsigned short *)tracedata;const char *file = *(const char **)(tracedata +2 );
@@ -164,7 +164,7 @@ void generate_resume_trace(const void *tracedata, unsigned int user) file_hash_value =hash_string (lineno, file,FILEHASH );set_magic_time (user_hash_value, file_hash_value, dev_hash_value); } -EXPORT_SYMBOL (generate_resume_trace); +EXPORT_SYMBOL (generate_pm_trace);extern char __tracedata_start, __tracedata_end;static int show_file_hash (unsigned int value)
include/linux/pm-trace.h new file +35 -0
@@ -0,0 +1,35 @@ +#ifndef PM_TRACE_H +#define PM_TRACE_H + +#ifdef CONFIG_PM_TRACE +#include <asm/pm-trace.h> +#include <linux/types.h> + +extern int pm_trace_enabled; + +static inline int pm_trace_is_enabled (void ) +{ +return pm_trace_enabled; +} + +struct device ; +extern void set_trace_device (struct device *); +extern void generate_pm_trace (const void *tracedata,unsigned int user); +extern int show_trace_dev_match (char *buf,size_t size); + +#define TRACE_DEVICE (dev) do { \ + if (pm_trace_enabled) \ + set_trace_device(dev); \ + } while(0) + +#else + +static inline int pm_trace_is_enabled (void ) {return 0 ; } + +#define TRACE_DEVICE (dev) do { } while (0) +#define TRACE_RESUME (dev) do { } while (0) +#define TRACE_SUSPEND (dev) do { } while (0) + +#endif + +#endif
include/linux/resume-trace.h deleted +0 -34
@@ -1,34 +0,0 @@ -#ifndef RESUME_TRACE_H -#define RESUME_TRACE_H - -#ifdef CONFIG_PM_TRACE -#include <asm/resume-trace.h> -#include <linux/types.h> - -extern int pm_trace_enabled; - -static inline int pm_trace_is_enabled (void ) -{ -return pm_trace_enabled; -} - -struct device ; -extern void set_trace_device (struct device *); -extern void generate_resume_trace (const void *tracedata,unsigned int user); -extern int show_trace_dev_match (char *buf,size_t size); - -#define TRACE_DEVICE (dev) do { \ - if (pm_trace_enabled) \ - set_trace_device(dev); \ - } while(0) - -#else - -static inline int pm_trace_is_enabled (void ) {return 0 ; } - -#define TRACE_DEVICE (dev) do { } while (0) -#define TRACE_RESUME (dev) do { } while (0) - -#endif - -#endif
kernel/power/main.c +1 -1
@@ -11,7 +11,7 @@#include <linux/export.h> #include <linux/kobject.h> #include <linux/string.h> -#include <linux/resume-trace.h> +#include <linux/pm-trace.h> #include <linux/workqueue.h> #include <linux/debugfs.h> #include <linux/seq_file.h>
-- 1.7.1
Quoted 4 lines · Zhonghui
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001
From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phase
Can you please avoid putting the above header lines into your patches?
The only one that may be necessary is the From: line, but that's only needed if you submit from a different address.
Also please don't send To: mailing lists. Use CC instead. In fact, there should be *one* address in the To: field when you're submitting a patch:
The address of the maintainer you want to apply the patch for you.
Quoted 5 lines
Occasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.
Do you have any examples of when this helped and no other debug methods did?
It seems odd to me that no one has ever asked for this for several years and now you need it.
Signature · 2 lines
I speak only for myself. Rafael J. Wysocki, Intel Open Source Technology Center.
Greg Kroah-Hartman
maintainerQuoted 12 lines · Zhonghui
Quoted 1 line
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phaseOccasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.Signed-off-by Zhonghui Fu <[email protected]>
Quoted 13 lines
--- arch/x86/include/asm/pm-trace.h | 36 +++++++++++++++++++++++++++++++++++ arch/x86/include/asm/resume-trace.h | 21 -------------------- drivers/base/power/main.c | 20 +++++++++++++++--- drivers/base/power/trace.c | 6 ++-- include/linux/pm-trace.h | 35 ++++++++++++++++++++++++++++++++++ include/linux/resume-trace.h | 34 --------------------------------- kernel/power/main.c | 2 +- 7 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 arch/x86/include/asm/pm-trace.h delete mode 100644 arch/x86/include/asm/resume-trace.h create mode 100644 include/linux/pm-trace.h delete mode 100644 include/linux/resume-trace.h
Please create patches that move files around with -M so that the rename and changes can be reviewed much easier. As it is, I can't see the changes you have made here.
thanks,
greg k-h
Quoted 5 lines · Rafael J. Wysocki
Quoted 4 lines · Zhonghui
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001
From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phase
Quoted 8 lines
Can you please avoid putting the above header lines into your patches?
The only one that may be necessary is the From: line, but that's only needed if you submit from a different address.
Also please don't send To: mailing lists. Use CC instead. In fact, there should be *one* address in the To: field when you're submitting a patch:
The address of the maintainer you want to apply the patch for you.
Thanks for your guidance, and I will re-send this patch.
Quoted 10 lines
Quoted 6 lines
Occasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.Do you have any examples of when this helped and no other debug methods did?
It seems odd to me that no one has ever asked for this for several years and now you need it.
We ever run into some system hang during suspending some devices on BayTrail-T platform such as DMA, audio, etc. So, extending PM-Trace to suspend phase should be helpful.
Thanks,
Zhonghui
Quoted 2 lines
Quoted 23 lines · Zhonghui
Quoted 5 lines · Rafael J. Wysocki
Quoted 4 lines · Zhonghui
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001
From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phaseQuoted 8 lines
Can you please avoid putting the above header lines into your patches?
The only one that may be necessary is the From: line, but that's only needed if you submit from a different address.
Also please don't send To: mailing lists. Use CC instead. In fact, there should be *one* address in the To: field when you're submitting a patch:
The address of the maintainer you want to apply the patch for you.Thanks for your guidance, and I will re-send this patch.
Quoted 6 lines
Quoted 6 lines
Occasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.
Quoted 7 lines
Quoted 4 lines
Do you have any examples of when this helped and no other debug methods did?
It seems odd to me that no one has ever asked for this for several years and now you need it.
We ever run into some system hang during suspending some devices on BayTrail-T platform such as DMA, audio, etc. So, extending PM-Trace to suspend phase should be helpful.
Well, did you actually use this particular patch for debugging that?
Rafael
Quoted 26 lines · Greg Kroah-Hartman
Quoted 12 lines · Zhonghui
Quoted 1 line
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phaseOccasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.Signed-off-by Zhonghui Fu <[email protected]>Quoted 13 lines
--- arch/x86/include/asm/pm-trace.h | 36 +++++++++++++++++++++++++++++++++++ arch/x86/include/asm/resume-trace.h | 21 -------------------- drivers/base/power/main.c | 20 +++++++++++++++--- drivers/base/power/trace.c | 6 ++-- include/linux/pm-trace.h | 35 ++++++++++++++++++++++++++++++++++ include/linux/resume-trace.h | 34 --------------------------------- kernel/power/main.c | 2 +- 7 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 arch/x86/include/asm/pm-trace.h delete mode 100644 arch/x86/include/asm/resume-trace.h create mode 100644 include/linux/pm-trace.h delete mode 100644 include/linux/resume-trace.h
Quoted 3 lines
Please create patches that move files around with -M so that the rename and changes can be reviewed much easier. As it is, I can't see the changes you have made here.
I have re-sent this patch according to your comments, and the subject is "[PATCH v2] PM-Trace: add pm-trace support for suspending phase".
Thanks,
Zhonghui
Quoted 9 lines
thanks,
greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Quoted 22 lines · Rafael J. Wysocki
Quoted 21 lines · Zhonghui
Quoted 5 lines · Rafael J. Wysocki
Quoted 4 lines · Zhonghui
From
2626594c03ca3b9884dd44073385c36f99a3651dMon Sep 17 00:00:00 2001
From: Zhonghui Fu <[email protected]>
Date: Wed, 11 Feb 2015 16:20:21 +0800
Subject: [PATCH] PM-Trace: add pm-trace support for suspending phaseQuoted 8 lines
Can you please avoid putting the above header lines into your patches?
The only one that may be necessary is the From: line, but that's only needed if you submit from a different address.
Also please don't send To: mailing lists. Use CC instead. In fact, there should be *one* address in the To: field when you're submitting a patch:
The address of the maintainer you want to apply the patch for you.Thanks for your guidance, and I will re-send this patch.
Quoted 5 lines
Quoted 5 lines
Occasionally, the system can't come back up after suspend/resume due to problems of device suspending phase. This patch make
PM_TRACEinfrastructure cover device suspending phase of suspend/resume process, and the information in RTC can tell developers which device suspending function make system hang.
Quoted 8 lines
Quoted 7 lines
Quoted 4 lines
Do you have any examples of when this helped and no other debug methods did?
It seems odd to me that no one has ever asked for this for several years and now you need it.
We ever run into some system hang during suspending some devices on BayTrail-T platform such as DMA, audio, etc. So, extending PM-Trace to suspend phase should be helpful.
Well, did you actually use this particular patch for debugging that?
Yes, I ever used this method to debug suspending process of some devices.
BTW, I have re-sent this patch with -M so that the rename and changes can be reviewed much easier. The subject is "[PATCH v2] PM-Trace: add pm-trace support for suspending phase".
Thanks,
Zhonghui
Quoted 8 lines
Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/