diff options
author | Jeff Garzik <jgarzik@pobox.com> | 2005-09-14 08:01:25 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-09-14 08:01:25 -0400 |
commit | d7f6884ae0ae6e406ec3500fcde16e8f51642460 (patch) | |
tree | efceb246a4fa12921b7dbd3946a88fa257684405 /arch/ppc64/xmon | |
parent | cd28ab6a4e50a7601d22752aa7ce0c8197b10bdf (diff) | |
parent | 2f4ba45a75d6383b4a1201169a808ffea416ffa0 (diff) |
Merge /spare/repo/linux-2.6/
Diffstat (limited to 'arch/ppc64/xmon')
-rw-r--r-- | arch/ppc64/xmon/privinst.h | 1 | ||||
-rw-r--r-- | arch/ppc64/xmon/start.c | 6 | ||||
-rw-r--r-- | arch/ppc64/xmon/xmon.c | 46 |
3 files changed, 26 insertions, 27 deletions
diff --git a/arch/ppc64/xmon/privinst.h b/arch/ppc64/xmon/privinst.h index 183c3e400258..02eb40dac0b3 100644 --- a/arch/ppc64/xmon/privinst.h +++ b/arch/ppc64/xmon/privinst.h | |||
@@ -46,7 +46,6 @@ GSETSPR(287, pvr) | |||
46 | GSETSPR(1008, hid0) | 46 | GSETSPR(1008, hid0) |
47 | GSETSPR(1009, hid1) | 47 | GSETSPR(1009, hid1) |
48 | GSETSPR(1010, iabr) | 48 | GSETSPR(1010, iabr) |
49 | GSETSPR(1013, dabr) | ||
50 | GSETSPR(1023, pir) | 49 | GSETSPR(1023, pir) |
51 | 50 | ||
52 | static inline void store_inst(void *p) | 51 | static inline void store_inst(void *p) |
diff --git a/arch/ppc64/xmon/start.c b/arch/ppc64/xmon/start.c index a9265bcc79b2..e50c158191e1 100644 --- a/arch/ppc64/xmon/start.c +++ b/arch/ppc64/xmon/start.c | |||
@@ -27,7 +27,7 @@ static void sysrq_handle_xmon(int key, struct pt_regs *pt_regs, | |||
27 | struct tty_struct *tty) | 27 | struct tty_struct *tty) |
28 | { | 28 | { |
29 | /* ensure xmon is enabled */ | 29 | /* ensure xmon is enabled */ |
30 | xmon_init(); | 30 | xmon_init(1); |
31 | debugger(pt_regs); | 31 | debugger(pt_regs); |
32 | } | 32 | } |
33 | 33 | ||
@@ -61,7 +61,9 @@ xmon_read(void *handle, void *ptr, int nb) | |||
61 | int | 61 | int |
62 | xmon_read_poll(void) | 62 | xmon_read_poll(void) |
63 | { | 63 | { |
64 | return udbg_getc_poll(); | 64 | if (udbg_getc_poll) |
65 | return udbg_getc_poll(); | ||
66 | return -1; | ||
65 | } | 67 | } |
66 | 68 | ||
67 | FILE *xmon_stdin; | 69 | FILE *xmon_stdin; |
diff --git a/arch/ppc64/xmon/xmon.c b/arch/ppc64/xmon/xmon.c index 05539439e6bc..74e63a886a69 100644 --- a/arch/ppc64/xmon/xmon.c +++ b/arch/ppc64/xmon/xmon.c | |||
@@ -586,6 +586,8 @@ int xmon_dabr_match(struct pt_regs *regs) | |||
586 | { | 586 | { |
587 | if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) != (MSR_IR|MSR_SF)) | 587 | if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) != (MSR_IR|MSR_SF)) |
588 | return 0; | 588 | return 0; |
589 | if (dabr.enabled == 0) | ||
590 | return 0; | ||
589 | xmon_core(regs, 0); | 591 | xmon_core(regs, 0); |
590 | return 1; | 592 | return 1; |
591 | } | 593 | } |
@@ -628,20 +630,6 @@ int xmon_fault_handler(struct pt_regs *regs) | |||
628 | return 0; | 630 | return 0; |
629 | } | 631 | } |
630 | 632 | ||
631 | /* On systems with a hypervisor, we can't set the DABR | ||
632 | (data address breakpoint register) directly. */ | ||
633 | static void set_controlled_dabr(unsigned long val) | ||
634 | { | ||
635 | #ifdef CONFIG_PPC_PSERIES | ||
636 | if (systemcfg->platform == PLATFORM_PSERIES_LPAR) { | ||
637 | int rc = plpar_hcall_norets(H_SET_DABR, val); | ||
638 | if (rc != H_Success) | ||
639 | xmon_printf("Warning: setting DABR failed (%d)\n", rc); | ||
640 | } else | ||
641 | #endif | ||
642 | set_dabr(val); | ||
643 | } | ||
644 | |||
645 | static struct bpt *at_breakpoint(unsigned long pc) | 633 | static struct bpt *at_breakpoint(unsigned long pc) |
646 | { | 634 | { |
647 | int i; | 635 | int i; |
@@ -728,7 +716,7 @@ static void insert_bpts(void) | |||
728 | static void insert_cpu_bpts(void) | 716 | static void insert_cpu_bpts(void) |
729 | { | 717 | { |
730 | if (dabr.enabled) | 718 | if (dabr.enabled) |
731 | set_controlled_dabr(dabr.address | (dabr.enabled & 7)); | 719 | set_dabr(dabr.address | (dabr.enabled & 7)); |
732 | if (iabr && cpu_has_feature(CPU_FTR_IABR)) | 720 | if (iabr && cpu_has_feature(CPU_FTR_IABR)) |
733 | set_iabr(iabr->address | 721 | set_iabr(iabr->address |
734 | | (iabr->enabled & (BP_IABR|BP_IABR_TE))); | 722 | | (iabr->enabled & (BP_IABR|BP_IABR_TE))); |
@@ -756,7 +744,7 @@ static void remove_bpts(void) | |||
756 | 744 | ||
757 | static void remove_cpu_bpts(void) | 745 | static void remove_cpu_bpts(void) |
758 | { | 746 | { |
759 | set_controlled_dabr(0); | 747 | set_dabr(0); |
760 | if (cpu_has_feature(CPU_FTR_IABR)) | 748 | if (cpu_has_feature(CPU_FTR_IABR)) |
761 | set_iabr(0); | 749 | set_iabr(0); |
762 | } | 750 | } |
@@ -2496,15 +2484,25 @@ static void dump_stab(void) | |||
2496 | } | 2484 | } |
2497 | } | 2485 | } |
2498 | 2486 | ||
2499 | void xmon_init(void) | 2487 | void xmon_init(int enable) |
2500 | { | 2488 | { |
2501 | __debugger = xmon; | 2489 | if (enable) { |
2502 | __debugger_ipi = xmon_ipi; | 2490 | __debugger = xmon; |
2503 | __debugger_bpt = xmon_bpt; | 2491 | __debugger_ipi = xmon_ipi; |
2504 | __debugger_sstep = xmon_sstep; | 2492 | __debugger_bpt = xmon_bpt; |
2505 | __debugger_iabr_match = xmon_iabr_match; | 2493 | __debugger_sstep = xmon_sstep; |
2506 | __debugger_dabr_match = xmon_dabr_match; | 2494 | __debugger_iabr_match = xmon_iabr_match; |
2507 | __debugger_fault_handler = xmon_fault_handler; | 2495 | __debugger_dabr_match = xmon_dabr_match; |
2496 | __debugger_fault_handler = xmon_fault_handler; | ||
2497 | } else { | ||
2498 | __debugger = NULL; | ||
2499 | __debugger_ipi = NULL; | ||
2500 | __debugger_bpt = NULL; | ||
2501 | __debugger_sstep = NULL; | ||
2502 | __debugger_iabr_match = NULL; | ||
2503 | __debugger_dabr_match = NULL; | ||
2504 | __debugger_fault_handler = NULL; | ||
2505 | } | ||
2508 | } | 2506 | } |
2509 | 2507 | ||
2510 | void dump_segments(void) | 2508 | void dump_segments(void) |