summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid S. Miller <davem@kernel.bkbits.net>2003-06-22 05:08:56 -0700
committerDavid S. Miller <davem@kernel.bkbits.net>2003-06-22 05:08:56 -0700
commitc4d6625df333fe57052a3a71e89908c99489fa3f (patch)
tree22fa0c885385cd7d016f8aec3c305d351c405d88
parentd35d0b25f0a8a4868f60efd2e3973ce61d1bce03 (diff)
parentab90088a09924965dfd01235c861d81eca8767fa (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.c14
-rw-r--r--arch/sparc/kernel/systbls.S4
-rw-r--r--arch/sparc64/kernel/systbls.S11
-rw-r--r--arch/sparc64/kernel/traps.c15
-rw-r--r--arch/sparc64/mm/fault.c6
-rw-r--r--arch/sparc64/solaris/fs.c4
-rw-r--r--include/asm-sparc/unistd.h7
-rw-r--r--include/asm-sparc64/compat.h3
-rw-r--r--include/asm-sparc64/unistd.h9
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) \