[ppc64] prom_panic(), from Todd Inglett --- arch/ppc64/kernel/prom.c | 29 +++++++++-------------------- include/asm-ppc64/prom.h | 1 - 2 files changed, 9 insertions(+), 21 deletions(-) diff -puN arch/ppc64/kernel/prom.c~ppc64-prom_panic arch/ppc64/kernel/prom.c --- 25/arch/ppc64/kernel/prom.c~ppc64-prom_panic 2004-01-13 23:23:08.000000000 -0800 +++ 25-akpm/arch/ppc64/kernel/prom.c 2004-01-13 23:23:08.000000000 -0800 @@ -163,7 +163,7 @@ unsigned short virt_irq_to_real_map[NR_I int last_virt_irq = 2; /* index of last virt_irq. Skip through IPI */ static unsigned long call_prom(const char *service, int nargs, int nret, ...); -static void prom_exit(void); +static void prom_panic(const char *reason); static unsigned long copy_device_tree(unsigned long); static unsigned long inspect_node(phandle, struct device_node *, unsigned long, unsigned long, struct device_node ***); @@ -235,10 +235,12 @@ call_prom(const char *service, int nargs static void __init -prom_exit() +prom_panic(const char *reason) { unsigned long offset = reloc_offset(); + prom_print(reason); + /* ToDo: should put up an SRC here */ call_prom(RELOC("exit"), 0, 0); for (;;) /* should never get here */ @@ -800,8 +802,7 @@ prom_initialize_tce_table(void) base = lmb_alloc(minsize, align); if ( !base ) { - prom_print(RELOC("ERROR, cannot find space for TCE table.\n")); - prom_exit(); + prom_panic(RELOC("ERROR, cannot find space for TCE table.\n")); } vbase = absolute_to_virt(base); @@ -1250,12 +1251,12 @@ prom_init(unsigned long r3, unsigned lon RELOC("/chosen")); if ((long)_prom->chosen <= 0) - prom_exit(); + prom_panic(RELOC("cannot find chosen")); /* msg won't be printed :( */ if ((long)call_prom(RELOC("getprop"), 4, 1, _prom->chosen, RELOC("stdout"), &getprop_rval, sizeof(getprop_rval)) <= 0) - prom_exit(); + prom_panic(RELOC("cannot find stdout")); _prom->stdout = (ihandle)(unsigned long)getprop_rval; @@ -1281,7 +1282,7 @@ prom_init(unsigned long r3, unsigned lon if ((long)call_prom(RELOC("getprop"), 4, 1, _prom->chosen, RELOC("cpu"), &getprop_rval, sizeof(getprop_rval)) <= 0) - prom_exit(); + prom_panic(RELOC("cannot find boot cpu")); prom_cpu = (ihandle)(unsigned long)getprop_rval; cpu_pkg = call_prom(RELOC("instance-to-package"), 1, 1, prom_cpu); @@ -1538,8 +1539,7 @@ copy_device_tree(unsigned long mem_start root = call_prom(RELOC("peer"), 1, 1, (phandle)0); if (root == (phandle)0) { - prom_print(RELOC("couldn't get device tree root\n")); - prom_exit(); + prom_panic(RELOC("couldn't get device tree root\n")); } allnextp = &RELOC(allnodes); mem_start = DOUBLEWORD_ALIGN(mem_start); @@ -2803,17 +2803,6 @@ print_properties(struct device_node *np) #endif -void __init -abort() -{ -#ifdef CONFIG_XMON - xmon(NULL); -#endif - for (;;) - prom_exit(); -} - - /* Verify bi_recs are good */ static struct bi_record * prom_bi_rec_verify(struct bi_record *bi_recs) diff -puN include/asm-ppc64/prom.h~ppc64-prom_panic include/asm-ppc64/prom.h --- 25/include/asm-ppc64/prom.h~ppc64-prom_panic 2004-01-13 23:23:08.000000000 -0800 +++ 25-akpm/include/asm-ppc64/prom.h 2004-01-13 23:23:08.000000000 -0800 @@ -250,7 +250,6 @@ extern int of_add_node(const char *path, extern int of_remove_node(struct device_node *np); /* Other Prototypes */ -extern void abort(void); extern unsigned long prom_init(unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); extern void prom_print(const char *msg); _