diff options
Diffstat (limited to 'arch/sparc64/kernel')
-rw-r--r-- | arch/sparc64/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/smp.c | 28 | ||||
-rw-r--r-- | arch/sparc64/kernel/sys32.S | 2 | ||||
-rw-r--r-- | arch/sparc64/kernel/sys_sparc32.c | 21 | ||||
-rw-r--r-- | arch/sparc64/kernel/systbls.S | 4 | ||||
-rw-r--r-- | arch/sparc64/kernel/una_asm.S | 4 |
6 files changed, 47 insertions, 14 deletions
diff --git a/arch/sparc64/kernel/setup.c b/arch/sparc64/kernel/setup.c index 054461e6946d..158bd31e15b7 100644 --- a/arch/sparc64/kernel/setup.c +++ b/arch/sparc64/kernel/setup.c | |||
@@ -542,6 +542,8 @@ void __init setup_arch(char **cmdline_p) | |||
542 | } | 542 | } |
543 | #endif | 543 | #endif |
544 | 544 | ||
545 | smp_setup_cpu_possible_map(); | ||
546 | |||
545 | paging_init(); | 547 | paging_init(); |
546 | } | 548 | } |
547 | 549 | ||
diff --git a/arch/sparc64/kernel/smp.c b/arch/sparc64/kernel/smp.c index 1fb6323e65a4..1f7ad8a69052 100644 --- a/arch/sparc64/kernel/smp.c +++ b/arch/sparc64/kernel/smp.c | |||
@@ -1079,18 +1079,12 @@ int setup_profiling_timer(unsigned int multiplier) | |||
1079 | return 0; | 1079 | return 0; |
1080 | } | 1080 | } |
1081 | 1081 | ||
1082 | /* Constrain the number of cpus to max_cpus. */ | ||
1082 | void __init smp_prepare_cpus(unsigned int max_cpus) | 1083 | void __init smp_prepare_cpus(unsigned int max_cpus) |
1083 | { | 1084 | { |
1084 | int instance, mid; | ||
1085 | |||
1086 | instance = 0; | ||
1087 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | ||
1088 | if (mid < max_cpus) | ||
1089 | cpu_set(mid, phys_cpu_present_map); | ||
1090 | instance++; | ||
1091 | } | ||
1092 | |||
1093 | if (num_possible_cpus() > max_cpus) { | 1085 | if (num_possible_cpus() > max_cpus) { |
1086 | int instance, mid; | ||
1087 | |||
1094 | instance = 0; | 1088 | instance = 0; |
1095 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | 1089 | while (!cpu_find_by_instance(instance, NULL, &mid)) { |
1096 | if (mid != boot_cpu_id) { | 1090 | if (mid != boot_cpu_id) { |
@@ -1105,6 +1099,22 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
1105 | smp_store_cpu_info(boot_cpu_id); | 1099 | smp_store_cpu_info(boot_cpu_id); |
1106 | } | 1100 | } |
1107 | 1101 | ||
1102 | /* Set this up early so that things like the scheduler can init | ||
1103 | * properly. We use the same cpu mask for both the present and | ||
1104 | * possible cpu map. | ||
1105 | */ | ||
1106 | void __init smp_setup_cpu_possible_map(void) | ||
1107 | { | ||
1108 | int instance, mid; | ||
1109 | |||
1110 | instance = 0; | ||
1111 | while (!cpu_find_by_instance(instance, NULL, &mid)) { | ||
1112 | if (mid < NR_CPUS) | ||
1113 | cpu_set(mid, phys_cpu_present_map); | ||
1114 | instance++; | ||
1115 | } | ||
1116 | } | ||
1117 | |||
1108 | void __devinit smp_prepare_boot_cpu(void) | 1118 | void __devinit smp_prepare_boot_cpu(void) |
1109 | { | 1119 | { |
1110 | if (hard_smp_processor_id() >= NR_CPUS) { | 1120 | if (hard_smp_processor_id() >= NR_CPUS) { |
diff --git a/arch/sparc64/kernel/sys32.S b/arch/sparc64/kernel/sys32.S index 60b59375aa78..c4a1cef4b1e5 100644 --- a/arch/sparc64/kernel/sys32.S +++ b/arch/sparc64/kernel/sys32.S | |||
@@ -318,7 +318,7 @@ do_sys_recvmsg: /* compat_sys_recvmsg(int, struct compat_msghdr *, unsigned int) | |||
318 | nop | 318 | nop |
319 | nop | 319 | nop |
320 | 320 | ||
321 | .section __ex_table | 321 | .section __ex_table,"a" |
322 | .align 4 | 322 | .align 4 |
323 | .word 1b, __retl_efault, 2b, __retl_efault | 323 | .word 1b, __retl_efault, 2b, __retl_efault |
324 | .word 3b, __retl_efault, 4b, __retl_efault | 324 | .word 3b, __retl_efault, 4b, __retl_efault |
diff --git a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c index 9264ccbaaafa..417727bd87ba 100644 --- a/arch/sparc64/kernel/sys_sparc32.c +++ b/arch/sparc64/kernel/sys_sparc32.c | |||
@@ -428,6 +428,27 @@ asmlinkage long compat_sys_fstat64(unsigned int fd, | |||
428 | return error; | 428 | return error; |
429 | } | 429 | } |
430 | 430 | ||
431 | asmlinkage long compat_sys_fstatat64(unsigned int dfd, char __user *filename, | ||
432 | struct compat_stat64 __user * statbuf, int flag) | ||
433 | { | ||
434 | struct kstat stat; | ||
435 | int error = -EINVAL; | ||
436 | |||
437 | if ((flag & ~AT_SYMLINK_NOFOLLOW) != 0) | ||
438 | goto out; | ||
439 | |||
440 | if (flag & AT_SYMLINK_NOFOLLOW) | ||
441 | error = vfs_lstat_fd(dfd, filename, &stat); | ||
442 | else | ||
443 | error = vfs_stat_fd(dfd, filename, &stat); | ||
444 | |||
445 | if (!error) | ||
446 | error = cp_compat_stat64(&stat, statbuf); | ||
447 | |||
448 | out: | ||
449 | return error; | ||
450 | } | ||
451 | |||
431 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) | 452 | asmlinkage long compat_sys_sysfs(int option, u32 arg1, u32 arg2) |
432 | { | 453 | { |
433 | return sys_sysfs(option, arg1, arg2); | 454 | return sys_sysfs(option, arg1, arg2); |
diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S index a19168510be2..c3adb7ac167d 100644 --- a/arch/sparc64/kernel/systbls.S +++ b/arch/sparc64/kernel/systbls.S | |||
@@ -77,7 +77,7 @@ sys_call_table32: | |||
77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink | 77 | /*270*/ .word sys32_io_submit, sys_io_cancel, compat_sys_io_getevents, sys32_mq_open, sys_mq_unlink |
78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid | 78 | .word compat_sys_mq_timedsend, compat_sys_mq_timedreceive, compat_sys_mq_notify, compat_sys_mq_getsetattr, compat_sys_waitid |
79 | /*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat | 79 | /*280*/ .word sys_ni_syscall, sys_add_key, sys_request_key, sys_keyctl, compat_sys_openat |
80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_newfstatat | 80 | .word sys_mkdirat, sys_mknodat, sys_fchownat, compat_sys_futimesat, compat_sys_fstatat64 |
81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 81 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare | 82 | .word sys_fchmodat, sys_faccessat, compat_sys_pselect6, compat_sys_ppoll, sys_unshare |
83 | 83 | ||
@@ -146,7 +146,7 @@ sys_call_table: | |||
146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink | 146 | /*270*/ .word sys_io_submit, sys_io_cancel, sys_io_getevents, sys_mq_open, sys_mq_unlink |
147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid | 147 | .word sys_mq_timedsend, sys_mq_timedreceive, sys_mq_notify, sys_mq_getsetattr, sys_waitid |
148 | /*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat | 148 | /*280*/ .word sys_nis_syscall, sys_add_key, sys_request_key, sys_keyctl, sys_openat |
149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_newfstatat | 149 | .word sys_mkdirat, sys_mknodat, sys_fchownat, sys_futimesat, sys_fstatat64 |
150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat | 150 | /*285*/ .word sys_unlinkat, sys_renameat, sys_linkat, sys_symlinkat, sys_readlinkat |
151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare | 151 | .word sys_fchmodat, sys_faccessat, sys_pselect6, sys_ppoll, sys_unshare |
152 | 152 | ||
diff --git a/arch/sparc64/kernel/una_asm.S b/arch/sparc64/kernel/una_asm.S index 1f5b5b708ce7..be183fe41443 100644 --- a/arch/sparc64/kernel/una_asm.S +++ b/arch/sparc64/kernel/una_asm.S | |||
@@ -47,7 +47,7 @@ __do_int_store: | |||
47 | mov 0, %o0 | 47 | mov 0, %o0 |
48 | .size __do_int_store, .-__do_int_store | 48 | .size __do_int_store, .-__do_int_store |
49 | 49 | ||
50 | .section __ex_table | 50 | .section __ex_table,"a" |
51 | .word 4b, __retl_efault | 51 | .word 4b, __retl_efault |
52 | .word 5b, __retl_efault | 52 | .word 5b, __retl_efault |
53 | .word 6b, __retl_efault | 53 | .word 6b, __retl_efault |
@@ -129,7 +129,7 @@ do_int_load: | |||
129 | mov 0, %o0 | 129 | mov 0, %o0 |
130 | .size __do_int_load, .-__do_int_load | 130 | .size __do_int_load, .-__do_int_load |
131 | 131 | ||
132 | .section __ex_table | 132 | .section __ex_table,"a" |
133 | .word 4b, __retl_efault | 133 | .word 4b, __retl_efault |
134 | .word 5b, __retl_efault | 134 | .word 5b, __retl_efault |
135 | .word 6b, __retl_efault | 135 | .word 6b, __retl_efault |