diff options
author | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2005-11-11 05:15:21 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-11 06:25:39 -0500 |
commit | a7f290dad32ee34d931561b7943c858fe2aae503 (patch) | |
tree | 850f04ed9ffba8aef6e151fa9c9e8a0c667bb795 /arch/powerpc/kernel/signal_32.c | |
parent | 6761c4a07378e19e3710bb69cea65795774529b1 (diff) |
[PATCH] powerpc: Merge vdso's and add vdso support to 32 bits kernel
This patch moves the vdso's to arch/powerpc, adds support for the 32
bits vdso to the 32 bits kernel, rename systemcfg (finally !), and adds
some new (still untested) routines to both vdso's: clock_gettime() with
support for CLOCK_REALTIME and CLOCK_MONOTONIC, clock_getres() (same
clocks) and get_tbfreq() for glibc to retreive the timebase frequency.
Tom,Steve: The implementation of get_tbfreq() I've done for 32 bits
returns a long long (r3, r4) not a long. This is such that if we ever
add support for >4Ghz timebases on ppc32, the userland interface won't
have to change.
I have tested gettimeofday() using some glibc patches in both ppc32 and
ppc64 kernels using 32 bits userland (I haven't had a chance to test a
64 bits userland yet, but the implementation didn't change and was
tested earlier). I haven't tested yet the new functions.
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch/powerpc/kernel/signal_32.c')
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index a7c4515f320f..8bdf95b7e420 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -43,10 +43,10 @@ | |||
43 | #include <asm/uaccess.h> | 43 | #include <asm/uaccess.h> |
44 | #include <asm/cacheflush.h> | 44 | #include <asm/cacheflush.h> |
45 | #include <asm/sigcontext.h> | 45 | #include <asm/sigcontext.h> |
46 | #include <asm/vdso.h> | ||
46 | #ifdef CONFIG_PPC64 | 47 | #ifdef CONFIG_PPC64 |
47 | #include "ppc32.h" | 48 | #include "ppc32.h" |
48 | #include <asm/unistd.h> | 49 | #include <asm/unistd.h> |
49 | #include <asm/vdso.h> | ||
50 | #else | 50 | #else |
51 | #include <asm/ucontext.h> | 51 | #include <asm/ucontext.h> |
52 | #include <asm/pgtable.h> | 52 | #include <asm/pgtable.h> |
@@ -809,14 +809,11 @@ static int handle_rt_signal(unsigned long sig, struct k_sigaction *ka, | |||
809 | 809 | ||
810 | /* Save user registers on the stack */ | 810 | /* Save user registers on the stack */ |
811 | frame = &rt_sf->uc.uc_mcontext; | 811 | frame = &rt_sf->uc.uc_mcontext; |
812 | #ifdef CONFIG_PPC64 | ||
813 | if (vdso32_rt_sigtramp && current->thread.vdso_base) { | 812 | if (vdso32_rt_sigtramp && current->thread.vdso_base) { |
814 | if (save_user_regs(regs, frame, 0)) | 813 | if (save_user_regs(regs, frame, 0)) |
815 | goto badframe; | 814 | goto badframe; |
816 | regs->link = current->thread.vdso_base + vdso32_rt_sigtramp; | 815 | regs->link = current->thread.vdso_base + vdso32_rt_sigtramp; |
817 | } else | 816 | } else { |
818 | #endif | ||
819 | { | ||
820 | if (save_user_regs(regs, frame, __NR_rt_sigreturn)) | 817 | if (save_user_regs(regs, frame, __NR_rt_sigreturn)) |
821 | goto badframe; | 818 | goto badframe; |
822 | regs->link = (unsigned long) frame->tramp; | 819 | regs->link = (unsigned long) frame->tramp; |
@@ -1090,14 +1087,11 @@ static int handle_signal(unsigned long sig, struct k_sigaction *ka, | |||
1090 | || __put_user(sig, &sc->signal)) | 1087 | || __put_user(sig, &sc->signal)) |
1091 | goto badframe; | 1088 | goto badframe; |
1092 | 1089 | ||
1093 | #ifdef CONFIG_PPC64 | ||
1094 | if (vdso32_sigtramp && current->thread.vdso_base) { | 1090 | if (vdso32_sigtramp && current->thread.vdso_base) { |
1095 | if (save_user_regs(regs, &frame->mctx, 0)) | 1091 | if (save_user_regs(regs, &frame->mctx, 0)) |
1096 | goto badframe; | 1092 | goto badframe; |
1097 | regs->link = current->thread.vdso_base + vdso32_sigtramp; | 1093 | regs->link = current->thread.vdso_base + vdso32_sigtramp; |
1098 | } else | 1094 | } else { |
1099 | #endif | ||
1100 | { | ||
1101 | if (save_user_regs(regs, &frame->mctx, __NR_sigreturn)) | 1095 | if (save_user_regs(regs, &frame->mctx, __NR_sigreturn)) |
1102 | goto badframe; | 1096 | goto badframe; |
1103 | regs->link = (unsigned long) frame->mctx.tramp; | 1097 | regs->link = (unsigned long) frame->mctx.tramp; |