[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>
This commit is contained in:
Matthew Wilcox 2006-10-04 13:16:10 -06:00 committed by Matthew Wilcox
parent ee9f4b5d95
commit 17cca07237

View file

@ -111,13 +111,14 @@ struct __sysctl_args32 {
asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args) asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
{ {
#ifndef CONFIG_SYSCTL_SYSCALL
return -ENOSYS;
#else
struct __sysctl_args32 tmp; struct __sysctl_args32 tmp;
int error; int error;
unsigned int oldlen32; unsigned int oldlen32;
size_t oldlen, *oldlenp = NULL; size_t oldlen, __user *oldlenp = NULL;
unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7; unsigned long addr = (((long __force)&args->__unused[0]) + 7) & ~7;
extern int do_sysctl(int *name, int nlen, void *oldval, size_t *oldlenp,
void *newval, size_t newlen);
DBG(("sysctl32(%p)\n", args)); DBG(("sysctl32(%p)\n", args));
@ -144,8 +145,9 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
} }
lock_kernel(); lock_kernel();
error = do_sysctl((int *)(u64)tmp.name, tmp.nlen, (void *)(u64)tmp.oldval, error = do_sysctl((int __user *)(u64)tmp.name, tmp.nlen,
oldlenp, (void *)(u64)tmp.newval, tmp.newlen); (void __user *)(u64)tmp.oldval, oldlenp,
(void __user *)(u64)tmp.newval, tmp.newlen);
unlock_kernel(); unlock_kernel();
if (oldlenp) { if (oldlenp) {
if (!error) { if (!error) {
@ -157,10 +159,11 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
error = -EFAULT; error = -EFAULT;
} }
} }
if (copy_to_user(&args->__unused[0], tmp.__unused, sizeof(tmp.__unused))) if (copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)))
error = -EFAULT; error = -EFAULT;
} }
return error; return error;
#endif
} }
#endif /* CONFIG_SYSCTL */ #endif /* CONFIG_SYSCTL */