diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-05 21:45:06 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-05 21:45:06 -0500 |
commit | 7a1fcd5f5130f173b5e824135735ec58f245563e (patch) | |
tree | fc21e9f5592ef58a5d98a4bf1ccd6f44010cbca3 /arch/sparc/kernel | |
parent | 15b0669072127f282896b3bef2e9df4ec5d7264f (diff) | |
parent | 4696b64d234b84b5b70ffd49a76833aa5c49cb61 (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6: (30 commits)
sparc: Fix minor SPARC32 compile error
sparc: Remove reg*.h from Kbuild
sparc: Clean arch-specific code in prom_common.c
sparc: Kill asm/reg*.h
sparc: Use 64BIT config entry
MAINTAINERS: update sparc maintainer
sparc: unify ipcbuf.h
sparc: Update 64-bit defconfig.
sparc: remove NO_PROC_ID - it is no longer used
sparc: drop get_tbr() in traps.h
sparc: fix warning in userspace header traps.h
sparc: fix warnings in userspace header byteorder.h
sparc: fix warning in userspace header jsflash.h
sparc: unify openprom.h
sparc64: delete unused linux_prom64_ranges from openprom_64.h
sparc: prepare openprom for unification
sparc: remove linux_prom_pci_assigned_addresses from openprom_32.h
sparc: remove ebus definitions from openprom*.h
sparc: unify siginfo.h
sparc: unify ptrace.h
...
Diffstat (limited to 'arch/sparc/kernel')
-rw-r--r-- | arch/sparc/kernel/irq_32.c | 2 | ||||
-rw-r--r-- | arch/sparc/kernel/kgdb_32.c | 12 | ||||
-rw-r--r-- | arch/sparc/kernel/muldiv.c | 8 | ||||
-rw-r--r-- | arch/sparc/kernel/pci_psycho.c | 5 | ||||
-rw-r--r-- | arch/sparc/kernel/process_32.c | 16 | ||||
-rw-r--r-- | arch/sparc/kernel/prom_common.c | 14 | ||||
-rw-r--r-- | arch/sparc/kernel/signal_32.c | 6 | ||||
-rw-r--r-- | arch/sparc/kernel/traps_32.c | 4 | ||||
-rw-r--r-- | arch/sparc/kernel/unaligned_32.c | 12 | ||||
-rw-r--r-- | arch/sparc/kernel/windows.c | 6 |
10 files changed, 38 insertions, 47 deletions
diff --git a/arch/sparc/kernel/irq_32.c b/arch/sparc/kernel/irq_32.c index f3488c45d57a..1eff942fe22f 100644 --- a/arch/sparc/kernel/irq_32.c +++ b/arch/sparc/kernel/irq_32.c | |||
@@ -669,7 +669,9 @@ void __init init_IRQ(void) | |||
669 | btfixup(); | 669 | btfixup(); |
670 | } | 670 | } |
671 | 671 | ||
672 | #ifdef CONFIG_PROC_FS | ||
672 | void init_irq_proc(void) | 673 | void init_irq_proc(void) |
673 | { | 674 | { |
674 | /* For now, nothing... */ | 675 | /* For now, nothing... */ |
675 | } | 676 | } |
677 | #endif /* CONFIG_PROC_FS */ | ||
diff --git a/arch/sparc/kernel/kgdb_32.c b/arch/sparc/kernel/kgdb_32.c index 757805ce02ee..04df4edc0073 100644 --- a/arch/sparc/kernel/kgdb_32.c +++ b/arch/sparc/kernel/kgdb_32.c | |||
@@ -14,14 +14,14 @@ extern unsigned long trapbase; | |||
14 | 14 | ||
15 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 15 | void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
16 | { | 16 | { |
17 | struct reg_window *win; | 17 | struct reg_window32 *win; |
18 | int i; | 18 | int i; |
19 | 19 | ||
20 | gdb_regs[GDB_G0] = 0; | 20 | gdb_regs[GDB_G0] = 0; |
21 | for (i = 0; i < 15; i++) | 21 | for (i = 0; i < 15; i++) |
22 | gdb_regs[GDB_G1 + i] = regs->u_regs[UREG_G1 + i]; | 22 | gdb_regs[GDB_G1 + i] = regs->u_regs[UREG_G1 + i]; |
23 | 23 | ||
24 | win = (struct reg_window *) regs->u_regs[UREG_FP]; | 24 | win = (struct reg_window32 *) regs->u_regs[UREG_FP]; |
25 | for (i = 0; i < 8; i++) | 25 | for (i = 0; i < 8; i++) |
26 | gdb_regs[GDB_L0 + i] = win->locals[i]; | 26 | gdb_regs[GDB_L0 + i] = win->locals[i]; |
27 | for (i = 0; i < 8; i++) | 27 | for (i = 0; i < 8; i++) |
@@ -43,7 +43,7 @@ void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
43 | void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | 43 | void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) |
44 | { | 44 | { |
45 | struct thread_info *t = task_thread_info(p); | 45 | struct thread_info *t = task_thread_info(p); |
46 | struct reg_window *win; | 46 | struct reg_window32 *win; |
47 | int i; | 47 | int i; |
48 | 48 | ||
49 | for (i = GDB_G0; i < GDB_G6; i++) | 49 | for (i = GDB_G0; i < GDB_G6; i++) |
@@ -55,7 +55,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | |||
55 | gdb_regs[GDB_SP] = t->ksp; | 55 | gdb_regs[GDB_SP] = t->ksp; |
56 | gdb_regs[GDB_O7] = 0; | 56 | gdb_regs[GDB_O7] = 0; |
57 | 57 | ||
58 | win = (struct reg_window *) t->ksp; | 58 | win = (struct reg_window32 *) t->ksp; |
59 | for (i = 0; i < 8; i++) | 59 | for (i = 0; i < 8; i++) |
60 | gdb_regs[GDB_L0 + i] = win->locals[i]; | 60 | gdb_regs[GDB_L0 + i] = win->locals[i]; |
61 | for (i = 0; i < 8; i++) | 61 | for (i = 0; i < 8; i++) |
@@ -77,7 +77,7 @@ void sleeping_thread_to_gdb_regs(unsigned long *gdb_regs, struct task_struct *p) | |||
77 | 77 | ||
78 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | 78 | void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) |
79 | { | 79 | { |
80 | struct reg_window *win; | 80 | struct reg_window32 *win; |
81 | int i; | 81 | int i; |
82 | 82 | ||
83 | for (i = 0; i < 15; i++) | 83 | for (i = 0; i < 15; i++) |
@@ -96,7 +96,7 @@ void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *regs) | |||
96 | regs->npc = gdb_regs[GDB_NPC]; | 96 | regs->npc = gdb_regs[GDB_NPC]; |
97 | regs->y = gdb_regs[GDB_Y]; | 97 | regs->y = gdb_regs[GDB_Y]; |
98 | 98 | ||
99 | win = (struct reg_window *) regs->u_regs[UREG_FP]; | 99 | win = (struct reg_window32 *) regs->u_regs[UREG_FP]; |
100 | for (i = 0; i < 8; i++) | 100 | for (i = 0; i < 8; i++) |
101 | win->locals[i] = gdb_regs[GDB_L0 + i]; | 101 | win->locals[i] = gdb_regs[GDB_L0 + i]; |
102 | for (i = 0; i < 8; i++) | 102 | for (i = 0; i < 8; i++) |
diff --git a/arch/sparc/kernel/muldiv.c b/arch/sparc/kernel/muldiv.c index ba960c02bb55..6ce1021d487c 100644 --- a/arch/sparc/kernel/muldiv.c +++ b/arch/sparc/kernel/muldiv.c | |||
@@ -60,7 +60,7 @@ static inline void maybe_flush_windows(unsigned int rs1, unsigned int rs2, | |||
60 | } | 60 | } |
61 | 61 | ||
62 | #define fetch_reg(reg, regs) ({ \ | 62 | #define fetch_reg(reg, regs) ({ \ |
63 | struct reg_window __user *win; \ | 63 | struct reg_window32 __user *win; \ |
64 | register unsigned long ret; \ | 64 | register unsigned long ret; \ |
65 | \ | 65 | \ |
66 | if (!(reg)) ret = 0; \ | 66 | if (!(reg)) ret = 0; \ |
@@ -68,7 +68,7 @@ static inline void maybe_flush_windows(unsigned int rs1, unsigned int rs2, | |||
68 | ret = regs->u_regs[(reg)]; \ | 68 | ret = regs->u_regs[(reg)]; \ |
69 | } else { \ | 69 | } else { \ |
70 | /* Ho hum, the slightly complicated case. */ \ | 70 | /* Ho hum, the slightly complicated case. */ \ |
71 | win = (struct reg_window __user *)regs->u_regs[UREG_FP];\ | 71 | win = (struct reg_window32 __user *)regs->u_regs[UREG_FP];\ |
72 | if (get_user (ret, &win->locals[(reg) - 16])) return -1;\ | 72 | if (get_user (ret, &win->locals[(reg) - 16])) return -1;\ |
73 | } \ | 73 | } \ |
74 | ret; \ | 74 | ret; \ |
@@ -77,7 +77,7 @@ static inline void maybe_flush_windows(unsigned int rs1, unsigned int rs2, | |||
77 | static inline int | 77 | static inline int |
78 | store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs) | 78 | store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs) |
79 | { | 79 | { |
80 | struct reg_window __user *win; | 80 | struct reg_window32 __user *win; |
81 | 81 | ||
82 | if (!reg) | 82 | if (!reg) |
83 | return 0; | 83 | return 0; |
@@ -86,7 +86,7 @@ store_reg(unsigned int result, unsigned int reg, struct pt_regs *regs) | |||
86 | return 0; | 86 | return 0; |
87 | } else { | 87 | } else { |
88 | /* need to use put_user() in this case: */ | 88 | /* need to use put_user() in this case: */ |
89 | win = (struct reg_window __user *) regs->u_regs[UREG_FP]; | 89 | win = (struct reg_window32 __user *) regs->u_regs[UREG_FP]; |
90 | return (put_user(result, &win->locals[reg - 16])); | 90 | return (put_user(result, &win->locals[reg - 16])); |
91 | } | 91 | } |
92 | } | 92 | } |
diff --git a/arch/sparc/kernel/pci_psycho.c b/arch/sparc/kernel/pci_psycho.c index dfb3ec892987..3b34344082ef 100644 --- a/arch/sparc/kernel/pci_psycho.c +++ b/arch/sparc/kernel/pci_psycho.c | |||
@@ -307,10 +307,7 @@ static void psycho_register_error_handlers(struct pci_pbm_info *pbm) | |||
307 | 307 | ||
308 | /* We really mean to ignore the return result here. Two | 308 | /* We really mean to ignore the return result here. Two |
309 | * PCI controller share the same interrupt numbers and | 309 | * PCI controller share the same interrupt numbers and |
310 | * drive the same front-end hardware. Whichever of the | 310 | * drive the same front-end hardware. |
311 | * two get in here first will register the IRQ handler | ||
312 | * the second will just error out since we do not pass in | ||
313 | * IRQF_SHARED. | ||
314 | */ | 311 | */ |
315 | err = request_irq(op->irqs[1], psycho_ue_intr, IRQF_SHARED, | 312 | err = request_irq(op->irqs[1], psycho_ue_intr, IRQF_SHARED, |
316 | "PSYCHO_UE", pbm); | 313 | "PSYCHO_UE", pbm); |
diff --git a/arch/sparc/kernel/process_32.c b/arch/sparc/kernel/process_32.c index 69d9315f4a93..5a8d8ced33da 100644 --- a/arch/sparc/kernel/process_32.c +++ b/arch/sparc/kernel/process_32.c | |||
@@ -180,13 +180,13 @@ static DEFINE_SPINLOCK(sparc_backtrace_lock); | |||
180 | 180 | ||
181 | void __show_backtrace(unsigned long fp) | 181 | void __show_backtrace(unsigned long fp) |
182 | { | 182 | { |
183 | struct reg_window *rw; | 183 | struct reg_window32 *rw; |
184 | unsigned long flags; | 184 | unsigned long flags; |
185 | int cpu = smp_processor_id(); | 185 | int cpu = smp_processor_id(); |
186 | 186 | ||
187 | spin_lock_irqsave(&sparc_backtrace_lock, flags); | 187 | spin_lock_irqsave(&sparc_backtrace_lock, flags); |
188 | 188 | ||
189 | rw = (struct reg_window *)fp; | 189 | rw = (struct reg_window32 *)fp; |
190 | while(rw && (((unsigned long) rw) >= PAGE_OFFSET) && | 190 | while(rw && (((unsigned long) rw) >= PAGE_OFFSET) && |
191 | !(((unsigned long) rw) & 0x7)) { | 191 | !(((unsigned long) rw) & 0x7)) { |
192 | printk("CPU[%d]: ARGS[%08lx,%08lx,%08lx,%08lx,%08lx,%08lx] " | 192 | printk("CPU[%d]: ARGS[%08lx,%08lx,%08lx,%08lx,%08lx,%08lx] " |
@@ -196,7 +196,7 @@ void __show_backtrace(unsigned long fp) | |||
196 | rw->ins[6], | 196 | rw->ins[6], |
197 | rw->ins[7]); | 197 | rw->ins[7]); |
198 | printk("%pS\n", (void *) rw->ins[7]); | 198 | printk("%pS\n", (void *) rw->ins[7]); |
199 | rw = (struct reg_window *) rw->ins[6]; | 199 | rw = (struct reg_window32 *) rw->ins[6]; |
200 | } | 200 | } |
201 | spin_unlock_irqrestore(&sparc_backtrace_lock, flags); | 201 | spin_unlock_irqrestore(&sparc_backtrace_lock, flags); |
202 | } | 202 | } |
@@ -258,7 +258,7 @@ void show_stackframe(struct sparc_stackf *sf) | |||
258 | 258 | ||
259 | void show_regs(struct pt_regs *r) | 259 | void show_regs(struct pt_regs *r) |
260 | { | 260 | { |
261 | struct reg_window *rw = (struct reg_window *) r->u_regs[14]; | 261 | struct reg_window32 *rw = (struct reg_window32 *) r->u_regs[14]; |
262 | 262 | ||
263 | printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", | 263 | printk("PSR: %08lx PC: %08lx NPC: %08lx Y: %08lx %s\n", |
264 | r->psr, r->pc, r->npc, r->y, print_tainted()); | 264 | r->psr, r->pc, r->npc, r->y, print_tainted()); |
@@ -287,7 +287,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp) | |||
287 | { | 287 | { |
288 | unsigned long pc, fp; | 288 | unsigned long pc, fp; |
289 | unsigned long task_base; | 289 | unsigned long task_base; |
290 | struct reg_window *rw; | 290 | struct reg_window32 *rw; |
291 | int count = 0; | 291 | int count = 0; |
292 | 292 | ||
293 | if (tsk != NULL) | 293 | if (tsk != NULL) |
@@ -301,7 +301,7 @@ void show_stack(struct task_struct *tsk, unsigned long *_ksp) | |||
301 | if (fp < (task_base + sizeof(struct thread_info)) || | 301 | if (fp < (task_base + sizeof(struct thread_info)) || |
302 | fp >= (task_base + (PAGE_SIZE << 1))) | 302 | fp >= (task_base + (PAGE_SIZE << 1))) |
303 | break; | 303 | break; |
304 | rw = (struct reg_window *) fp; | 304 | rw = (struct reg_window32 *) fp; |
305 | pc = rw->ins[7]; | 305 | pc = rw->ins[7]; |
306 | printk("[%08lx : ", pc); | 306 | printk("[%08lx : ", pc); |
307 | printk("%pS ] ", (void *) pc); | 307 | printk("%pS ] ", (void *) pc); |
@@ -679,7 +679,7 @@ unsigned long get_wchan(struct task_struct *task) | |||
679 | unsigned long pc, fp, bias = 0; | 679 | unsigned long pc, fp, bias = 0; |
680 | unsigned long task_base = (unsigned long) task; | 680 | unsigned long task_base = (unsigned long) task; |
681 | unsigned long ret = 0; | 681 | unsigned long ret = 0; |
682 | struct reg_window *rw; | 682 | struct reg_window32 *rw; |
683 | int count = 0; | 683 | int count = 0; |
684 | 684 | ||
685 | if (!task || task == current || | 685 | if (!task || task == current || |
@@ -692,7 +692,7 @@ unsigned long get_wchan(struct task_struct *task) | |||
692 | if (fp < (task_base + sizeof(struct thread_info)) || | 692 | if (fp < (task_base + sizeof(struct thread_info)) || |
693 | fp >= (task_base + (2 * PAGE_SIZE))) | 693 | fp >= (task_base + (2 * PAGE_SIZE))) |
694 | break; | 694 | break; |
695 | rw = (struct reg_window *) fp; | 695 | rw = (struct reg_window32 *) fp; |
696 | pc = rw->ins[7]; | 696 | pc = rw->ins[7]; |
697 | if (!in_sched_functions(pc)) { | 697 | if (!in_sched_functions(pc)) { |
698 | ret = pc; | 698 | ret = pc; |
diff --git a/arch/sparc/kernel/prom_common.c b/arch/sparc/kernel/prom_common.c index 4e9af593db49..ff7b591c8946 100644 --- a/arch/sparc/kernel/prom_common.c +++ b/arch/sparc/kernel/prom_common.c | |||
@@ -155,20 +155,12 @@ static struct property * __init build_one_prop(phandle node, char *prev, | |||
155 | p->value = prom_early_alloc(special_len); | 155 | p->value = prom_early_alloc(special_len); |
156 | memcpy(p->value, special_val, special_len); | 156 | memcpy(p->value, special_val, special_len); |
157 | } else { | 157 | } else { |
158 | #ifdef CONFIG_SPARC32 | ||
159 | if (prev == NULL) { | ||
160 | name = prom_firstprop(node, NULL); | ||
161 | } else { | ||
162 | name = prom_nextprop(node, prev, NULL); | ||
163 | } | ||
164 | #else | ||
165 | if (prev == NULL) { | 158 | if (prev == NULL) { |
166 | prom_firstprop(node, p->name); | 159 | name = prom_firstprop(node, p->name); |
167 | } else { | 160 | } else { |
168 | prom_nextprop(node, prev, p->name); | 161 | name = prom_nextprop(node, prev, p->name); |
169 | } | 162 | } |
170 | name = p->name; | 163 | |
171 | #endif | ||
172 | if (strlen(name) == 0) { | 164 | if (strlen(name) == 0) { |
173 | tmp = p; | 165 | tmp = p; |
174 | return NULL; | 166 | return NULL; |
diff --git a/arch/sparc/kernel/signal_32.c b/arch/sparc/kernel/signal_32.c index c94f91c8b6e0..181d069a2d44 100644 --- a/arch/sparc/kernel/signal_32.c +++ b/arch/sparc/kernel/signal_32.c | |||
@@ -34,7 +34,7 @@ extern void fpload(unsigned long *fpregs, unsigned long *fsr); | |||
34 | 34 | ||
35 | struct signal_frame { | 35 | struct signal_frame { |
36 | struct sparc_stackf ss; | 36 | struct sparc_stackf ss; |
37 | __siginfo_t info; | 37 | __siginfo32_t info; |
38 | __siginfo_fpu_t __user *fpu_save; | 38 | __siginfo_fpu_t __user *fpu_save; |
39 | unsigned long insns[2] __attribute__ ((aligned (8))); | 39 | unsigned long insns[2] __attribute__ ((aligned (8))); |
40 | unsigned int extramask[_NSIG_WORDS - 1]; | 40 | unsigned int extramask[_NSIG_WORDS - 1]; |
@@ -351,7 +351,7 @@ static void setup_frame(struct k_sigaction *ka, struct pt_regs *regs, | |||
351 | err |= __copy_to_user(sf->extramask, &oldset->sig[1], | 351 | err |= __copy_to_user(sf->extramask, &oldset->sig[1], |
352 | (_NSIG_WORDS - 1) * sizeof(unsigned int)); | 352 | (_NSIG_WORDS - 1) * sizeof(unsigned int)); |
353 | err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], | 353 | err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], |
354 | sizeof(struct reg_window)); | 354 | sizeof(struct reg_window32)); |
355 | if (err) | 355 | if (err) |
356 | goto sigsegv; | 356 | goto sigsegv; |
357 | 357 | ||
@@ -433,7 +433,7 @@ static void setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, | |||
433 | err |= __put_user(current->sas_ss_size, &sf->stack.ss_size); | 433 | err |= __put_user(current->sas_ss_size, &sf->stack.ss_size); |
434 | 434 | ||
435 | err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], | 435 | err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], |
436 | sizeof(struct reg_window)); | 436 | sizeof(struct reg_window32)); |
437 | 437 | ||
438 | err |= copy_siginfo_to_user(&sf->info, info); | 438 | err |= copy_siginfo_to_user(&sf->info, info); |
439 | 439 | ||
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c index 716f3946c494..213645be6e92 100644 --- a/arch/sparc/kernel/traps_32.c +++ b/arch/sparc/kernel/traps_32.c | |||
@@ -67,7 +67,7 @@ void die_if_kernel(char *str, struct pt_regs *regs) | |||
67 | __RESTORE; __RESTORE; __RESTORE; __RESTORE; | 67 | __RESTORE; __RESTORE; __RESTORE; __RESTORE; |
68 | 68 | ||
69 | { | 69 | { |
70 | struct reg_window *rw = (struct reg_window *)regs->u_regs[UREG_FP]; | 70 | struct reg_window32 *rw = (struct reg_window32 *)regs->u_regs[UREG_FP]; |
71 | 71 | ||
72 | /* Stop the back trace when we hit userland or we | 72 | /* Stop the back trace when we hit userland or we |
73 | * find some badly aligned kernel stack. Set an upper | 73 | * find some badly aligned kernel stack. Set an upper |
@@ -79,7 +79,7 @@ void die_if_kernel(char *str, struct pt_regs *regs) | |||
79 | !(((unsigned long) rw) & 0x7)) { | 79 | !(((unsigned long) rw) & 0x7)) { |
80 | printk("Caller[%08lx]: %pS\n", rw->ins[7], | 80 | printk("Caller[%08lx]: %pS\n", rw->ins[7], |
81 | (void *) rw->ins[7]); | 81 | (void *) rw->ins[7]); |
82 | rw = (struct reg_window *)rw->ins[6]; | 82 | rw = (struct reg_window32 *)rw->ins[6]; |
83 | } | 83 | } |
84 | } | 84 | } |
85 | printk("Instruction DUMP:"); | 85 | printk("Instruction DUMP:"); |
diff --git a/arch/sparc/kernel/unaligned_32.c b/arch/sparc/kernel/unaligned_32.c index c2a28c5ad650..6b1e6cde6fff 100644 --- a/arch/sparc/kernel/unaligned_32.c +++ b/arch/sparc/kernel/unaligned_32.c | |||
@@ -97,26 +97,26 @@ static inline int sign_extend_imm13(int imm) | |||
97 | 97 | ||
98 | static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) | 98 | static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs) |
99 | { | 99 | { |
100 | struct reg_window *win; | 100 | struct reg_window32 *win; |
101 | 101 | ||
102 | if(reg < 16) | 102 | if(reg < 16) |
103 | return (!reg ? 0 : regs->u_regs[reg]); | 103 | return (!reg ? 0 : regs->u_regs[reg]); |
104 | 104 | ||
105 | /* Ho hum, the slightly complicated case. */ | 105 | /* Ho hum, the slightly complicated case. */ |
106 | win = (struct reg_window *) regs->u_regs[UREG_FP]; | 106 | win = (struct reg_window32 *) regs->u_regs[UREG_FP]; |
107 | return win->locals[reg - 16]; /* yes, I know what this does... */ | 107 | return win->locals[reg - 16]; /* yes, I know what this does... */ |
108 | } | 108 | } |
109 | 109 | ||
110 | static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs) | 110 | static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs) |
111 | { | 111 | { |
112 | struct reg_window __user *win; | 112 | struct reg_window32 __user *win; |
113 | unsigned long ret; | 113 | unsigned long ret; |
114 | 114 | ||
115 | if (reg < 16) | 115 | if (reg < 16) |
116 | return (!reg ? 0 : regs->u_regs[reg]); | 116 | return (!reg ? 0 : regs->u_regs[reg]); |
117 | 117 | ||
118 | /* Ho hum, the slightly complicated case. */ | 118 | /* Ho hum, the slightly complicated case. */ |
119 | win = (struct reg_window __user *) regs->u_regs[UREG_FP]; | 119 | win = (struct reg_window32 __user *) regs->u_regs[UREG_FP]; |
120 | 120 | ||
121 | if ((unsigned long)win & 3) | 121 | if ((unsigned long)win & 3) |
122 | return -1; | 122 | return -1; |
@@ -129,11 +129,11 @@ static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *reg | |||
129 | 129 | ||
130 | static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) | 130 | static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *regs) |
131 | { | 131 | { |
132 | struct reg_window *win; | 132 | struct reg_window32 *win; |
133 | 133 | ||
134 | if(reg < 16) | 134 | if(reg < 16) |
135 | return ®s->u_regs[reg]; | 135 | return ®s->u_regs[reg]; |
136 | win = (struct reg_window *) regs->u_regs[UREG_FP]; | 136 | win = (struct reg_window32 *) regs->u_regs[UREG_FP]; |
137 | return &win->locals[reg - 16]; | 137 | return &win->locals[reg - 16]; |
138 | } | 138 | } |
139 | 139 | ||
diff --git a/arch/sparc/kernel/windows.c b/arch/sparc/kernel/windows.c index 9cc93eaa4abf..f24d298bda29 100644 --- a/arch/sparc/kernel/windows.c +++ b/arch/sparc/kernel/windows.c | |||
@@ -42,7 +42,7 @@ static inline void shift_window_buffer(int first_win, int last_win, struct threa | |||
42 | 42 | ||
43 | for(i = first_win; i < last_win; i++) { | 43 | for(i = first_win; i < last_win; i++) { |
44 | tp->rwbuf_stkptrs[i] = tp->rwbuf_stkptrs[i+1]; | 44 | tp->rwbuf_stkptrs[i] = tp->rwbuf_stkptrs[i+1]; |
45 | memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window)); | 45 | memcpy(&tp->reg_window[i], &tp->reg_window[i+1], sizeof(struct reg_window32)); |
46 | } | 46 | } |
47 | } | 47 | } |
48 | 48 | ||
@@ -70,7 +70,7 @@ void synchronize_user_stack(void) | |||
70 | 70 | ||
71 | /* Ok, let it rip. */ | 71 | /* Ok, let it rip. */ |
72 | if (copy_to_user((char __user *) sp, &tp->reg_window[window], | 72 | if (copy_to_user((char __user *) sp, &tp->reg_window[window], |
73 | sizeof(struct reg_window))) | 73 | sizeof(struct reg_window32))) |
74 | continue; | 74 | continue; |
75 | 75 | ||
76 | shift_window_buffer(window, tp->w_saved - 1, tp); | 76 | shift_window_buffer(window, tp->w_saved - 1, tp); |
@@ -119,7 +119,7 @@ void try_to_clear_window_buffer(struct pt_regs *regs, int who) | |||
119 | 119 | ||
120 | if ((sp & 7) || | 120 | if ((sp & 7) || |
121 | copy_to_user((char __user *) sp, &tp->reg_window[window], | 121 | copy_to_user((char __user *) sp, &tp->reg_window[window], |
122 | sizeof(struct reg_window))) | 122 | sizeof(struct reg_window32))) |
123 | do_exit(SIGILL); | 123 | do_exit(SIGILL); |
124 | } | 124 | } |
125 | tp->w_saved = 0; | 125 | tp->w_saved = 0; |