Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
8a81d818
Commit
8a81d818
authored
Feb 13, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/netfix-2.6
into home.osdl.org:/home/torvalds/v2.5/linux
parents
d5acfb1f
49555a7c
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
286 additions
and
553 deletions
+286
-553
arch/ppc64/Kconfig
arch/ppc64/Kconfig
+8
-1
arch/ppc64/boot/prom.c
arch/ppc64/boot/prom.c
+10
-10
arch/ppc64/boot/zlib.c
arch/ppc64/boot/zlib.c
+1
-2
arch/ppc64/kernel/open_pic.c
arch/ppc64/kernel/open_pic.c
+2
-2
arch/ppc64/kernel/ppc_ksyms.c
arch/ppc64/kernel/ppc_ksyms.c
+0
-19
arch/ppc64/kernel/process.c
arch/ppc64/kernel/process.c
+4
-2
arch/ppc64/kernel/setup.c
arch/ppc64/kernel/setup.c
+9
-14
arch/ppc64/kernel/smp.c
arch/ppc64/kernel/smp.c
+12
-17
arch/ppc64/kernel/traps.c
arch/ppc64/kernel/traps.c
+33
-48
arch/ppc64/kernel/xics.c
arch/ppc64/kernel/xics.c
+3
-3
arch/ppc64/mm/fault.c
arch/ppc64/mm/fault.c
+5
-24
arch/ppc64/mm/init.c
arch/ppc64/mm/init.c
+2
-5
arch/ppc64/xmon/privinst.h
arch/ppc64/xmon/privinst.h
+0
-28
arch/ppc64/xmon/start.c
arch/ppc64/xmon/start.c
+9
-27
arch/ppc64/xmon/xmon.c
arch/ppc64/xmon/xmon.c
+148
-296
include/asm-ppc64/ppcdebug.h
include/asm-ppc64/ppcdebug.h
+0
-13
include/asm-ppc64/smp.h
include/asm-ppc64/smp.h
+9
-5
include/asm-ppc64/system.h
include/asm-ppc64/system.h
+31
-20
include/asm-ppc64/xmon.h
include/asm-ppc64/xmon.h
+0
-17
No files found.
arch/ppc64/Kconfig
View file @
8a81d818
...
...
@@ -356,9 +356,16 @@ config MAGIC_SYSRQ
keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
unless you really know what this hack does.
config DEBUGGER
bool "Enable debugger hooks"
depends on DEBUG_KERNEL
help
Include in-kernel hooks for kernel debuggers. Unless you are
intending to debug the kernel, say N here.
config XMON
bool "Include xmon kernel debugger"
depends on DEBUG
_KERNEL
depends on DEBUG
GER
help
Include in-kernel hooks for the xmon kernel monitor/debugger.
Unless you are intending to debug the kernel, say N here.
...
...
arch/ppc64/boot/prom.c
View file @
8a81d818
...
...
@@ -11,9 +11,6 @@
#include <linux/string.h>
#include <linux/ctype.h>
#define BITS_PER_LONG 32
#include <asm/div64.h>
int
(
*
prom
)(
void
*
);
void
*
chosen_handle
;
...
...
@@ -28,6 +25,9 @@ void chrpboot(int a1, int a2, void *prom); /* in main.c */
void
printk
(
char
*
fmt
,
...);
/* there is no convenient header to get this from... -- paulus */
extern
unsigned
long
strlen
(
const
char
*
);
int
write
(
void
*
handle
,
void
*
ptr
,
int
nb
)
{
...
...
@@ -352,7 +352,7 @@ static int skip_atoi(const char **s)
#define SPECIAL 32
/* 0x */
#define LARGE 64
/* use 'ABCDEF' instead of 'abcdef' */
static
char
*
number
(
char
*
str
,
long
long
num
,
int
base
,
int
size
,
int
precision
,
int
type
)
static
char
*
number
(
char
*
str
,
long
num
,
int
base
,
int
size
,
int
precision
,
int
type
)
{
char
c
,
sign
,
tmp
[
66
];
const
char
*
digits
=
"0123456789abcdefghijklmnopqrstuvwxyz"
;
...
...
@@ -388,8 +388,10 @@ static char * number(char * str, long long num, int base, int size, int precisio
i
=
0
;
if
(
num
==
0
)
tmp
[
i
++
]
=
'0'
;
else
while
(
num
!=
0
)
tmp
[
i
++
]
=
digits
[
do_div
(
num
,
base
)];
else
while
(
num
!=
0
)
{
tmp
[
i
++
]
=
digits
[
num
%
base
];
num
/=
base
;
}
if
(
i
>
precision
)
precision
=
i
;
size
-=
precision
;
...
...
@@ -424,7 +426,7 @@ int sprintf(char * buf, const char *fmt, ...);
int
vsprintf
(
char
*
buf
,
const
char
*
fmt
,
va_list
args
)
{
int
len
;
unsigned
long
long
num
;
unsigned
long
num
;
int
i
,
base
;
char
*
str
;
const
char
*
s
;
...
...
@@ -575,9 +577,7 @@ int vsprintf(char *buf, const char *fmt, va_list args)
--
fmt
;
continue
;
}
if
(
qualifier
==
'L'
)
num
=
va_arg
(
args
,
long
long
);
else
if
(
qualifier
==
'l'
)
{
if
(
qualifier
==
'l'
)
{
num
=
va_arg
(
args
,
unsigned
long
);
if
(
flags
&
SIGN
)
num
=
(
signed
long
)
num
;
...
...
arch/ppc64/boot/zlib.c
View file @
8a81d818
...
...
@@ -102,9 +102,8 @@ extern char *z_errmsg[]; /* indexed by 1-zlib_error */
/* functions */
#include <linux/string.h>
extern
void
*
memcpy
(
void
*
,
const
void
*
,
unsigned
long
);
#define zmemcpy memcpy
#define zmemzero(dest, len) memset(dest, 0, len)
/* Diagnostic functions */
#ifdef DEBUG_ZLIB
...
...
arch/ppc64/kernel/open_pic.c
View file @
8a81d818
...
...
@@ -645,9 +645,9 @@ void openpic_request_IPIs(void)
request_irq
(
openpic_vec_ipi
+
1
,
openpic_ipi_action
,
SA_INTERRUPT
,
"IPI1 (reschedule)"
,
0
);
request_irq
(
openpic_vec_ipi
+
2
,
openpic_ipi_action
,
SA_INTERRUPT
,
"IPI2 (
invalidate tlb
)"
,
0
);
"IPI2 (
unused
)"
,
0
);
request_irq
(
openpic_vec_ipi
+
3
,
openpic_ipi_action
,
SA_INTERRUPT
,
"IPI3 (
xmon
break)"
,
0
);
"IPI3 (
debugger
break)"
,
0
);
for
(
i
=
0
;
i
<
OPENPIC_NUM_IPI
;
i
++
)
openpic_enable_ipi
(
openpic_vec_ipi
+
i
);
...
...
arch/ppc64/kernel/ppc_ksyms.c
View file @
8a81d818
...
...
@@ -206,25 +206,6 @@ EXPORT_SYMBOL(timer_interrupt);
EXPORT_SYMBOL
(
irq_desc
);
EXPORT_SYMBOL
(
get_wchan
);
EXPORT_SYMBOL
(
console_drivers
);
#ifdef CONFIG_XMON
EXPORT_SYMBOL
(
xmon
);
#endif
#ifdef CONFIG_DEBUG_KERNEL
extern
void
(
*
debugger
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_bpt
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_sstep
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_iabr_match
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_dabr_match
)(
struct
pt_regs
*
regs
);
extern
void
(
*
debugger_fault_handler
)(
struct
pt_regs
*
regs
);
EXPORT_SYMBOL
(
debugger
);
EXPORT_SYMBOL
(
debugger_bpt
);
EXPORT_SYMBOL
(
debugger_sstep
);
EXPORT_SYMBOL
(
debugger_iabr_match
);
EXPORT_SYMBOL
(
debugger_dabr_match
);
EXPORT_SYMBOL
(
debugger_fault_handler
);
#endif
EXPORT_SYMBOL
(
tb_ticks_per_usec
);
EXPORT_SYMBOL
(
paca
);
...
...
arch/ppc64/kernel/process.c
View file @
8a81d818
...
...
@@ -194,8 +194,8 @@ void show_regs(struct pt_regs * regs)
regs
->
msr
&
MSR_DR
?
1
:
0
);
if
(
regs
->
trap
==
0x300
||
regs
->
trap
==
0x380
||
regs
->
trap
==
0x600
)
printk
(
"DAR: %016lx, DSISR: %016lx
\n
"
,
regs
->
dar
,
regs
->
dsisr
);
printk
(
"TASK
= %p[%d] '%s'
"
,
current
,
current
->
pid
,
current
->
comm
);
printk
(
"TASK
: %p[%d] '%s' THREAD: %p
"
,
current
,
current
->
pid
,
current
->
comm
,
current
->
thread_info
);
#ifdef CONFIG_SMP
printk
(
" CPU: %d"
,
smp_processor_id
());
...
...
@@ -217,6 +217,8 @@ void show_regs(struct pt_regs * regs)
*/
printk
(
"NIP [%016lx] "
,
regs
->
nip
);
print_symbol
(
"%s
\n
"
,
regs
->
nip
);
printk
(
"LR [%016lx] "
,
regs
->
link
);
print_symbol
(
"%s
\n
"
,
regs
->
link
);
show_stack
(
current
,
(
unsigned
long
*
)
regs
->
gpr
[
1
]);
}
...
...
arch/ppc64/kernel/setup.c
View file @
8a81d818
...
...
@@ -42,6 +42,7 @@
#include <asm/sections.h>
#include <asm/btext.h>
#include <asm/nvram.h>
#include <asm/system.h>
extern
unsigned
long
klimit
;
/* extern void *stab; */
...
...
@@ -79,10 +80,6 @@ unsigned long decr_overclock_proc0_set = 0;
int
powersave_nap
;
#ifdef CONFIG_XMON
extern
void
xmon_map_scc
(
void
);
#endif
char
saved_command_line
[
256
];
unsigned
char
aux_device_present
;
...
...
@@ -159,15 +156,11 @@ void setup_system(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned
long
r6
,
unsigned
long
r7
)
{
#ifdef CONFIG_PPC_PSERIES
unsigned
int
ret
,
i
;
unsigned
int
ret
,
i
;
#endif
#ifdef CONFIG_XMON_DEFAULT
debugger
=
xmon
;
debugger_bpt
=
xmon_bpt
;
debugger_sstep
=
xmon_sstep
;
debugger_iabr_match
=
xmon_iabr_match
;
debugger_dabr_match
=
xmon_dabr_match
;
xmon_init
();
#endif
#ifdef CONFIG_PPC_ISERIES
...
...
@@ -601,13 +594,15 @@ void __init setup_arch(char **cmdline_p)
calibrate_delay
=
ppc64_calibrate_delay
;
ppc64_boot_msg
(
0x12
,
"Setup Arch"
);
#ifdef CONFIG_XMON
xmon_map_scc
();
if
(
strstr
(
cmd_line
,
"xmon"
))
xmon
(
0
);
if
(
strstr
(
cmd_line
,
"xmon"
))
{
/* ensure xmon is enabled */
xmon_init
();
debugger
(
0
);
}
#endif
/* CONFIG_XMON */
/*
* Set cache line size based on type of cpu as a default.
* Systems with OF can look in the properties on the cpu node(s)
...
...
arch/ppc64/kernel/smp.c
View file @
8a81d818
...
...
@@ -49,6 +49,7 @@
#include <asm/machdep.h>
#include <asm/xics.h>
#include <asm/cputable.h>
#include <asm/system.h>
int
smp_threads_ready
;
unsigned
long
cache_decay_ticks
;
...
...
@@ -394,7 +395,7 @@ void smp_local_timer_interrupt(struct pt_regs * regs)
void
smp_message_recv
(
int
msg
,
struct
pt_regs
*
regs
)
{
switch
(
msg
)
{
switch
(
msg
)
{
case
PPC_MSG_CALL_FUNCTION
:
smp_call_function_interrupt
();
break
;
...
...
@@ -407,11 +408,11 @@ void smp_message_recv(int msg, struct pt_regs *regs)
/* spare */
break;
#endif
#ifdef CONFIG_
XMON
case
PPC_MSG_
XMON
_BREAK
:
xmon
(
regs
);
#ifdef CONFIG_
DEBUGGER
case
PPC_MSG_
DEBUGGER
_BREAK
:
debugger
(
regs
);
break
;
#endif
/* CONFIG_XMON */
#endif
default:
printk
(
"SMP %d: smp_message_recv(): unknown msg %d
\n
"
,
smp_processor_id
(),
msg
);
...
...
@@ -424,12 +425,12 @@ void smp_send_reschedule(int cpu)
smp_message_pass
(
cpu
,
PPC_MSG_RESCHEDULE
,
0
,
0
);
}
#ifdef CONFIG_
XMON
void
smp_send_
xmon
_break
(
int
cpu
)
#ifdef CONFIG_
DEBUGGER
void
smp_send_
debugger
_break
(
int
cpu
)
{
smp_message_pass
(
cpu
,
PPC_MSG_
XMON
_BREAK
,
0
,
0
);
smp_message_pass
(
cpu
,
PPC_MSG_
DEBUGGER
_BREAK
,
0
,
0
);
}
#endif
/* CONFIG_XMON */
#endif
static
void
stop_this_cpu
(
void
*
dummy
)
{
...
...
@@ -507,10 +508,7 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
printk
(
"smp_call_function on cpu %d: other cpus not "
"responding (%d)
\n
"
,
smp_processor_id
(),
atomic_read
(
&
data
.
started
));
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger
)
debugger
(
0
);
#endif
debugger
(
0
);
goto
out
;
}
}
...
...
@@ -525,10 +523,7 @@ int smp_call_function (void (*func) (void *info), void *info, int nonatomic,
smp_processor_id
(),
atomic_read
(
&
data
.
finished
),
atomic_read
(
&
data
.
started
));
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger
)
debugger
(
0
);
#endif
debugger
(
0
);
goto
out
;
}
}
...
...
arch/ppc64/kernel/traps.c
View file @
8a81d818
...
...
@@ -45,13 +45,20 @@ extern void bad_page_fault(struct pt_regs *, unsigned long, int);
extern
int
fwnmi_active
;
#endif
#ifdef CONFIG_DEBUG_KERNEL
void
(
*
debugger
)(
struct
pt_regs
*
regs
);
int
(
*
debugger_bpt
)(
struct
pt_regs
*
regs
);
int
(
*
debugger_sstep
)(
struct
pt_regs
*
regs
);
int
(
*
debugger_iabr_match
)(
struct
pt_regs
*
regs
);
int
(
*
debugger_dabr_match
)(
struct
pt_regs
*
regs
);
void
(
*
debugger_fault_handler
)(
struct
pt_regs
*
regs
);
#ifdef CONFIG_DEBUGGER
int
(
*
__debugger
)(
struct
pt_regs
*
regs
);
int
(
*
__debugger_bpt
)(
struct
pt_regs
*
regs
);
int
(
*
__debugger_sstep
)(
struct
pt_regs
*
regs
);
int
(
*
__debugger_iabr_match
)(
struct
pt_regs
*
regs
);
int
(
*
__debugger_dabr_match
)(
struct
pt_regs
*
regs
);
int
(
*
__debugger_fault_handler
)(
struct
pt_regs
*
regs
);
EXPORT_SYMBOL
(
__debugger
);
EXPORT_SYMBOL
(
__debugger_bpt
);
EXPORT_SYMBOL
(
__debugger_sstep
);
EXPORT_SYMBOL
(
__debugger_iabr_match
);
EXPORT_SYMBOL
(
__debugger_dabr_match
);
EXPORT_SYMBOL
(
__debugger_fault_handler
);
#endif
/*
...
...
@@ -88,10 +95,8 @@ static void
_exception
(
int
signr
,
siginfo_t
*
info
,
struct
pt_regs
*
regs
)
{
if
(
!
user_mode
(
regs
))
{
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger
)
debugger
(
regs
);
#endif
if
(
debugger
(
regs
))
return
;
die
(
"Exception in kernel mode
\n
"
,
regs
,
signr
);
}
...
...
@@ -146,12 +151,8 @@ SystemResetException(struct pt_regs *regs)
}
#endif
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger
)
debugger
(
regs
);
else
#endif
panic
(
"System Reset"
);
if
(
!
debugger
(
regs
))
die
(
"System Reset"
,
regs
,
0
);
/* Must die if the interrupt is not recoverable */
if
(
!
(
regs
->
msr
&
MSR_RI
))
...
...
@@ -228,23 +229,12 @@ MachineCheckException(struct pt_regs *regs)
}
#endif
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_fault_handler
)
{
debugger_fault_handler
(
regs
);
if
(
debugger_fault_handler
(
regs
))
return
;
}
if
(
debugger
)
debugger
(
regs
);
#endif
console_verbose
();
spin_lock_irq
(
&
die_lock
);
bust_spinlocks
(
1
);
printk
(
"Machine check in kernel mode.
\n
"
);
printk
(
"Caused by (from SRR1=%lx): "
,
regs
->
msr
);
show_regs
(
regs
);
bust_spinlocks
(
0
);
spin_unlock_irq
(
&
die_lock
);
panic
(
"Unrecoverable Machine Check"
);
if
(
debugger
(
regs
))
return
;
die
(
"Machine check in kernel mode"
,
regs
,
0
);
}
void
...
...
@@ -267,10 +257,8 @@ InstructionBreakpointException(struct pt_regs *regs)
{
siginfo_t
info
;
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_iabr_match
&&
debugger_iabr_match
(
regs
))
if
(
debugger_iabr_match
(
regs
))
return
;
#endif
info
.
si_signo
=
SIGTRAP
;
info
.
si_errno
=
0
;
info
.
si_code
=
TRAP_BRKPT
;
...
...
@@ -372,6 +360,9 @@ ProgramCheckException(struct pt_regs *regs)
{
siginfo_t
info
;
if
(
debugger_fault_handler
(
regs
))
return
;
if
(
regs
->
msr
&
0x100000
)
{
/* IEEE FP exception */
...
...
@@ -387,10 +378,9 @@ ProgramCheckException(struct pt_regs *regs)
}
else
if
(
regs
->
msr
&
0x20000
)
{
/* trap exception */
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_bpt
&&
debugger_bpt
(
regs
))
if
(
debugger_bpt
(
regs
))
return
;
#endif
if
(
check_bug_trap
(
regs
))
{
regs
->
nip
+=
4
;
return
;
...
...
@@ -414,17 +404,13 @@ ProgramCheckException(struct pt_regs *regs)
void
KernelFPUnavailableException
(
struct
pt_regs
*
regs
)
{
printk
(
"Illegal floating point used in kernel (task=0x%p, "
"pc=0x%016lx, trap=0x%lx)
\n
"
,
current
,
regs
->
nip
,
regs
->
trap
);
panic
(
"Unrecoverable FP Unavailable Exception in Kernel"
);
die
(
"Unrecoverable FP Unavailable Exception in Kernel"
,
regs
,
0
);
}
void
KernelAltivecUnavailableException
(
struct
pt_regs
*
regs
)
{
printk
(
"Illegal VMX/Altivec used in kernel (task=0x%p, "
"pc=0x%016lx, trap=0x%lx)
\n
"
,
current
,
regs
->
nip
,
regs
->
trap
);
panic
(
"Unrecoverable VMX/Altivec Unavailable Exception in Kernel"
);
die
(
"Unrecoverable VMX/Altivec Unavailable Exception in Kernel"
,
regs
,
0
);
}
void
...
...
@@ -434,10 +420,9 @@ SingleStepException(struct pt_regs *regs)
regs
->
msr
&=
~
MSR_SE
;
/* Turn off 'trace' bit */
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_sstep
&&
debugger_sstep
(
regs
))
if
(
debugger_sstep
(
regs
))
return
;
#endif
info
.
si_signo
=
SIGTRAP
;
info
.
si_errno
=
0
;
info
.
si_code
=
TRAP_TRACE
;
...
...
arch/ppc64/kernel/xics.c
View file @
8a81d818
...
...
@@ -353,11 +353,11 @@ irqreturn_t xics_ipi_action(int irq, void *dev_id, struct pt_regs *regs)
smp_message_recv(PPC_MSG_MIGRATE_TASK, regs);
}
#endif
#ifdef CONFIG_
XMON
if
(
test_and_clear_bit
(
PPC_MSG_
XMON
_BREAK
,
#ifdef CONFIG_
DEBUGGER
if
(
test_and_clear_bit
(
PPC_MSG_
DEBUGGER
_BREAK
,
&
xics_ipi_message
[
cpu
].
value
))
{
mb
();
smp_message_recv
(
PPC_MSG_
XMON
_BREAK
,
regs
);
smp_message_recv
(
PPC_MSG_
DEBUGGER
_BREAK
,
regs
);
}
#endif
}
...
...
arch/ppc64/mm/fault.c
View file @
8a81d818
...
...
@@ -37,12 +37,6 @@
#include <asm/system.h>
#include <asm/uaccess.h>
#include <asm/ppcdebug.h>
#ifdef CONFIG_DEBUG_KERNEL
int
debugger_kernel_faults
=
1
;
#endif
void
bad_page_fault
(
struct
pt_regs
*
,
unsigned
long
,
int
);
/*
...
...
@@ -60,13 +54,10 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
unsigned
long
code
=
SEGV_MAPERR
;
unsigned
long
is_write
=
error_code
&
0x02000000
;
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_fault_handler
&&
(
regs
->
trap
==
0x300
||
regs
->
trap
==
0x380
))
{
debugger_fault_handler
(
regs
);
return
;
if
(
regs
->
trap
==
0x300
||
regs
->
trap
==
0x380
)
{
if
(
debugger_fault_handler
(
regs
))
return
;
}
#endif
/* On a kernel SLB miss we can only check for a valid exception entry */
if
(
!
user_mode
(
regs
)
&&
(
regs
->
trap
==
0x380
))
{
...
...
@@ -74,13 +65,10 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
return
;
}
#ifdef CONFIG_DEBUG_KERNEL
if
(
error_code
&
0x00400000
)
{
/* DABR match */
if
(
debugger_dabr_match
(
regs
))
return
;
}
#endif
if
(
in_atomic
()
||
mm
==
NULL
)
{
bad_page_fault
(
regs
,
address
,
SIGSEGV
);
...
...
@@ -149,11 +137,6 @@ void do_page_fault(struct pt_regs *regs, unsigned long address,
info
.
si_errno
=
0
;
info
.
si_code
=
code
;
info
.
si_addr
=
(
void
*
)
address
;
#ifdef CONFIG_XMON
ifppcdebug
(
PPCDBG_SIGNALXMON
)
PPCDBG_ENTER_DEBUGGER_REGS
(
regs
);
#endif
force_sig_info
(
SIGSEGV
,
&
info
,
current
);
return
;
}
...
...
@@ -207,9 +190,7 @@ bad_page_fault(struct pt_regs *regs, unsigned long address, int sig)
}
/* kernel has accessed a bad area */
#ifdef CONFIG_DEBUG_KERNEL
if
(
debugger_kernel_faults
&&
debugger
)
debugger
(
regs
);
#endif
if
(
debugger
(
regs
))
return
;
die
(
"Kernel access of bad area"
,
regs
,
sig
);
}
arch/ppc64/mm/init.c
View file @
8a81d818
...
...
@@ -59,6 +59,7 @@
#include <asm/cputable.h>
#include <asm/ppcdebug.h>
#include <asm/sections.h>
#include <asm/system.h>
#ifdef CONFIG_PPC_ISERIES
#include <asm/iSeries/iSeries_dma.h>
...
...
@@ -691,11 +692,7 @@ void __init do_init_bootmem(void)
bootmap_pages
=
bootmem_bootmap_pages
(
total_pages
);
start
=
(
unsigned
long
)
__a2p
(
lmb_alloc
(
bootmap_pages
<<
PAGE_SHIFT
,
PAGE_SIZE
));
if
(
start
==
0
)
{
udbg_printf
(
"do_init_bootmem: failed to allocate a bitmap.
\n
"
);
udbg_printf
(
"
\t
bootmap_pages = 0x%lx.
\n
"
,
bootmap_pages
);
PPCDBG_ENTER_DEBUGGER
();
}
BUG_ON
(
!
start
);
boot_mapsize
=
init_bootmem
(
start
>>
PAGE_SHIFT
,
total_pages
);
...
...
arch/ppc64/xmon/privinst.h
View file @
8a81d818
...
...
@@ -43,39 +43,12 @@ GSETSPR(274, sprg2)
GSETSPR
(
275
,
sprg3
)
GSETSPR
(
282
,
ear
)
GSETSPR
(
287
,
pvr
)
GSETSPR
(
528
,
bat0u
)
GSETSPR
(
529
,
bat0l
)
GSETSPR
(
530
,
bat1u
)
GSETSPR
(
531
,
bat1l
)
GSETSPR
(
532
,
bat2u
)
GSETSPR
(
533
,
bat2l
)
GSETSPR
(
534
,
bat3u
)
GSETSPR
(
535
,
bat3l
)
GSETSPR
(
1008
,
hid0
)
GSETSPR
(
1009
,
hid1
)
GSETSPR
(
1010
,
iabr
)
GSETSPR
(
1013
,
dabr
)
GSETSPR
(
1023
,
pir
)
static
inline
int
get_sr
(
int
n
)
{
int
ret
;
#if 0
// DRENG does not assemble
asm (" mfsrin %0,%1" : "=r" (ret) : "r" (n << 28));
#endif
return
ret
;
}
static
inline
void
set_sr
(
int
n
,
int
val
)
{
#if 0
// DRENG does not assemble
asm ("mtsrin %0,%1" : : "r" (val), "r" (n << 28));
#endif
}
static
inline
void
store_inst
(
void
*
p
)
{
asm
volatile
(
"dcbst 0,%0; sync; icbi 0,%0; isync"
:
:
"r"
(
p
));
...
...
@@ -90,4 +63,3 @@ static inline void cinval(void *p)
{
asm
volatile
(
"dcbi 0,%0; icbi 0,%0"
:
:
"r"
(
p
));
}
arch/ppc64/xmon/start.c
View file @
8a81d818
...
...
@@ -11,31 +11,23 @@
#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/sysrq.h>
#include <linux/init.h>
#include <asm/machdep.h>
#include <asm/io.h>
#include <asm/page.h>
#include <asm/prom.h>
#include <asm/processor.h>
#include <asm/udbg.h>
extern
void
xmon_printf
(
const
char
*
fmt
,
...);
#define TB_SPEED 25000000
static
inline
unsigned
int
readtb
(
void
)
{
unsigned
int
ret
;
asm
volatile
(
"mftb %0"
:
"=r"
(
ret
)
:
);
return
ret
;
}
#include <asm/system.h>
#ifdef CONFIG_MAGIC_SYSRQ
static
void
sysrq_handle_xmon
(
int
key
,
struct
pt_regs
*
pt_regs
,
struct
tty_struct
*
tty
)
{
xmon
(
pt_regs
);
/* ensure xmon is enabled */
xmon_init
();
debugger
(
pt_regs
);
}
static
struct
sysrq_key_op
sysrq_xmon_op
=
...
...
@@ -45,16 +37,13 @@ static struct sysrq_key_op sysrq_xmon_op =
.
action_msg
=
"Entering xmon
\n
"
,
};
#endif
/* CONFIG_MAGIC_SYSRQ */
void
xmon_map_scc
(
void
)
static
int
__init
setup_xmon_sysrq
(
void
)
{
#ifdef CONFIG_MAGIC_SYSRQ
/* This maybe isn't the best place to register sysrq 'x' */
__sysrq_put_key_op
(
'x'
,
&
sysrq_xmon_op
);
#endif
/* CONFIG_MAGIC_SYSRQ */
return
0
;
}
__initcall
(
setup_xmon_sysrq
);
#endif
/* CONFIG_MAGIC_SYSRQ */
int
xmon_write
(
void
*
handle
,
void
*
ptr
,
int
nb
)
...
...
@@ -62,8 +51,6 @@ xmon_write(void *handle, void *ptr, int nb)
return
udbg_write
(
ptr
,
nb
);
}
int
xmon_wants_key
;
int
xmon_read
(
void
*
handle
,
void
*
ptr
,
int
nb
)
{
...
...
@@ -80,11 +67,6 @@ void *xmon_stdin;
void
*
xmon_stdout
;
void
*
xmon_stderr
;
void
xmon_init
(
void
)
{
}
int
xmon_putc
(
int
c
,
void
*
f
)
{
...
...
arch/ppc64/xmon/xmon.c
View file @
8a81d818
This diff is collapsed.
Click to expand it.
include/asm-ppc64/ppcdebug.h
View file @
8a81d818
...
...
@@ -95,11 +95,6 @@ extern char *trace_names[64];
#define ppcdebugset(FLAGS) (udbg_ifdebug(FLAGS))
#define PPCDBG_BINFMT (test_thread_flag(TIF_32BIT) ? PPCDBG_BINFMT32 : PPCDBG_BINFMT64)
#ifdef CONFIG_XMON
#define PPCDBG_ENTER_DEBUGGER() xmon(0)
#define PPCDBG_ENTER_DEBUGGER_REGS(X) xmon(X)
#endif
#else
#define PPCDBG(...) do {;} while (0)
#define PPCDBGCALL(FLAGS,FUNCTION) do {;} while (0)
...
...
@@ -107,12 +102,4 @@ extern char *trace_names[64];
#define ppcdebugset(FLAGS) (0)
#endif
/* CONFIG_PPCDBG */
#ifndef PPCDBG_ENTER_DEBUGGER
#define PPCDBG_ENTER_DEBUGGER() do {;} while(0)
#endif
#ifndef PPCDBG_ENTER_DEBUGGER_REGS
#define PPCDBG_ENTER_DEBUGGER_REGS(A) do {;} while(0)
#endif
#endif
/*__PPCDEBUG_H */
include/asm-ppc64/smp.h
View file @
8a81d818
...
...
@@ -29,8 +29,7 @@
#ifdef CONFIG_SMP
extern
void
smp_message_pass
(
int
target
,
int
msg
,
unsigned
long
data
,
int
wait
);
extern
void
smp_send_tlb_invalidate
(
int
);
extern
void
smp_send_xmon_break
(
int
cpu
);
extern
void
smp_send_debugger_break
(
int
cpu
);
struct
pt_regs
;
extern
void
smp_message_recv
(
int
,
struct
pt_regs
*
);
...
...
@@ -63,17 +62,22 @@ extern cpumask_t cpu_available_map;
* in /proc/interrupts will be wrong!!! --Troy */
#define PPC_MSG_CALL_FUNCTION 0
#define PPC_MSG_RESCHEDULE 1
/* This is unused now */
#if 0
#define PPC_MSG_MIGRATE_TASK 2
#define PPC_MSG_XMON_BREAK 3
#endif
#define PPC_MSG_DEBUGGER_BREAK 3
void
smp_init_iSeries
(
void
);
void
smp_init_pSeries
(
void
);
#endif
/* !(CONFIG_SMP) */
#endif
/* __ASSEMBLY__ */
#define get_hard_smp_processor_id(CPU) (paca[(CPU)].xHwProcNum)
#define set_hard_smp_processor_id(CPU, VAL) do { (paca[(CPU)].xHwProcNum = VAL); } while (0)
#define set_hard_smp_processor_id(CPU, VAL) \
do { (paca[(CPU)].xHwProcNum = VAL); } while (0)
#endif
/* __ASSEMBLY__ */
#endif
/* !(_PPC64_SMP_H) */
#endif
/* __KERNEL__ */
include/asm-ppc64/system.h
View file @
8a81d818
...
...
@@ -9,6 +9,7 @@
*/
#include <linux/config.h>
#include <linux/compiler.h>
#include <asm/page.h>
#include <asm/processor.h>
#include <asm/hw_irq.h>
...
...
@@ -52,31 +53,41 @@
#define smp_read_barrier_depends() do { } while(0)
#endif
/* CONFIG_SMP */
#ifdef CONFIG_DEBUG_KERNEL
extern
void
(
*
debugger
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_bpt
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_sstep
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_iabr_match
)(
struct
pt_regs
*
regs
);
extern
int
(
*
debugger_dabr_match
)(
struct
pt_regs
*
regs
);
extern
void
(
*
debugger_fault_handler
)(
struct
pt_regs
*
regs
);
#ifdef CONFIG_DEBUGGER
extern
int
(
*
__debugger
)(
struct
pt_regs
*
regs
);
extern
int
(
*
__debugger_bpt
)(
struct
pt_regs
*
regs
);
extern
int
(
*
__debugger_sstep
)(
struct
pt_regs
*
regs
);
extern
int
(
*
__debugger_iabr_match
)(
struct
pt_regs
*
regs
);
extern
int
(
*
__debugger_dabr_match
)(
struct
pt_regs
*
regs
);
extern
int
(
*
__debugger_fault_handler
)(
struct
pt_regs
*
regs
);
#define DEBUGGER_BOILERPLATE(__NAME) \
static inline int __NAME(struct pt_regs *regs) \
{ \
if (unlikely(__ ## __NAME)) \
return __ ## __NAME(regs); \
return 0; \
}
DEBUGGER_BOILERPLATE
(
debugger
)
DEBUGGER_BOILERPLATE
(
debugger_bpt
)
DEBUGGER_BOILERPLATE
(
debugger_sstep
)
DEBUGGER_BOILERPLATE
(
debugger_iabr_match
)
DEBUGGER_BOILERPLATE
(
debugger_dabr_match
)
DEBUGGER_BOILERPLATE
(
debugger_fault_handler
)
#ifdef CONFIG_XMON
extern
void
xmon_init
(
void
);
#endif
#else
#define debugger(regs)
do { } while (0)
#define debugger(regs)
0
#define debugger_bpt(regs) 0
#define debugger_sstep(regs) 0
#define debugger_iabr_match(regs) 0
#define debugger_dabr_match(regs) 0
#define debugger_fault_handler ((void (*)(struct pt_regs *))0)
#endif
#ifdef CONFIG_XMON
extern
void
xmon_irq
(
int
,
void
*
,
struct
pt_regs
*
);
extern
void
xmon
(
struct
pt_regs
*
regs
);
extern
int
xmon_bpt
(
struct
pt_regs
*
regs
);
extern
int
xmon_sstep
(
struct
pt_regs
*
regs
);
extern
int
xmon_iabr_match
(
struct
pt_regs
*
regs
);
extern
int
xmon_dabr_match
(
struct
pt_regs
*
regs
);
extern
void
(
*
xmon_fault_handler
)(
struct
pt_regs
*
regs
);
#define debugger_fault_handler(regs) 0
#endif
extern
void
show_regs
(
struct
pt_regs
*
regs
);
...
...
include/asm-ppc64/xmon.h
deleted
100644 → 0
View file @
d5acfb1f
#ifndef __PPC_XMON_H
#define __PPC_XMON_H
#ifdef __KERNEL__
struct
pt_regs
;
extern
void
xmon
(
struct
pt_regs
*
excp
);
extern
void
xmon_printf
(
const
char
*
fmt
,
...);
extern
void
xmon_map_scc
(
void
);
extern
int
xmon_bpt
(
struct
pt_regs
*
regs
);
extern
int
xmon_sstep
(
struct
pt_regs
*
regs
);
extern
int
xmon_iabr_match
(
struct
pt_regs
*
regs
);
extern
int
xmon_dabr_match
(
struct
pt_regs
*
regs
);
extern
void
(
*
xmon_fault_handler
)(
struct
pt_regs
*
regs
);
#endif
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment