diff options
author | Matthew Wilcox <matthew@wil.cx> | 2006-10-04 15:16:10 -0400 |
---|---|---|
committer | Matthew Wilcox <willy@hera.kernel.org> | 2006-10-04 21:48:17 -0400 |
commit | 17cca07237617a2d712eb44cffd8720055e61291 (patch) | |
tree | cd0b35fef694bab9c76b3f2336561adfadcddd35 /arch/parisc | |
parent | ee9f4b5d95d03d1546f0d06cbe384bd4ab97bcba (diff) |
[PA-RISC] Fix sys32_sysctl
When CONFIG_SYSCTL_SYSCALL isn't defined, do_sysctl doesn't exist and
we fail to link. Fix with an ifdef, the same way sparc64 did.
Also add some minor changes to be more like sparc64.
Signed-off-by: Matthew Wilcox <matthew@wil.cx>
Diffstat (limited to 'arch/parisc')
-rw-r--r-- | arch/parisc/kernel/sys_parisc32.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c index e3b30bc36453..e0e4e0bfcc6b 100644 --- a/arch/parisc/kernel/sys_parisc32.c +++ b/arch/parisc/kernel/sys_parisc32.c | |||
@@ -111,13 +111,14 @@ struct __sysctl_args32 { | |||
111 | 111 | ||
112 | asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) | 112 | asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) |
113 | { | 113 | { |
114 | #ifndef CONFIG_SYSCTL_SYSCALL | ||
115 | return -ENOSYS; | ||
116 | #else | ||
114 | struct __sysctl_args32 tmp; | 117 | struct __sysctl_args32 tmp; |
115 | int error; | 118 | int error; |
116 | unsigned int oldlen32; | 119 | unsigned int oldlen32; |
117 | size_t oldlen, *oldlenp = NULL; | 120 | size_t oldlen, __user *oldlenp = NULL; |
118 | unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7; | 121 | unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7; |
119 | extern int do_sysctl(int *name, int nlen, void *oldval, size_t *oldlenp, | ||
120 | void *newval, size_t newlen); | ||
121 | 122 | ||
122 | DBG(("sysctl32(%p)\n", args)); | 123 | DBG(("sysctl32(%p)\n", args)); |
123 | 124 | ||
@@ -144,8 +145,9 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) | |||
144 | } | 145 | } |
145 | 146 | ||
146 | lock_kernel(); | 147 | lock_kernel(); |
147 | error = do_sysctl((int *)(u64)tmp.name, tmp.nlen, (void *)(u64)tmp.oldval, | 148 | error = do_sysctl((int __user *)(u64)tmp.name, tmp.nlen, |
148 | oldlenp, (void *)(u64)tmp.newval, tmp.newlen); | 149 | (void __user *)(u64)tmp.oldval, oldlenp, |
150 | (void __user *)(u64)tmp.newval, tmp.newlen); | ||
149 | unlock_kernel(); | 151 | unlock_kernel(); |
150 | if (oldlenp) { | 152 | if (oldlenp) { |
151 | if (!error) { | 153 | if (!error) { |
@@ -157,10 +159,11 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) | |||
157 | error = -EFAULT; | 159 | error = -EFAULT; |
158 | } | 160 | } |
159 | } | 161 | } |
160 | if (copy_to_user(&args->__unused[0], tmp.__unused, sizeof(tmp.__unused))) | 162 | if (copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused))) |
161 | error = -EFAULT; | 163 | error = -EFAULT; |
162 | } | 164 | } |
163 | return error; | 165 | return error; |
166 | #endif | ||
164 | } | 167 | } |
165 | 168 | ||
166 | #endif /* CONFIG_SYSCTL */ | 169 | #endif /* CONFIG_SYSCTL */ |