LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
* [Patch] Extend support for PM_TRACE to include x86_64
@ 2007-01-15 11:04 Nigel Cunningham
  2007-01-15 15:04 ` Rafael J. Wysocki
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Nigel Cunningham @ 2007-01-15 11:04 UTC (permalink / raw)
  To: LKML

Hi.

This patch adds support for PM_TRACE for the x86_64 architecture. Thanks
to Linus for help with my asm ignorance.

Please apply.

Signed-off-by: Nigel Cunningham <nigel@nigel.suspend2.net>


 arch/x86_64/kernel/vmlinux.lds.S  |    7 +++++++
 drivers/base/power/trace.c        |    4 +++-
 include/asm-i386/resume-trace.h   |   21 +++++++++++++++++++++
 include/asm-x86_64/resume-trace.h |   21 +++++++++++++++++++++
 include/linux/resume-trace.h      |   19 ++-----------------
 kernel/power/Kconfig              |    2 +-
 scripts/kconfig/mconf             |binary
 7 files changed, 55 insertions(+), 19 deletions(-)
diff -ruNp 930-PM_TRACE.patch-old/arch/x86_64/kernel/vmlinux.lds.S 930-PM_TRACE.patch-new/arch/x86_64/kernel/vmlinux.lds.S
--- 930-PM_TRACE.patch-old/arch/x86_64/kernel/vmlinux.lds.S	2007-01-15 22:00:39.000000000 +1100
+++ 930-PM_TRACE.patch-new/arch/x86_64/kernel/vmlinux.lds.S	2007-01-15 00:00:08.000000000 +1100
@@ -54,6 +54,13 @@ SECTIONS
 
   BUG_TABLE
 
+  . = ALIGN(4);
+  .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {
+  	__tracedata_start = .;
+	*(.tracedata)
+  	__tracedata_end = .;
+  }
+
   . = ALIGN(PAGE_SIZE);        /* Align data segment to page size boundary */
 				/* Data */
   .data : AT(ADDR(.data) - LOAD_OFFSET) {
diff -ruNp 930-PM_TRACE.patch-old/drivers/base/power/trace.c 930-PM_TRACE.patch-new/drivers/base/power/trace.c
--- 930-PM_TRACE.patch-old/drivers/base/power/trace.c	2007-01-11 18:25:02.000000000 +1100
+++ 930-PM_TRACE.patch-new/drivers/base/power/trace.c	2007-01-15 00:00:08.000000000 +1100
@@ -142,6 +142,7 @@ void set_trace_device(struct device *dev
 {
 	dev_hash_value = hash_string(DEVSEED, dev->bus_id, DEVHASH);
 }
+EXPORT_SYMBOL(set_trace_device);
 
 /*
  * We could just take the "tracedata" index into the .tracedata
@@ -162,6 +163,7 @@ void generate_resume_trace(void *traceda
 	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);
 
 extern char __tracedata_start, __tracedata_end;
 static int show_file_hash(unsigned int value)
@@ -170,7 +172,7 @@ static int show_file_hash(unsigned int v
 	char *tracedata;
 
 	match = 0;
-	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ; tracedata += 6) {
+	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ; tracedata += 2 + sizeof(unsigned long)) {
 		unsigned short lineno = *(unsigned short *)tracedata;
 		const char *file = *(const char **)(tracedata + 2);
 		unsigned int hash = hash_string(lineno, file, FILEHASH);
diff -ruNp 930-PM_TRACE.patch-old/include/asm-i386/resume-trace.h 930-PM_TRACE.patch-new/include/asm-i386/resume-trace.h
--- 930-PM_TRACE.patch-old/include/asm-i386/resume-trace.h	1970-01-01 10:00:00.000000000 +1000
+++ 930-PM_TRACE.patch-new/include/asm-i386/resume-trace.h	2007-01-15 22:00:33.000000000 +1100
@@ -0,0 +1,21 @@
+#ifndef ARCH_RESUME_TRACE_H
+#define ARCH_RESUME_TRACE_H
+
+#ifdef CONFIG_PM_TRACE
+#define TRACE_RESUME(user) do {					\
+	if (pm_trace_enabled) {					\
+		void *tracedata;				\
+		asm volatile("movl $1f,%0\n"			\
+			".section .tracedata,\"a\"\n"		\
+			"1:\t.word %c1\n"			\
+			"\t.long %c2\n"				\
+			".previous"				\
+			:"=r" (tracedata)			\
+			: "i" (__LINE__), "i" (__FILE__));	\
+		generate_resume_trace(tracedata, user);		\
+	}							\
+} while (0)
+#else
+#define TRACE_RESUME(user) do { } while (0)
+#endif
+#endif
diff -ruNp 930-PM_TRACE.patch-old/include/asm-x86_64/resume-trace.h 930-PM_TRACE.patch-new/include/asm-x86_64/resume-trace.h
--- 930-PM_TRACE.patch-old/include/asm-x86_64/resume-trace.h	1970-01-01 10:00:00.000000000 +1000
+++ 930-PM_TRACE.patch-new/include/asm-x86_64/resume-trace.h	2007-01-15 22:00:45.000000000 +1100
@@ -0,0 +1,21 @@
+#ifndef ARCH_RESUME_TRACE_H
+#define ARCH_RESUME_TRACE_H
+
+#ifdef CONFIG_PM_TRACE
+#define TRACE_RESUME(user) do {					\
+	if (pm_trace_enabled) {					\
+		void *tracedata;				\
+		asm volatile("movq $1f,%0\n"			\
+			".section .tracedata,\"a\"\n"		\
+			"1:\t.word %c1\n"			\
+			"\t.quad %c2\n"				\
+			".previous"				\
+			:"=r" (tracedata)			\
+			: "i" (__LINE__), "i" (__FILE__));	\
+		generate_resume_trace(tracedata, user);		\
+	}							\
+} while (0)
+#else
+#define TRACE_RESUME(user) do { } while (0)
+#endif
+#endif
diff -ruNp 930-PM_TRACE.patch-old/include/linux/resume-trace.h 930-PM_TRACE.patch-new/include/linux/resume-trace.h
--- 930-PM_TRACE.patch-old/include/linux/resume-trace.h	2007-01-11 18:25:16.000000000 +1100
+++ 930-PM_TRACE.patch-new/include/linux/resume-trace.h	2007-01-15 00:00:08.000000000 +1100
@@ -1,6 +1,8 @@
 #ifndef RESUME_TRACE_H
 #define RESUME_TRACE_H
 
+#include <asm/resume-trace.h>
+
 #ifdef CONFIG_PM_TRACE
 
 extern int pm_trace_enabled;
@@ -10,25 +12,8 @@ extern void set_trace_device(struct devi
 extern void generate_resume_trace(void *tracedata, unsigned int user);
 
 #define TRACE_DEVICE(dev) set_trace_device(dev)
-#define TRACE_RESUME(user) do {					\
-	if (pm_trace_enabled) {					\
-		void *tracedata;				\
-		asm volatile("movl $1f,%0\n"			\
-			".section .tracedata,\"a\"\n"		\
-			"1:\t.word %c1\n"			\
-			"\t.long %c2\n"				\
-			".previous"				\
-			:"=r" (tracedata)			\
-			: "i" (__LINE__), "i" (__FILE__));	\
-		generate_resume_trace(tracedata, user);		\
-	}							\
-} while (0)
-
 #else
-
 #define TRACE_DEVICE(dev) do { } while (0)
-#define TRACE_RESUME(dev) do { } while (0)
-
 #endif
 
 #endif
diff -ruNp 930-PM_TRACE.patch-old/kernel/power/Kconfig 930-PM_TRACE.patch-new/kernel/power/Kconfig
--- 930-PM_TRACE.patch-old/kernel/power/Kconfig	2007-01-15 22:00:40.000000000 +1100
+++ 930-PM_TRACE.patch-new/kernel/power/Kconfig	2007-01-15 00:00:08.000000000 +1100
@@ -50,7 +50,7 @@ config DISABLE_CONSOLE_SUSPEND
 
 config PM_TRACE
 	bool "Suspend/resume event tracing"
-	depends on PM && PM_DEBUG && X86_32 && EXPERIMENTAL
+	depends on PM && PM_DEBUG && (X86_32 || X86_64) && EXPERIMENTAL
 	default n
 	---help---
 	This enables some cheesy code to save the last PM event point in the



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

* Re: [Patch] Extend support for PM_TRACE to include x86_64
  2007-01-15 11:04 [Patch] Extend support for PM_TRACE to include x86_64 Nigel Cunningham
@ 2007-01-15 15:04 ` Rafael J. Wysocki
  2007-01-15 17:39 ` Randy Dunlap
  2007-01-18 16:54 ` Pavel Machek
  2 siblings, 0 replies; 4+ messages in thread
From: Rafael J. Wysocki @ 2007-01-15 15:04 UTC (permalink / raw)
  To: nigel; +Cc: LKML

Hi,

On Monday, 15 January 2007 12:04, Nigel Cunningham wrote:
> Hi.
> 
> This patch adds support for PM_TRACE for the x86_64 architecture. Thanks
> to Linus for help with my asm ignorance.

It has been for quite some time on my todo list.  Thanks for doing it.

Greetings,
Rafael


-- 
If you don't have the time to read,
you don't have the time or the tools to write.
		- Stephen King

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

* Re: [Patch] Extend support for PM_TRACE to include x86_64
  2007-01-15 11:04 [Patch] Extend support for PM_TRACE to include x86_64 Nigel Cunningham
  2007-01-15 15:04 ` Rafael J. Wysocki
@ 2007-01-15 17:39 ` Randy Dunlap
  2007-01-18 16:54 ` Pavel Machek
  2 siblings, 0 replies; 4+ messages in thread
From: Randy Dunlap @ 2007-01-15 17:39 UTC (permalink / raw)
  To: nigel; +Cc: LKML

On Mon, 15 Jan 2007 22:04:58 +1100 Nigel Cunningham wrote:

> Hi.
> 
> This patch adds support for PM_TRACE for the x86_64 architecture. Thanks
> to Linus for help with my asm ignorance.
> 
> Please apply.
> 
> Signed-off-by: Nigel Cunningham <nigel@nigel.suspend2.net>

Goody.  Thanks.

>  arch/x86_64/kernel/vmlinux.lds.S  |    7 +++++++
>  drivers/base/power/trace.c        |    4 +++-
>  include/asm-i386/resume-trace.h   |   21 +++++++++++++++++++++
>  include/asm-x86_64/resume-trace.h |   21 +++++++++++++++++++++
>  include/linux/resume-trace.h      |   19 ++-----------------
>  kernel/power/Kconfig              |    2 +-
>  scripts/kconfig/mconf             |binary

Hm, looks like several scripts/kconfig/* binary files need to be
added to dontdiff.

>  7 files changed, 55 insertions(+), 19 deletions(-)

> diff -ruNp 930-PM_TRACE.patch-old/kernel/power/Kconfig 930-PM_TRACE.patch-new/kernel/power/Kconfig
> --- 930-PM_TRACE.patch-old/kernel/power/Kconfig	2007-01-15 22:00:40.000000000 +1100
> +++ 930-PM_TRACE.patch-new/kernel/power/Kconfig	2007-01-15 00:00:08.000000000 +1100
> @@ -50,7 +50,7 @@ config DISABLE_CONSOLE_SUSPEND
>  
>  config PM_TRACE
>  	bool "Suspend/resume event tracing"
> -	depends on PM && PM_DEBUG && X86_32 && EXPERIMENTAL
> +	depends on PM && PM_DEBUG && (X86_32 || X86_64) && EXPERIMENTAL

That's just
	depends on PM && PM_DEBUG && X86 && EXPERIMENTAL

or maybe even:
	depends on PM_DEBUG && X86 && EXPERIMENTAL

since PM_DEBUG depends on PM.
Anyway, X86 means X86_32 or X86_64.

>  	default n
>  	---help---
>  	This enables some cheesy code to save the last PM event point in the


---
~Randy

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

* Re: [Patch] Extend support for PM_TRACE to include x86_64
  2007-01-15 11:04 [Patch] Extend support for PM_TRACE to include x86_64 Nigel Cunningham
  2007-01-15 15:04 ` Rafael J. Wysocki
  2007-01-15 17:39 ` Randy Dunlap
@ 2007-01-18 16:54 ` Pavel Machek
  2 siblings, 0 replies; 4+ messages in thread
From: Pavel Machek @ 2007-01-18 16:54 UTC (permalink / raw)
  To: Nigel Cunningham; +Cc: LKML, Andrew Morton

Hi!

> This patch adds support for PM_TRACE for the x86_64 architecture. Thanks
> to Linus for help with my asm ignorance.
> 
> Please apply.
> 
> Signed-off-by: Nigel Cunningham <nigel@nigel.suspend2.net>

Ack, looks nice to me. i386 code does not belong to generic headers,
anyway...

							Pavel

>  arch/x86_64/kernel/vmlinux.lds.S  |    7 +++++++
>  drivers/base/power/trace.c        |    4 +++-
>  include/asm-i386/resume-trace.h   |   21 +++++++++++++++++++++
>  include/asm-x86_64/resume-trace.h |   21 +++++++++++++++++++++
>  include/linux/resume-trace.h      |   19 ++-----------------
>  kernel/power/Kconfig              |    2 +-
>  scripts/kconfig/mconf             |binary
>  7 files changed, 55 insertions(+), 19 deletions(-)
> diff -ruNp 930-PM_TRACE.patch-old/arch/x86_64/kernel/vmlinux.lds.S 930-PM_TRACE.patch-new/arch/x86_64/kernel/vmlinux.lds.S
> --- 930-PM_TRACE.patch-old/arch/x86_64/kernel/vmlinux.lds.S	2007-01-15 22:00:39.000000000 +1100
> +++ 930-PM_TRACE.patch-new/arch/x86_64/kernel/vmlinux.lds.S	2007-01-15 00:00:08.000000000 +1100
> @@ -54,6 +54,13 @@ SECTIONS
>  
>    BUG_TABLE
>  
> +  . = ALIGN(4);
> +  .tracedata : AT(ADDR(.tracedata) - LOAD_OFFSET) {
> +  	__tracedata_start = .;
> +	*(.tracedata)
> +  	__tracedata_end = .;
> +  }
> +
>    . = ALIGN(PAGE_SIZE);        /* Align data segment to page size boundary */
>  				/* Data */
>    .data : AT(ADDR(.data) - LOAD_OFFSET) {
> diff -ruNp 930-PM_TRACE.patch-old/drivers/base/power/trace.c 930-PM_TRACE.patch-new/drivers/base/power/trace.c
> --- 930-PM_TRACE.patch-old/drivers/base/power/trace.c	2007-01-11 18:25:02.000000000 +1100
> +++ 930-PM_TRACE.patch-new/drivers/base/power/trace.c	2007-01-15 00:00:08.000000000 +1100
> @@ -142,6 +142,7 @@ void set_trace_device(struct device *dev
>  {
>  	dev_hash_value = hash_string(DEVSEED, dev->bus_id, DEVHASH);
>  }
> +EXPORT_SYMBOL(set_trace_device);
>  
>  /*
>   * We could just take the "tracedata" index into the .tracedata
> @@ -162,6 +163,7 @@ void generate_resume_trace(void *traceda
>  	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);
>  
>  extern char __tracedata_start, __tracedata_end;
>  static int show_file_hash(unsigned int value)
> @@ -170,7 +172,7 @@ static int show_file_hash(unsigned int v
>  	char *tracedata;
>  
>  	match = 0;
> -	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ; tracedata += 6) {
> +	for (tracedata = &__tracedata_start ; tracedata < &__tracedata_end ; tracedata += 2 + sizeof(unsigned long)) {
>  		unsigned short lineno = *(unsigned short *)tracedata;
>  		const char *file = *(const char **)(tracedata + 2);
>  		unsigned int hash = hash_string(lineno, file, FILEHASH);
> diff -ruNp 930-PM_TRACE.patch-old/include/asm-i386/resume-trace.h 930-PM_TRACE.patch-new/include/asm-i386/resume-trace.h
> --- 930-PM_TRACE.patch-old/include/asm-i386/resume-trace.h	1970-01-01 10:00:00.000000000 +1000
> +++ 930-PM_TRACE.patch-new/include/asm-i386/resume-trace.h	2007-01-15 22:00:33.000000000 +1100
> @@ -0,0 +1,21 @@
> +#ifndef ARCH_RESUME_TRACE_H
> +#define ARCH_RESUME_TRACE_H
> +
> +#ifdef CONFIG_PM_TRACE
> +#define TRACE_RESUME(user) do {					\
> +	if (pm_trace_enabled) {					\
> +		void *tracedata;				\
> +		asm volatile("movl $1f,%0\n"			\
> +			".section .tracedata,\"a\"\n"		\
> +			"1:\t.word %c1\n"			\
> +			"\t.long %c2\n"				\
> +			".previous"				\
> +			:"=r" (tracedata)			\
> +			: "i" (__LINE__), "i" (__FILE__));	\
> +		generate_resume_trace(tracedata, user);		\
> +	}							\
> +} while (0)
> +#else
> +#define TRACE_RESUME(user) do { } while (0)
> +#endif
> +#endif
> diff -ruNp 930-PM_TRACE.patch-old/include/asm-x86_64/resume-trace.h 930-PM_TRACE.patch-new/include/asm-x86_64/resume-trace.h
> --- 930-PM_TRACE.patch-old/include/asm-x86_64/resume-trace.h	1970-01-01 10:00:00.000000000 +1000
> +++ 930-PM_TRACE.patch-new/include/asm-x86_64/resume-trace.h	2007-01-15 22:00:45.000000000 +1100
> @@ -0,0 +1,21 @@
> +#ifndef ARCH_RESUME_TRACE_H
> +#define ARCH_RESUME_TRACE_H
> +
> +#ifdef CONFIG_PM_TRACE
> +#define TRACE_RESUME(user) do {					\
> +	if (pm_trace_enabled) {					\
> +		void *tracedata;				\
> +		asm volatile("movq $1f,%0\n"			\
> +			".section .tracedata,\"a\"\n"		\
> +			"1:\t.word %c1\n"			\
> +			"\t.quad %c2\n"				\
> +			".previous"				\
> +			:"=r" (tracedata)			\
> +			: "i" (__LINE__), "i" (__FILE__));	\
> +		generate_resume_trace(tracedata, user);		\
> +	}							\
> +} while (0)
> +#else
> +#define TRACE_RESUME(user) do { } while (0)
> +#endif
> +#endif
> diff -ruNp 930-PM_TRACE.patch-old/include/linux/resume-trace.h 930-PM_TRACE.patch-new/include/linux/resume-trace.h
> --- 930-PM_TRACE.patch-old/include/linux/resume-trace.h	2007-01-11 18:25:16.000000000 +1100
> +++ 930-PM_TRACE.patch-new/include/linux/resume-trace.h	2007-01-15 00:00:08.000000000 +1100
> @@ -1,6 +1,8 @@
>  #ifndef RESUME_TRACE_H
>  #define RESUME_TRACE_H
>  
> +#include <asm/resume-trace.h>
> +
>  #ifdef CONFIG_PM_TRACE
>  
>  extern int pm_trace_enabled;
> @@ -10,25 +12,8 @@ extern void set_trace_device(struct devi
>  extern void generate_resume_trace(void *tracedata, unsigned int user);
>  
>  #define TRACE_DEVICE(dev) set_trace_device(dev)
> -#define TRACE_RESUME(user) do {					\
> -	if (pm_trace_enabled) {					\
> -		void *tracedata;				\
> -		asm volatile("movl $1f,%0\n"			\
> -			".section .tracedata,\"a\"\n"		\
> -			"1:\t.word %c1\n"			\
> -			"\t.long %c2\n"				\
> -			".previous"				\
> -			:"=r" (tracedata)			\
> -			: "i" (__LINE__), "i" (__FILE__));	\
> -		generate_resume_trace(tracedata, user);		\
> -	}							\
> -} while (0)
> -
>  #else
> -
>  #define TRACE_DEVICE(dev) do { } while (0)
> -#define TRACE_RESUME(dev) do { } while (0)
> -
>  #endif
>  
>  #endif
> diff -ruNp 930-PM_TRACE.patch-old/kernel/power/Kconfig 930-PM_TRACE.patch-new/kernel/power/Kconfig
> --- 930-PM_TRACE.patch-old/kernel/power/Kconfig	2007-01-15 22:00:40.000000000 +1100
> +++ 930-PM_TRACE.patch-new/kernel/power/Kconfig	2007-01-15 00:00:08.000000000 +1100
> @@ -50,7 +50,7 @@ config DISABLE_CONSOLE_SUSPEND
>  
>  config PM_TRACE
>  	bool "Suspend/resume event tracing"
> -	depends on PM && PM_DEBUG && X86_32 && EXPERIMENTAL
> +	depends on PM && PM_DEBUG && (X86_32 || X86_64) && EXPERIMENTAL
>  	default n
>  	---help---
>  	This enables some cheesy code to save the last PM event point in the
> 
> 
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html

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

end of thread, other threads:[~2007-01-19  9:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-15 11:04 [Patch] Extend support for PM_TRACE to include x86_64 Nigel Cunningham
2007-01-15 15:04 ` Rafael J. Wysocki
2007-01-15 17:39 ` Randy Dunlap
2007-01-18 16:54 ` Pavel Machek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).