diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2008-09-11 10:17:23 -0400 |
---|---|---|
committer | Kyle McMartin <kyle@hera.kernel.org> | 2008-10-10 12:32:30 -0400 |
commit | f0514ae323f19ba1ad4bea4174ea274c812f7eee (patch) | |
tree | a13bd43c66a40157590466ce0e149a86d009c039 | |
parent | 0be7d1fe4361bb9f2ebbd6fa394687cbe4bea950 (diff) |
parisc: initialize unwinder much earlier
The unwinder was being initialized way too late to be any use
debugging early boot crashes. Instead of relying on module_init
initcalls to initialize it, let's do it explicitly as early as
we can.
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
Signed-off-by: Kyle McMartin <kyle@mcmartin.ca>
-rw-r--r-- | arch/parisc/include/asm/unwind.h | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/unwind.c | 4 |
3 files changed, 5 insertions, 3 deletions
diff --git a/arch/parisc/include/asm/unwind.h b/arch/parisc/include/asm/unwind.h index 2f7e6e50a158..52482e4fc20d 100644 --- a/arch/parisc/include/asm/unwind.h +++ b/arch/parisc/include/asm/unwind.h | |||
@@ -74,4 +74,6 @@ void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *r | |||
74 | int unwind_once(struct unwind_frame_info *info); | 74 | int unwind_once(struct unwind_frame_info *info); |
75 | int unwind_to_user(struct unwind_frame_info *info); | 75 | int unwind_to_user(struct unwind_frame_info *info); |
76 | 76 | ||
77 | int unwind_init(void); | ||
78 | |||
77 | #endif | 79 | #endif |
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index a59b71efdbe5..7d27853ff8c8 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <asm/pdc_chassis.h> | 44 | #include <asm/pdc_chassis.h> |
45 | #include <asm/io.h> | 45 | #include <asm/io.h> |
46 | #include <asm/setup.h> | 46 | #include <asm/setup.h> |
47 | #include <asm/unwind.h> | ||
47 | 48 | ||
48 | static char __initdata command_line[COMMAND_LINE_SIZE]; | 49 | static char __initdata command_line[COMMAND_LINE_SIZE]; |
49 | 50 | ||
@@ -123,6 +124,7 @@ void __init setup_arch(char **cmdline_p) | |||
123 | #ifdef CONFIG_64BIT | 124 | #ifdef CONFIG_64BIT |
124 | extern int parisc_narrow_firmware; | 125 | extern int parisc_narrow_firmware; |
125 | #endif | 126 | #endif |
127 | unwind_init(); | ||
126 | 128 | ||
127 | init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ | 129 | init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ |
128 | 130 | ||
diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index 701b2d2d8882..6773c582e457 100644 --- a/arch/parisc/kernel/unwind.c +++ b/arch/parisc/kernel/unwind.c | |||
@@ -170,7 +170,7 @@ void unwind_table_remove(struct unwind_table *table) | |||
170 | } | 170 | } |
171 | 171 | ||
172 | /* Called from setup_arch to import the kernel unwind info */ | 172 | /* Called from setup_arch to import the kernel unwind info */ |
173 | static int unwind_init(void) | 173 | int unwind_init(void) |
174 | { | 174 | { |
175 | long start, stop; | 175 | long start, stop; |
176 | register unsigned long gp __asm__ ("r27"); | 176 | register unsigned long gp __asm__ ("r27"); |
@@ -417,5 +417,3 @@ int unwind_to_user(struct unwind_frame_info *info) | |||
417 | 417 | ||
418 | return ret; | 418 | return ret; |
419 | } | 419 | } |
420 | |||
421 | module_init(unwind_init); | ||