From: Nigel Cunningham <nigel@nigel.suspend2.net>
To: Randy Dunlap <rdunlap@xenotime.net>, Andrew Morton <akpm@osdl.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
Richard Hughes <hughsient@gmail.com>,
Julian Sikorski <belegdol@gmail.com>, Andi Kleen <ak@suse.de>
Subject: [PATCH} x86_64 PM_TRACE support.
Date: Sat, 26 May 2007 16:32:54 +1000 [thread overview]
Message-ID: <1180161174.9773.60.camel@nigel.suspend2.net> (raw)
[-- Attachment #1: Type: text/plain, Size: 6453 bytes --]
Hi all.
As promised I took another look at the patch and at what Randy had
prepared to fix the IA64 compilation error. I did some more work on it,
and believe that the following is the tidiest correct solution I can
come up with. It differs from the version that caused the compilation
error primarily in that:
* the #include <asm/resume-trace.h> is inside the #ifdef
CONFIG_PM_TRACE.
* now-unnecessary protection for multiple #includes and ifdef testing of
CONFIG_PM_TRACE in the asm code were removed.
* do-nothing definitions for !PM_TRACE restored to
include/linux/resume-trace.h.
We're therefore depending upon kernel/power/Kconfig having the right
depends condition. As far as I can see, IA64 doesn't define CONFIG_X86.
Is that correct, or do we need to have (X86 && !IA64)?
Randy, since this is substantially different to the work you did, I
haven't added your signed-off-by as we previously discussed.
Signed-off-by: Nigel Cunningham <nigel@nigel.suspend2.net>
CC: Randy Dunlap <rdunlap@xenotime.net>
CC: Andi Kleen <ak@suse.de>
arch/x86_64/kernel/vmlinux.lds.S | 7 +++++++
drivers/base/power/trace.c | 5 ++++-
include/asm-i386/resume-trace.h | 13 +++++++++++++
include/asm-x86_64/resume-trace.h | 13 +++++++++++++
include/linux/resume-trace.h | 19 +++++--------------
kernel/power/Kconfig | 2 +-
6 files changed, 43 insertions(+), 16 deletions(-)
diff -ruNp 200.patch-old/arch/x86_64/kernel/vmlinux.lds.S 200.patch-new/arch/x86_64/kernel/vmlinux.lds.S
--- 200.patch-old/arch/x86_64/kernel/vmlinux.lds.S 2007-05-26 14:18:22.000000000 +1000
+++ 200.patch-new/arch/x86_64/kernel/vmlinux.lds.S 2007-05-26 14:23:52.000000000 +1000
@@ -52,6 +52,13 @@ SECTIONS
RODATA
+ . = 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 200.patch-old/drivers/base/power/trace.c 200.patch-new/drivers/base/power/trace.c
--- 200.patch-old/drivers/base/power/trace.c 2007-05-26 14:18:23.000000000 +1000
+++ 200.patch-new/drivers/base/power/trace.c 2007-05-26 14:23:52.000000000 +1000
@@ -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,8 @@ 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 200.patch-old/include/asm-i386/resume-trace.h 200.patch-new/include/asm-i386/resume-trace.h
--- 200.patch-old/include/asm-i386/resume-trace.h 1970-01-01 10:00:00.000000000 +1000
+++ 200.patch-new/include/asm-i386/resume-trace.h 2007-05-26 16:07:31.000000000 +1000
@@ -0,0 +1,13 @@
+#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)
diff -ruNp 200.patch-old/include/asm-x86_64/resume-trace.h 200.patch-new/include/asm-x86_64/resume-trace.h
--- 200.patch-old/include/asm-x86_64/resume-trace.h 1970-01-01 10:00:00.000000000 +1000
+++ 200.patch-new/include/asm-x86_64/resume-trace.h 2007-05-26 16:07:27.000000000 +1000
@@ -0,0 +1,13 @@
+#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)
diff -ruNp 200.patch-old/include/linux/resume-trace.h 200.patch-new/include/linux/resume-trace.h
--- 200.patch-old/include/linux/resume-trace.h 2007-05-26 14:18:47.000000000 +1000
+++ 200.patch-new/include/linux/resume-trace.h 2007-05-26 16:17:43.000000000 +1000
@@ -2,6 +2,7 @@
#define RESUME_TRACE_H
#ifdef CONFIG_PM_TRACE
+#include <asm/resume-trace.h>
extern int pm_trace_enabled;
@@ -9,20 +10,10 @@ struct device;
extern void set_trace_device(struct device *);
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)
+#define TRACE_DEVICE(dev) do { \
+ if (pm_trace_enabled) \
+ set_trace_device(dev); \
+ } while(0)
#else
diff -ruNp 200.patch-old/kernel/power/Kconfig 200.patch-new/kernel/power/Kconfig
--- 200.patch-old/kernel/power/Kconfig 2007-05-26 14:18:48.000000000 +1000
+++ 200.patch-new/kernel/power/Kconfig 2007-05-26 14:23:52.000000000 +1000
@@ -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 && EXPERIMENTAL
default n
---help---
This enables some cheesy code to save the last PM event point in the
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
next reply other threads:[~2007-05-26 6:33 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-05-26 6:32 Nigel Cunningham [this message]
2007-05-27 20:39 ` [PATCH} x86_64 PM_TRACE support Pavel Machek
2007-05-27 21:10 ` Julian Sikorski
2007-05-27 21:54 ` Nigel Cunningham
2007-05-27 21:53 ` Randy Dunlap
2007-05-31 0:01 ` Dave Jones
2007-05-31 0:09 ` Randy Dunlap
2007-05-31 7:43 ` Nigel Cunningham
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1180161174.9773.60.camel@nigel.suspend2.net \
--to=nigel@nigel.suspend2.net \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=belegdol@gmail.com \
--cc=hughsient@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rdunlap@xenotime.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.