git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[pandora-kernel.git]
/
arch
/
powerpc
/
xmon
/
xmon.c
diff --git
a/arch/powerpc/xmon/xmon.c
b/arch/powerpc/xmon/xmon.c
index
e1f33a8
..
c6f0a71
100644
(file)
--- a/
arch/powerpc/xmon/xmon.c
+++ b/
arch/powerpc/xmon/xmon.c
@@
-335,6
+335,16
@@
int cpus_are_in_xmon(void)
}
#endif
}
#endif
+static inline int unrecoverable_excp(struct pt_regs *regs)
+{
+#ifdef CONFIG_4xx
+ /* We have no MSR_RI bit on 4xx, so we simply return false */
+ return 0;
+#else
+ return ((regs->msr & MSR_RI) == 0);
+#endif
+}
+
static int xmon_core(struct pt_regs *regs, int fromipi)
{
int cmd = 0;
static int xmon_core(struct pt_regs *regs, int fromipi)
{
int cmd = 0;
@@
-388,7
+398,7
@@
static int xmon_core(struct pt_regs *regs, int fromipi)
bp = NULL;
if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF))
bp = at_breakpoint(regs->nip);
bp = NULL;
if ((regs->msr & (MSR_IR|MSR_PR|MSR_SF)) == (MSR_IR|MSR_SF))
bp = at_breakpoint(regs->nip);
- if (bp ||
(regs->msr & MSR_RI) == 0
)
+ if (bp ||
unrecoverable_excp(regs)
)
fromipi = 0;
if (!fromipi) {
fromipi = 0;
if (!fromipi) {
@@
-399,7
+409,7
@@
static int xmon_core(struct pt_regs *regs, int fromipi)
cpu, BP_NUM(bp));
xmon_print_symbol(regs->nip, " ", ")\n");
}
cpu, BP_NUM(bp));
xmon_print_symbol(regs->nip, " ", ")\n");
}
- if (
(regs->msr & MSR_RI) == 0
)
+ if (
unrecoverable_excp(regs)
)
printf("WARNING: exception is not recoverable, "
"can't continue\n");
release_output_lock();
printf("WARNING: exception is not recoverable, "
"can't continue\n");
release_output_lock();
@@
-490,7
+500,7
@@
static int xmon_core(struct pt_regs *regs, int fromipi)
printf("Stopped at breakpoint %x (", BP_NUM(bp));
xmon_print_symbol(regs->nip, " ", ")\n");
}
printf("Stopped at breakpoint %x (", BP_NUM(bp));
xmon_print_symbol(regs->nip, " ", ")\n");
}
- if (
(regs->msr & MSR_RI) == 0
)
+ if (
unrecoverable_excp(regs)
)
printf("WARNING: exception is not recoverable, "
"can't continue\n");
remove_bpts();
printf("WARNING: exception is not recoverable, "
"can't continue\n");
remove_bpts();
@@
-2570,7
+2580,7
@@
static void xmon_print_symbol(unsigned long address, const char *mid,
printf("%s", after);
}
printf("%s", after);
}
-#ifdef CONFIG_PPC64
+#ifdef CONFIG_PPC
_BOOK3S_
64
static void dump_slb(void)
{
int i;
static void dump_slb(void)
{
int i;