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