Commit c4d6625d authored by David S. Miller's avatar David S. Miller

Merge davem@nuts.ninka.net:/home/davem/src/BK/sparc-2.5

into kernel.bkbits.net:/home/davem/sparc-2.5
parents d35d0b25 ab90088a
...@@ -287,17 +287,14 @@ void show_regs(struct pt_regs *r) ...@@ -287,17 +287,14 @@ void show_regs(struct pt_regs *r)
rw->ins[4], rw->ins[5], rw->ins[6], rw->ins[7]); rw->ins[4], rw->ins[5], rw->ins[6], rw->ins[7]);
} }
void show_trace_task(struct task_struct *tsk) void show_stack(struct task_struct *tsk, unsigned long *_ksp)
{ {
unsigned long pc, fp; unsigned long pc, fp;
unsigned long task_base = (unsigned long) tsk; unsigned long task_base = (unsigned long) tsk;
struct reg_window *rw; struct reg_window *rw;
int count = 0; int count = 0;
if (!tsk) fp = (unsigned long) _ksp;
return;
fp = tsk->thread_info->ksp;
do { do {
/* Bogus frame pointer? */ /* Bogus frame pointer? */
if (fp < (task_base + sizeof(struct task_struct)) || if (fp < (task_base + sizeof(struct task_struct)) ||
...@@ -311,6 +308,13 @@ void show_trace_task(struct task_struct *tsk) ...@@ -311,6 +308,13 @@ void show_trace_task(struct task_struct *tsk)
printk("\n"); printk("\n");
} }
void show_trace_task(struct task_struct *tsk)
{
if (tsk)
show_stack(tsk,
(unsigned long *) tsk->thread_info->ksp);
}
/* /*
* Note: sparc64 has a pretty intricated thread_saved_pc, check it out. * Note: sparc64 has a pretty intricated thread_saved_pc, check it out.
*/ */
......
...@@ -64,9 +64,9 @@ sys_call_table: ...@@ -64,9 +64,9 @@ sys_call_table:
/*215*/ .long sys_ipc, sys_sigreturn, sys_clone, sys_nis_syscall, sys_adjtimex /*215*/ .long sys_ipc, sys_sigreturn, sys_clone, sys_nis_syscall, sys_adjtimex
/*220*/ .long sys_sigprocmask, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid /*220*/ .long sys_sigprocmask, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid
/*225*/ .long sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid16, sys_setfsgid16 /*225*/ .long sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid16, sys_setfsgid16
/*230*/ .long sys_select, sys_time, sys_nis_syscall, sys_stime, sys_nis_syscall /*230*/ .long sys_select, sys_time, sys_nis_syscall, sys_stime, sys_statfs64
/* "We are the Knights of the Forest of Ni!!" */ /* "We are the Knights of the Forest of Ni!!" */
/*235*/ .long sys_nis_syscall, sys_llseek, sys_mlock, sys_munlock, sys_mlockall /*235*/ .long sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
/*240*/ .long sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler /*240*/ .long sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
/*245*/ .long sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep /*245*/ .long sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep
/*250*/ .long sparc_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl /*250*/ .long sparc_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
......
...@@ -65,8 +65,8 @@ sys_call_table32: ...@@ -65,8 +65,8 @@ sys_call_table32:
.word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex .word sys32_ipc, sys32_sigreturn, sys_clone, sys_nis_syscall, sys32_adjtimex
/*220*/ .word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid /*220*/ .word compat_sys_sigprocmask, sys_ni_syscall, sys32_delete_module, sys_ni_syscall, sys_getpgid
.word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16 .word sys32_bdflush, sys32_sysfs, sys_nis_syscall, sys32_setfsuid16, sys32_setfsgid16
/*230*/ .word sys32_select, sys_time, sys_nis_syscall, sys_stime, sys_ni_syscall /*230*/ .word sys32_select, sys_time, sys_nis_syscall, sys_stime, sys_statfs64
.word sys_ni_syscall, sys_llseek, sys_mlock, sys_munlock, sys_mlockall .word sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
/*240*/ .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler /*240*/ .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep .word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys32_sched_rr_get_interval, compat_sys_nanosleep
/*250*/ .word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl /*250*/ .word sys32_mremap, sys32_sysctl, sys_getsid, sys_fdatasync, sys32_nfsservctl
...@@ -124,11 +124,8 @@ sys_call_table: ...@@ -124,11 +124,8 @@ sys_call_table:
.word sys_ipc, sys_nis_syscall, sys_clone, sys_nis_syscall, sys_adjtimex .word sys_ipc, sys_nis_syscall, sys_clone, sys_nis_syscall, sys_adjtimex
/*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid /*220*/ .word sys_nis_syscall, sys_ni_syscall, sys_delete_module, sys_ni_syscall, sys_getpgid
.word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid
/*230*/ .word sys_select, sys_nis_syscall, sys_nis_syscall, sys_stime, sys_statfs64
/* 234 and 235 were for the hugetlb syscalls. They can be reused */ .word sys_fstatfs64, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
/*230*/ .word sys_select, sys_nis_syscall, sys_nis_syscall, sys_stime, sys_nis_syscall
.word sys_nis_syscall, sys_llseek, sys_mlock, sys_munlock, sys_mlockall
/*240*/ .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler /*240*/ .word sys_munlockall, sys_sched_setparam, sys_sched_getparam, sys_sched_setscheduler, sys_sched_getscheduler
.word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep .word sys_sched_yield, sys_sched_get_priority_max, sys_sched_get_priority_min, sys_sched_rr_get_interval, sys_nanosleep
/*250*/ .word sys64_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl /*250*/ .word sys64_mremap, sys_sysctl, sys_getsid, sys_fdatasync, sys_nfsservctl
......
...@@ -1569,12 +1569,15 @@ void user_instruction_dump (unsigned int *pc) ...@@ -1569,12 +1569,15 @@ void user_instruction_dump (unsigned int *pc)
printk("\n"); printk("\n");
} }
void show_trace_raw(struct thread_info *tp, unsigned long ksp) void show_stack(struct task_struct *tsk, unsigned long *_ksp)
{ {
unsigned long pc, fp, thread_base; unsigned long pc, fp, thread_base, ksp;
struct thread_info *tp = tsk->thread_info;
struct reg_window *rw; struct reg_window *rw;
int count = 0; int count = 0;
ksp = (unsigned long) _ksp;
if (tp == current_thread_info()) if (tp == current_thread_info())
flushw_all(); flushw_all();
...@@ -1596,17 +1599,17 @@ void show_trace_raw(struct thread_info *tp, unsigned long ksp) ...@@ -1596,17 +1599,17 @@ void show_trace_raw(struct thread_info *tp, unsigned long ksp)
void show_trace_task(struct task_struct *tsk) void show_trace_task(struct task_struct *tsk)
{ {
if (tsk) if (tsk)
show_trace_raw(tsk->thread_info, show_stack(tsk,
tsk->thread_info->ksp); (unsigned long *) tsk->thread_info->ksp);
} }
void dump_stack(void) void dump_stack(void)
{ {
unsigned long ksp; unsigned long *ksp;
__asm__ __volatile__("mov %%fp, %0" __asm__ __volatile__("mov %%fp, %0"
: "=r" (ksp)); : "=r" (ksp));
show_trace_raw(current_thread_info(), ksp); show_stack(current, ksp);
} }
void die_if_kernel(char *str, struct pt_regs *regs) void die_if_kernel(char *str, struct pt_regs *regs)
......
...@@ -149,16 +149,14 @@ static void unhandled_fault(unsigned long address, struct task_struct *tsk, ...@@ -149,16 +149,14 @@ static void unhandled_fault(unsigned long address, struct task_struct *tsk,
die_if_kernel("Oops", regs); die_if_kernel("Oops", regs);
} }
extern void show_trace_raw(struct thread_info *, unsigned long);
static void bad_kernel_pc(struct pt_regs *regs) static void bad_kernel_pc(struct pt_regs *regs)
{ {
unsigned long ksp; unsigned long *ksp;
printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n", printk(KERN_CRIT "OOPS: Bogus kernel PC [%016lx] in fault handler\n",
regs->tpc); regs->tpc);
__asm__("mov %%sp, %0" : "=r" (ksp)); __asm__("mov %%sp, %0" : "=r" (ksp));
show_trace_raw(current_thread_info(), ksp); show_stack(current, ksp);
unhandled_fault(regs->tpc, current, regs); unhandled_fault(regs->tpc, current, regs);
} }
......
...@@ -390,7 +390,7 @@ struct sol_statvfs64 { ...@@ -390,7 +390,7 @@ struct sol_statvfs64 {
static int report_statvfs(struct vfsmount *mnt, struct inode *inode, u32 buf) static int report_statvfs(struct vfsmount *mnt, struct inode *inode, u32 buf)
{ {
struct statfs s; struct kstatfs s;
int error; int error;
struct sol_statvfs *ss = (struct sol_statvfs *)A(buf); struct sol_statvfs *ss = (struct sol_statvfs *)A(buf);
...@@ -424,7 +424,7 @@ static int report_statvfs(struct vfsmount *mnt, struct inode *inode, u32 buf) ...@@ -424,7 +424,7 @@ static int report_statvfs(struct vfsmount *mnt, struct inode *inode, u32 buf)
static int report_statvfs64(struct vfsmount *mnt, struct inode *inode, u32 buf) static int report_statvfs64(struct vfsmount *mnt, struct inode *inode, u32 buf)
{ {
struct statfs s; struct kstatfs s;
int error; int error;
struct sol_statvfs64 *ss = (struct sol_statvfs64 *)A(buf); struct sol_statvfs64 *ss = (struct sol_statvfs64 *)A(buf);
......
...@@ -250,6 +250,8 @@ ...@@ -250,6 +250,8 @@
#define __NR_time 231 /* Linux Specific */ #define __NR_time 231 /* Linux Specific */
/* #define __NR_oldstat 232 Linux Specific */ /* #define __NR_oldstat 232 Linux Specific */
#define __NR_stime 233 /* Linux Specific */ #define __NR_stime 233 /* Linux Specific */
#define __NR_statfs64 234 /* Linux Specific */
#define __NR_fstatfs64 235 /* Linux Specific */
#define __NR__llseek 236 /* Linux Specific */ #define __NR__llseek 236 /* Linux Specific */
#define __NR_mlock 237 #define __NR_mlock 237
#define __NR_munlock 238 #define __NR_munlock 238
...@@ -270,6 +272,11 @@ ...@@ -270,6 +272,11 @@
#define __NR_fdatasync 253 #define __NR_fdatasync 253
#define __NR_nfsservctl 254 #define __NR_nfsservctl 254
#define __NR_aplib 255 #define __NR_aplib 255
/* WARNING: You MAY NOT add syscall numbers larger than 255, since
* all of the syscall tables in the Sparc kernel are
* sized to have 256 entries (starting at zero). Therefore
* find a free slot in the 0-255 range.
*/
#define _syscall0(type,name) \ #define _syscall0(type,name) \
type name(void) \ type name(void) \
......
...@@ -92,7 +92,8 @@ struct compat_statfs { ...@@ -92,7 +92,8 @@ struct compat_statfs {
int f_ffree; int f_ffree;
compat_fsid_t f_fsid; compat_fsid_t f_fsid;
int f_namelen; /* SunOS ignores this field. */ int f_namelen; /* SunOS ignores this field. */
int f_spare[6]; int f_frsize;
int f_spare[5];
}; };
#define COMPAT_RLIM_INFINITY 0x7fffffff #define COMPAT_RLIM_INFINITY 0x7fffffff
......
...@@ -252,8 +252,8 @@ ...@@ -252,8 +252,8 @@
#endif #endif
/* #define __NR_oldstat 232 Linux Specific */ /* #define __NR_oldstat 232 Linux Specific */
#define __NR_stime 233 /* Linux Specific */ #define __NR_stime 233 /* Linux Specific */
/* #define __NR_UNUSED 234 */ #define __NR_statfs64 234 /* Linux Specific */
/* #define __NR_UNUSED 235 */ #define __NR_fstatfs64 235 /* Linux Specific */
#define __NR__llseek 236 /* Linux Specific */ #define __NR__llseek 236 /* Linux Specific */
#define __NR_mlock 237 #define __NR_mlock 237
#define __NR_munlock 238 #define __NR_munlock 238
...@@ -274,6 +274,11 @@ ...@@ -274,6 +274,11 @@
#define __NR_fdatasync 253 #define __NR_fdatasync 253
#define __NR_nfsservctl 254 #define __NR_nfsservctl 254
#define __NR_aplib 255 #define __NR_aplib 255
/* WARNING: You MAY NOT add syscall numbers larger than 255, since
* all of the syscall tables in the Sparc64 kernel are
* sized to have 256 entries (starting at zero). Therefore
* find a free slot in the 0-255 range.
*/
#define _syscall0(type,name) \ #define _syscall0(type,name) \
type name(void) \ type name(void) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment