Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: (23 commits) parisc: move dereference_function_descriptor to process.c parisc: Move kernel Elf_Fdesc define to <asm/elf.h> parisc: fix build when ARCH_HAS_KMAP parisc: fix "make tar-pkg" parisc: drivers: fix warnings parisc: select BUG always parisc: asm/pdc.h should include asm/page.h parisc: led: remove proc_dir_entry::owner parisc: fix macro expansion in atomic.h parisc: iosapic: fix build breakage parisc: oops_enter()/oops_exit() in die() parisc: document light weight syscall ABI parisc: blink all or loadavg LEDs on oops parisc: add ftrace (function and graph tracer) functionality parisc: simplify sys_clone() parisc: add LATENCYTOP_SUPPORT and CONFIG_STACKTRACE_SUPPORT parisc: allow to build with 16k default kernel page size parisc: expose 32/64-bit capabilities in cpuinfo parisc: use constants instead of numbers in assembly parisc: fix usage of 32bit PTE page table entries on 32bit kernels ...
This commit is contained in:
@ -46,14 +46,15 @@
|
||||
#include <linux/stddef.h>
|
||||
#include <linux/unistd.h>
|
||||
#include <linux/kallsyms.h>
|
||||
#include <linux/uaccess.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/pdc.h>
|
||||
#include <asm/pdc_chassis.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/unwind.h>
|
||||
#include <asm/sections.h>
|
||||
|
||||
/*
|
||||
* The idle thread. There's no useful work to be
|
||||
@ -231,8 +232,8 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
|
||||
However, these last 3 args are only examined
|
||||
if the proper flags are set. */
|
||||
int __user *child_tidptr;
|
||||
int __user *parent_tidptr;
|
||||
int __user *parent_tidptr = (int __user *)regs->gr[24];
|
||||
int __user *child_tidptr = (int __user *)regs->gr[22];
|
||||
|
||||
/* usp must be word aligned. This also prevents users from
|
||||
* passing in the value 1 (which is the signal for a special
|
||||
@ -243,16 +244,6 @@ sys_clone(unsigned long clone_flags, unsigned long usp,
|
||||
if (usp == 0)
|
||||
usp = regs->gr[30];
|
||||
|
||||
if (clone_flags & CLONE_PARENT_SETTID)
|
||||
parent_tidptr = (int __user *)regs->gr[24];
|
||||
else
|
||||
parent_tidptr = NULL;
|
||||
|
||||
if (clone_flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID))
|
||||
child_tidptr = (int __user *)regs->gr[22];
|
||||
else
|
||||
child_tidptr = NULL;
|
||||
|
||||
return do_fork(clone_flags, usp, regs, 0, parent_tidptr, child_tidptr);
|
||||
}
|
||||
|
||||
@ -400,3 +391,15 @@ get_wchan(struct task_struct *p)
|
||||
} while (count++ < 16);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
void *dereference_function_descriptor(void *ptr)
|
||||
{
|
||||
Elf64_Fdesc *desc = ptr;
|
||||
void *p;
|
||||
|
||||
if (!probe_kernel_address(&desc->addr, p))
|
||||
ptr = p;
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user