Browse Source

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>
James Bottomley 16 years ago
parent
commit
f0514ae323
3 changed files with 5 additions and 3 deletions
  1. 2 0
      arch/parisc/include/asm/unwind.h
  2. 2 0
      arch/parisc/kernel/setup.c
  3. 1 3
      arch/parisc/kernel/unwind.c

+ 2 - 0
arch/parisc/include/asm/unwind.h

@@ -74,4 +74,6 @@ void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *r
 int unwind_once(struct unwind_frame_info *info);
 int unwind_once(struct unwind_frame_info *info);
 int unwind_to_user(struct unwind_frame_info *info);
 int unwind_to_user(struct unwind_frame_info *info);
 
 
+int unwind_init(void);
+
 #endif
 #endif

+ 2 - 0
arch/parisc/kernel/setup.c

@@ -44,6 +44,7 @@
 #include <asm/pdc_chassis.h>
 #include <asm/pdc_chassis.h>
 #include <asm/io.h>
 #include <asm/io.h>
 #include <asm/setup.h>
 #include <asm/setup.h>
+#include <asm/unwind.h>
 
 
 static char __initdata command_line[COMMAND_LINE_SIZE];
 static char __initdata command_line[COMMAND_LINE_SIZE];
 
 
@@ -123,6 +124,7 @@ void __init setup_arch(char **cmdline_p)
 #ifdef CONFIG_64BIT
 #ifdef CONFIG_64BIT
 	extern int parisc_narrow_firmware;
 	extern int parisc_narrow_firmware;
 #endif
 #endif
+	unwind_init();
 
 
 	init_per_cpu(smp_processor_id());	/* Set Modes & Enable FP */
 	init_per_cpu(smp_processor_id());	/* Set Modes & Enable FP */
 
 

+ 1 - 3
arch/parisc/kernel/unwind.c

@@ -170,7 +170,7 @@ void unwind_table_remove(struct unwind_table *table)
 }
 }
 
 
 /* Called from setup_arch to import the kernel unwind info */
 /* Called from setup_arch to import the kernel unwind info */
-static int unwind_init(void)
+int unwind_init(void)
 {
 {
 	long start, stop;
 	long start, stop;
 	register unsigned long gp __asm__ ("r27");
 	register unsigned long gp __asm__ ("r27");
@@ -417,5 +417,3 @@ int unwind_to_user(struct unwind_frame_info *info)
 
 
 	return ret;
 	return ret;
 }
 }
-
-module_init(unwind_init);