diff options
| author | David S. Miller <davem@kernel.bkbits.net> | 2003-06-22 05:08:56 -0700 |
|---|---|---|
| committer | David S. Miller <davem@kernel.bkbits.net> | 2003-06-22 05:08:56 -0700 |
| commit | c4d6625df333fe57052a3a71e89908c99489fa3f (patch) | |
| tree | 22fa0c885385cd7d016f8aec3c305d351c405d88 | |
| parent | d35d0b25f0a8a4868f60efd2e3973ce61d1bce03 (diff) | |
| parent | ab90088a09924965dfd01235c861d81eca8767fa (diff) | |
Merge davem@nuts.ninka.net:/home/davem/src/BK/sparc-2.5
into kernel.bkbits.net:/home/davem/sparc-2.5
| -rw-r--r-- | arch/sparc/kernel/process.c | 14 | ||||
| -rw-r--r-- | arch/sparc/kernel/systbls.S | 4 | ||||
| -rw-r--r-- | arch/sparc64/kernel/systbls.S | 11 | ||||
| -rw-r--r-- | arch/sparc64/kernel/traps.c | 15 | ||||
| -rw-r--r-- | arch/sparc64/mm/fault.c | 6 | ||||
| -rw-r--r-- | arch/sparc64/solaris/fs.c | 4 | ||||
| -rw-r--r-- | include/asm-sparc/unistd.h | 7 | ||||
| -rw-r--r-- | include/asm-sparc64/compat.h | 3 | ||||
| -rw-r--r-- | include/asm-sparc64/unistd.h | 9 |
9 files changed, 44 insertions, 29 deletions
diff --git a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c index 3608f9408eb8..7bb83864ab35 100644 --- a/arch/sparc/kernel/process.c +++ b/arch/sparc/kernel/process.c @@ -287,17 +287,14 @@ void show_regs(struct pt_regs *r) 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 task_base = (unsigned long) tsk; struct reg_window *rw; int count = 0; - if (!tsk) - return; - - fp = tsk->thread_info->ksp; + fp = (unsigned long) _ksp; do { /* Bogus frame pointer? */ if (fp < (task_base + sizeof(struct task_struct)) || @@ -311,6 +308,13 @@ void show_trace_task(struct task_struct *tsk) 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. */ diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S index fcacc76720a0..274178e2c7d8 100644 --- a/arch/sparc/kernel/systbls.S +++ b/arch/sparc/kernel/systbls.S @@ -64,9 +64,9 @@ sys_call_table: /*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 /*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!!" */ -/*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 /*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 diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index ce2d74694d53..371c042a2e8d 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S @@ -65,8 +65,8 @@ sys_call_table32: .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 .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 - .word sys_ni_syscall, sys_llseek, sys_mlock, sys_munlock, sys_mlockall +/*230*/ .word sys32_select, sys_time, sys_nis_syscall, sys_stime, sys_statfs64 + .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 .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 @@ -124,11 +124,8 @@ sys_call_table: .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 .word sys_bdflush, sys_sysfs, sys_nis_syscall, sys_setfsuid, sys_setfsgid - - /* 234 and 235 were for the hugetlb syscalls. They can be reused */ - -/*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 +/*230*/ .word sys_select, sys_nis_syscall, sys_nis_syscall, sys_stime, sys_statfs64 + .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 .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 diff --git a/arch/sparc64/kernel/traps.c b/arch/sparc64/kernel/traps.c index 1a90f437d5a6..bfeedd653c24 100644 --- a/arch/sparc64/kernel/traps.c +++ b/arch/sparc64/kernel/traps.c @@ -1569,12 +1569,15 @@ void user_instruction_dump (unsigned int *pc) 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; int count = 0; + ksp = (unsigned long) _ksp; + if (tp == current_thread_info()) flushw_all(); @@ -1596,17 +1599,17 @@ void show_trace_raw(struct thread_info *tp, unsigned long ksp) void show_trace_task(struct task_struct *tsk) { if (tsk) - show_trace_raw(tsk->thread_info, - tsk->thread_info->ksp); + show_stack(tsk, + (unsigned long *) tsk->thread_info->ksp); } void dump_stack(void) { - unsigned long ksp; + unsigned long *ksp; __asm__ __volatile__("mov %%fp, %0" : "=r" (ksp)); - show_trace_raw(current_thread_info(), ksp); + show_stack(current, ksp); } void die_if_kernel(char *str, struct pt_regs *regs) diff --git a/arch/sparc64/mm/fault.c b/arch/sparc64/mm/fault.c index 5c4a56023668..e0a9cc52b831 100644 --- a/arch/sparc64/mm/fault.c +++ b/arch/sparc64/mm/fault.c @@ -149,16 +149,14 @@ static void unhandled_fault(unsigned long address, struct task_struct *tsk, die_if_kernel("Oops", regs); } -extern void show_trace_raw(struct thread_info *, unsigned long); - 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", regs->tpc); __asm__("mov %%sp, %0" : "=r" (ksp)); - show_trace_raw(current_thread_info(), ksp); + show_stack(current, ksp); unhandled_fault(regs->tpc, current, regs); } diff --git a/arch/sparc64/solaris/fs.c b/arch/sparc64/solaris/fs.c index b20061522f93..5182d6573c16 100644 --- a/arch/sparc64/solaris/fs.c +++ b/arch/sparc64/solaris/fs.c @@ -390,7 +390,7 @@ struct sol_statvfs64 { static int report_statvfs(struct vfsmount *mnt, struct inode *inode, u32 buf) { - struct statfs s; + struct kstatfs s; int error; 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) static int report_statvfs64(struct vfsmount *mnt, struct inode *inode, u32 buf) { - struct statfs s; + struct kstatfs s; int error; struct sol_statvfs64 *ss = (struct sol_statvfs64 *)A(buf); diff --git a/include/asm-sparc/unistd.h b/include/asm-sparc/unistd.h index b778e356823c..7924bcee54c2 100644 --- a/include/asm-sparc/unistd.h +++ b/include/asm-sparc/unistd.h @@ -250,6 +250,8 @@ #define __NR_time 231 /* Linux Specific */ /* #define __NR_oldstat 232 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_mlock 237 #define __NR_munlock 238 @@ -270,6 +272,11 @@ #define __NR_fdatasync 253 #define __NR_nfsservctl 254 #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) \ type name(void) \ diff --git a/include/asm-sparc64/compat.h b/include/asm-sparc64/compat.h index 19fe2635d188..02af9130ad1d 100644 --- a/include/asm-sparc64/compat.h +++ b/include/asm-sparc64/compat.h @@ -92,7 +92,8 @@ struct compat_statfs { int f_ffree; compat_fsid_t f_fsid; int f_namelen; /* SunOS ignores this field. */ - int f_spare[6]; + int f_frsize; + int f_spare[5]; }; #define COMPAT_RLIM_INFINITY 0x7fffffff diff --git a/include/asm-sparc64/unistd.h b/include/asm-sparc64/unistd.h index 33808908dfa9..c16067e9b7c3 100644 --- a/include/asm-sparc64/unistd.h +++ b/include/asm-sparc64/unistd.h @@ -252,8 +252,8 @@ #endif /* #define __NR_oldstat 232 Linux Specific */ #define __NR_stime 233 /* Linux Specific */ -/* #define __NR_UNUSED 234 */ -/* #define __NR_UNUSED 235 */ +#define __NR_statfs64 234 /* Linux Specific */ +#define __NR_fstatfs64 235 /* Linux Specific */ #define __NR__llseek 236 /* Linux Specific */ #define __NR_mlock 237 #define __NR_munlock 238 @@ -274,6 +274,11 @@ #define __NR_fdatasync 253 #define __NR_nfsservctl 254 #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) \ type name(void) \ |
