diff options
85 files changed, 86 insertions, 675 deletions
diff --git a/arch/alpha/include/asm/thread_info.h b/arch/alpha/include/asm/thread_info.h index d5b98ab514bb..32e920a83ae5 100644 --- a/arch/alpha/include/asm/thread_info.h +++ b/arch/alpha/include/asm/thread_info.h | |||
@@ -18,7 +18,6 @@ struct thread_info { | |||
18 | unsigned int flags; /* low level flags */ | 18 | unsigned int flags; /* low level flags */ |
19 | unsigned int ieee_state; /* see fpu.h */ | 19 | unsigned int ieee_state; /* see fpu.h */ |
20 | 20 | ||
21 | struct exec_domain *exec_domain; /* execution domain */ | ||
22 | mm_segment_t addr_limit; /* thread address space */ | 21 | mm_segment_t addr_limit; /* thread address space */ |
23 | unsigned cpu; /* current CPU */ | 22 | unsigned cpu; /* current CPU */ |
24 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 23 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
@@ -35,7 +34,6 @@ struct thread_info { | |||
35 | #define INIT_THREAD_INFO(tsk) \ | 34 | #define INIT_THREAD_INFO(tsk) \ |
36 | { \ | 35 | { \ |
37 | .task = &tsk, \ | 36 | .task = &tsk, \ |
38 | .exec_domain = &default_exec_domain, \ | ||
39 | .addr_limit = KERNEL_DS, \ | 37 | .addr_limit = KERNEL_DS, \ |
40 | .preempt_count = INIT_PREEMPT_COUNT, \ | 38 | .preempt_count = INIT_PREEMPT_COUNT, \ |
41 | } | 39 | } |
diff --git a/arch/arc/include/asm/thread_info.h b/arch/arc/include/asm/thread_info.h index 1163a1838ac1..aca0d5a45c7b 100644 --- a/arch/arc/include/asm/thread_info.h +++ b/arch/arc/include/asm/thread_info.h | |||
@@ -43,7 +43,6 @@ struct thread_info { | |||
43 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 43 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
44 | struct task_struct *task; /* main task structure */ | 44 | struct task_struct *task; /* main task structure */ |
45 | mm_segment_t addr_limit; /* thread address space */ | 45 | mm_segment_t addr_limit; /* thread address space */ |
46 | struct exec_domain *exec_domain;/* execution domain */ | ||
47 | __u32 cpu; /* current CPU */ | 46 | __u32 cpu; /* current CPU */ |
48 | unsigned long thr_ptr; /* TLS ptr */ | 47 | unsigned long thr_ptr; /* TLS ptr */ |
49 | }; | 48 | }; |
@@ -56,7 +55,6 @@ struct thread_info { | |||
56 | #define INIT_THREAD_INFO(tsk) \ | 55 | #define INIT_THREAD_INFO(tsk) \ |
57 | { \ | 56 | { \ |
58 | .task = &tsk, \ | 57 | .task = &tsk, \ |
59 | .exec_domain = &default_exec_domain, \ | ||
60 | .flags = 0, \ | 58 | .flags = 0, \ |
61 | .cpu = 0, \ | 59 | .cpu = 0, \ |
62 | .preempt_count = INIT_PREEMPT_COUNT, \ | 60 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/arc/kernel/signal.c b/arch/arc/kernel/signal.c index edda76fae83f..2251fb4bbfd7 100644 --- a/arch/arc/kernel/signal.c +++ b/arch/arc/kernel/signal.c | |||
@@ -171,18 +171,6 @@ static inline void __user *get_sigframe(struct ksignal *ksig, | |||
171 | return frame; | 171 | return frame; |
172 | } | 172 | } |
173 | 173 | ||
174 | /* | ||
175 | * translate the signal | ||
176 | */ | ||
177 | static inline int map_sig(int sig) | ||
178 | { | ||
179 | struct thread_info *thread = current_thread_info(); | ||
180 | if (thread->exec_domain && thread->exec_domain->signal_invmap | ||
181 | && sig < 32) | ||
182 | sig = thread->exec_domain->signal_invmap[sig]; | ||
183 | return sig; | ||
184 | } | ||
185 | |||
186 | static int | 174 | static int |
187 | setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) | 175 | setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) |
188 | { | 176 | { |
@@ -231,7 +219,7 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) | |||
231 | return err; | 219 | return err; |
232 | 220 | ||
233 | /* #1 arg to the user Signal handler */ | 221 | /* #1 arg to the user Signal handler */ |
234 | regs->r0 = map_sig(ksig->sig); | 222 | regs->r0 = ksig->sig; |
235 | 223 | ||
236 | /* setup PC of user space signal handler */ | 224 | /* setup PC of user space signal handler */ |
237 | regs->ret = (unsigned long)ksig->ka.sa.sa_handler; | 225 | regs->ret = (unsigned long)ksig->ka.sa.sa_handler; |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 7cbf4ef5c6fd..392e7ae69452 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -2133,16 +2133,6 @@ menu "Userspace binary formats" | |||
2133 | 2133 | ||
2134 | source "fs/Kconfig.binfmt" | 2134 | source "fs/Kconfig.binfmt" |
2135 | 2135 | ||
2136 | config ARTHUR | ||
2137 | tristate "RISC OS personality" | ||
2138 | depends on !AEABI | ||
2139 | help | ||
2140 | Say Y here to include the kernel code necessary if you want to run | ||
2141 | Acorn RISC OS/Arthur binaries under Linux. This code is still very | ||
2142 | experimental; if this sounds frightening, say N and sleep in peace. | ||
2143 | You can also say M here to compile this support as a module (which | ||
2144 | will be called arthur). | ||
2145 | |||
2146 | endmenu | 2136 | endmenu |
2147 | 2137 | ||
2148 | menu "Power management options" | 2138 | menu "Power management options" |
diff --git a/arch/arm/configs/badge4_defconfig b/arch/arm/configs/badge4_defconfig index 0494c8f229a2..d59009878312 100644 --- a/arch/arm/configs/badge4_defconfig +++ b/arch/arm/configs/badge4_defconfig | |||
@@ -12,7 +12,6 @@ CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | |||
12 | CONFIG_FPE_NWFPE=y | 12 | CONFIG_FPE_NWFPE=y |
13 | CONFIG_BINFMT_AOUT=m | 13 | CONFIG_BINFMT_AOUT=m |
14 | CONFIG_BINFMT_MISC=m | 14 | CONFIG_BINFMT_MISC=m |
15 | CONFIG_ARTHUR=m | ||
16 | CONFIG_NET=y | 15 | CONFIG_NET=y |
17 | CONFIG_PACKET=y | 16 | CONFIG_PACKET=y |
18 | CONFIG_UNIX=y | 17 | CONFIG_UNIX=y |
diff --git a/arch/arm/include/asm/thread_info.h b/arch/arm/include/asm/thread_info.h index 72812a1f3d1c..bd32eded3e50 100644 --- a/arch/arm/include/asm/thread_info.h +++ b/arch/arm/include/asm/thread_info.h | |||
@@ -23,7 +23,6 @@ | |||
23 | #ifndef __ASSEMBLY__ | 23 | #ifndef __ASSEMBLY__ |
24 | 24 | ||
25 | struct task_struct; | 25 | struct task_struct; |
26 | struct exec_domain; | ||
27 | 26 | ||
28 | #include <asm/types.h> | 27 | #include <asm/types.h> |
29 | #include <asm/domain.h> | 28 | #include <asm/domain.h> |
@@ -53,7 +52,6 @@ struct thread_info { | |||
53 | int preempt_count; /* 0 => preemptable, <0 => bug */ | 52 | int preempt_count; /* 0 => preemptable, <0 => bug */ |
54 | mm_segment_t addr_limit; /* address limit */ | 53 | mm_segment_t addr_limit; /* address limit */ |
55 | struct task_struct *task; /* main task structure */ | 54 | struct task_struct *task; /* main task structure */ |
56 | struct exec_domain *exec_domain; /* execution domain */ | ||
57 | __u32 cpu; /* cpu */ | 55 | __u32 cpu; /* cpu */ |
58 | __u32 cpu_domain; /* cpu domain */ | 56 | __u32 cpu_domain; /* cpu domain */ |
59 | struct cpu_context_save cpu_context; /* cpu context */ | 57 | struct cpu_context_save cpu_context; /* cpu context */ |
@@ -73,7 +71,6 @@ struct thread_info { | |||
73 | #define INIT_THREAD_INFO(tsk) \ | 71 | #define INIT_THREAD_INFO(tsk) \ |
74 | { \ | 72 | { \ |
75 | .task = &tsk, \ | 73 | .task = &tsk, \ |
76 | .exec_domain = &default_exec_domain, \ | ||
77 | .flags = 0, \ | 74 | .flags = 0, \ |
78 | .preempt_count = INIT_PREEMPT_COUNT, \ | 75 | .preempt_count = INIT_PREEMPT_COUNT, \ |
79 | .addr_limit = KERNEL_DS, \ | 76 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile index ba5f83226011..752725dcbf42 100644 --- a/arch/arm/kernel/Makefile +++ b/arch/arm/kernel/Makefile | |||
@@ -34,7 +34,6 @@ obj-$(CONFIG_CPU_IDLE) += cpuidle.o | |||
34 | obj-$(CONFIG_ISA_DMA_API) += dma.o | 34 | obj-$(CONFIG_ISA_DMA_API) += dma.o |
35 | obj-$(CONFIG_FIQ) += fiq.o fiqasm.o | 35 | obj-$(CONFIG_FIQ) += fiq.o fiqasm.o |
36 | obj-$(CONFIG_MODULES) += armksyms.o module.o | 36 | obj-$(CONFIG_MODULES) += armksyms.o module.o |
37 | obj-$(CONFIG_ARTHUR) += arthur.o | ||
38 | obj-$(CONFIG_ISA_DMA) += dma-isa.o | 37 | obj-$(CONFIG_ISA_DMA) += dma-isa.o |
39 | obj-$(CONFIG_PCI) += bios32.o isa.o | 38 | obj-$(CONFIG_PCI) += bios32.o isa.o |
40 | obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o | 39 | obj-$(CONFIG_ARM_CPU_SUSPEND) += sleep.o suspend.o |
diff --git a/arch/arm/kernel/arthur.c b/arch/arm/kernel/arthur.c deleted file mode 100644 index 321c5291d05f..000000000000 --- a/arch/arm/kernel/arthur.c +++ /dev/null | |||
@@ -1,94 +0,0 @@ | |||
1 | /* | ||
2 | * linux/arch/arm/kernel/arthur.c | ||
3 | * | ||
4 | * Copyright (C) 1998, 1999, 2000, 2001 Philip Blundell | ||
5 | * | ||
6 | * Arthur personality | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * This program is free software; you can redistribute it and/or | ||
11 | * modify it under the terms of the GNU General Public License | ||
12 | * as published by the Free Software Foundation; either version | ||
13 | * 2 of the License, or (at your option) any later version. | ||
14 | */ | ||
15 | |||
16 | #include <linux/module.h> | ||
17 | #include <linux/personality.h> | ||
18 | #include <linux/stddef.h> | ||
19 | #include <linux/signal.h> | ||
20 | #include <linux/init.h> | ||
21 | #include <linux/sched.h> | ||
22 | |||
23 | #include <asm/ptrace.h> | ||
24 | |||
25 | /* Arthur doesn't have many signals, and a lot of those that it does | ||
26 | have don't map easily to any Linux equivalent. Never mind. */ | ||
27 | |||
28 | #define ARTHUR_SIGABRT 1 | ||
29 | #define ARTHUR_SIGFPE 2 | ||
30 | #define ARTHUR_SIGILL 3 | ||
31 | #define ARTHUR_SIGINT 4 | ||
32 | #define ARTHUR_SIGSEGV 5 | ||
33 | #define ARTHUR_SIGTERM 6 | ||
34 | #define ARTHUR_SIGSTAK 7 | ||
35 | #define ARTHUR_SIGUSR1 8 | ||
36 | #define ARTHUR_SIGUSR2 9 | ||
37 | #define ARTHUR_SIGOSERROR 10 | ||
38 | |||
39 | static unsigned long arthur_to_linux_signals[32] = { | ||
40 | 0, 1, 2, 3, 4, 5, 6, 7, | ||
41 | 8, 9, 10, 11, 12, 13, 14, 15, | ||
42 | 16, 17, 18, 19, 20, 21, 22, 23, | ||
43 | 24, 25, 26, 27, 28, 29, 30, 31 | ||
44 | }; | ||
45 | |||
46 | static unsigned long linux_to_arthur_signals[32] = { | ||
47 | 0, -1, ARTHUR_SIGINT, -1, | ||
48 | ARTHUR_SIGILL, 5, ARTHUR_SIGABRT, 7, | ||
49 | ARTHUR_SIGFPE, 9, ARTHUR_SIGUSR1, ARTHUR_SIGSEGV, | ||
50 | ARTHUR_SIGUSR2, 13, 14, ARTHUR_SIGTERM, | ||
51 | 16, 17, 18, 19, | ||
52 | 20, 21, 22, 23, | ||
53 | 24, 25, 26, 27, | ||
54 | 28, 29, 30, 31 | ||
55 | }; | ||
56 | |||
57 | static void arthur_lcall7(int nr, struct pt_regs *regs) | ||
58 | { | ||
59 | struct siginfo info; | ||
60 | info.si_signo = SIGSWI; | ||
61 | info.si_errno = nr; | ||
62 | /* Bounce it to the emulator */ | ||
63 | send_sig_info(SIGSWI, &info, current); | ||
64 | } | ||
65 | |||
66 | static struct exec_domain arthur_exec_domain = { | ||
67 | .name = "Arthur", | ||
68 | .handler = arthur_lcall7, | ||
69 | .pers_low = PER_RISCOS, | ||
70 | .pers_high = PER_RISCOS, | ||
71 | .signal_map = arthur_to_linux_signals, | ||
72 | .signal_invmap = linux_to_arthur_signals, | ||
73 | .module = THIS_MODULE, | ||
74 | }; | ||
75 | |||
76 | /* | ||
77 | * We could do with some locking to stop Arthur being removed while | ||
78 | * processes are using it. | ||
79 | */ | ||
80 | |||
81 | static int __init arthur_init(void) | ||
82 | { | ||
83 | return register_exec_domain(&arthur_exec_domain); | ||
84 | } | ||
85 | |||
86 | static void __exit arthur_exit(void) | ||
87 | { | ||
88 | unregister_exec_domain(&arthur_exec_domain); | ||
89 | } | ||
90 | |||
91 | module_init(arthur_init); | ||
92 | module_exit(arthur_exit); | ||
93 | |||
94 | MODULE_LICENSE("GPL"); | ||
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c index 61bb5a65eb37..871b8267d211 100644 --- a/arch/arm/kernel/asm-offsets.c +++ b/arch/arm/kernel/asm-offsets.c | |||
@@ -67,7 +67,6 @@ int main(void) | |||
67 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | 67 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); |
68 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); | 68 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); |
69 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 69 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
70 | DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); | ||
71 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 70 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
72 | DEFINE(TI_CPU_DOMAIN, offsetof(struct thread_info, cpu_domain)); | 71 | DEFINE(TI_CPU_DOMAIN, offsetof(struct thread_info, cpu_domain)); |
73 | DEFINE(TI_CPU_SAVE, offsetof(struct thread_info, cpu_context)); | 72 | DEFINE(TI_CPU_SAVE, offsetof(struct thread_info, cpu_context)); |
diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c index 023ac905e4c3..423663e23791 100644 --- a/arch/arm/kernel/signal.c +++ b/arch/arm/kernel/signal.c | |||
@@ -318,17 +318,6 @@ get_sigframe(struct ksignal *ksig, struct pt_regs *regs, int framesize) | |||
318 | return frame; | 318 | return frame; |
319 | } | 319 | } |
320 | 320 | ||
321 | /* | ||
322 | * translate the signal | ||
323 | */ | ||
324 | static inline int map_sig(int sig) | ||
325 | { | ||
326 | struct thread_info *thread = current_thread_info(); | ||
327 | if (sig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) | ||
328 | sig = thread->exec_domain->signal_invmap[sig]; | ||
329 | return sig; | ||
330 | } | ||
331 | |||
332 | static int | 321 | static int |
333 | setup_return(struct pt_regs *regs, struct ksignal *ksig, | 322 | setup_return(struct pt_regs *regs, struct ksignal *ksig, |
334 | unsigned long __user *rc, void __user *frame) | 323 | unsigned long __user *rc, void __user *frame) |
@@ -412,7 +401,7 @@ setup_return(struct pt_regs *regs, struct ksignal *ksig, | |||
412 | } | 401 | } |
413 | } | 402 | } |
414 | 403 | ||
415 | regs->ARM_r0 = map_sig(ksig->sig); | 404 | regs->ARM_r0 = ksig->sig; |
416 | regs->ARM_sp = (unsigned long)frame; | 405 | regs->ARM_sp = (unsigned long)frame; |
417 | regs->ARM_lr = retcode; | 406 | regs->ARM_lr = retcode; |
418 | regs->ARM_pc = handler; | 407 | regs->ARM_pc = handler; |
diff --git a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c index 788e23fe64d8..3dce1a342030 100644 --- a/arch/arm/kernel/traps.c +++ b/arch/arm/kernel/traps.c | |||
@@ -505,12 +505,10 @@ asmlinkage void bad_mode(struct pt_regs *regs, int reason) | |||
505 | 505 | ||
506 | static int bad_syscall(int n, struct pt_regs *regs) | 506 | static int bad_syscall(int n, struct pt_regs *regs) |
507 | { | 507 | { |
508 | struct thread_info *thread = current_thread_info(); | ||
509 | siginfo_t info; | 508 | siginfo_t info; |
510 | 509 | ||
511 | if ((current->personality & PER_MASK) != PER_LINUX && | 510 | if ((current->personality & PER_MASK) != PER_LINUX) { |
512 | thread->exec_domain->handler) { | 511 | send_sig(SIGSEGV, current, 1); |
513 | thread->exec_domain->handler(n, regs); | ||
514 | return regs->ARM_r0; | 512 | return regs->ARM_r0; |
515 | } | 513 | } |
516 | 514 | ||
diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h index 702e1e6a0d80..dcd06d18a42a 100644 --- a/arch/arm64/include/asm/thread_info.h +++ b/arch/arm64/include/asm/thread_info.h | |||
@@ -33,7 +33,6 @@ | |||
33 | #ifndef __ASSEMBLY__ | 33 | #ifndef __ASSEMBLY__ |
34 | 34 | ||
35 | struct task_struct; | 35 | struct task_struct; |
36 | struct exec_domain; | ||
37 | 36 | ||
38 | #include <asm/types.h> | 37 | #include <asm/types.h> |
39 | 38 | ||
@@ -47,7 +46,6 @@ struct thread_info { | |||
47 | unsigned long flags; /* low level flags */ | 46 | unsigned long flags; /* low level flags */ |
48 | mm_segment_t addr_limit; /* address limit */ | 47 | mm_segment_t addr_limit; /* address limit */ |
49 | struct task_struct *task; /* main task structure */ | 48 | struct task_struct *task; /* main task structure */ |
50 | struct exec_domain *exec_domain; /* execution domain */ | ||
51 | int preempt_count; /* 0 => preemptable, <0 => bug */ | 49 | int preempt_count; /* 0 => preemptable, <0 => bug */ |
52 | int cpu; /* cpu */ | 50 | int cpu; /* cpu */ |
53 | }; | 51 | }; |
@@ -55,7 +53,6 @@ struct thread_info { | |||
55 | #define INIT_THREAD_INFO(tsk) \ | 53 | #define INIT_THREAD_INFO(tsk) \ |
56 | { \ | 54 | { \ |
57 | .task = &tsk, \ | 55 | .task = &tsk, \ |
58 | .exec_domain = &default_exec_domain, \ | ||
59 | .flags = 0, \ | 56 | .flags = 0, \ |
60 | .preempt_count = INIT_PREEMPT_COUNT, \ | 57 | .preempt_count = INIT_PREEMPT_COUNT, \ |
61 | .addr_limit = KERNEL_DS, \ | 58 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c index f7fa65d4c352..56cadd3606bf 100644 --- a/arch/arm64/kernel/asm-offsets.c +++ b/arch/arm64/kernel/asm-offsets.c | |||
@@ -38,7 +38,6 @@ int main(void) | |||
38 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | 38 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); |
39 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); | 39 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); |
40 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 40 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
41 | DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); | ||
42 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 41 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
43 | BLANK(); | 42 | BLANK(); |
44 | DEFINE(THREAD_CPU_CONTEXT, offsetof(struct task_struct, thread.cpu_context)); | 43 | DEFINE(THREAD_CPU_CONTEXT, offsetof(struct task_struct, thread.cpu_context)); |
diff --git a/arch/arm64/kernel/signal.c b/arch/arm64/kernel/signal.c index 660ccf9f7524..e18c48cb6db1 100644 --- a/arch/arm64/kernel/signal.c +++ b/arch/arm64/kernel/signal.c | |||
@@ -287,19 +287,12 @@ static void setup_restart_syscall(struct pt_regs *regs) | |||
287 | */ | 287 | */ |
288 | static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) | 288 | static void handle_signal(struct ksignal *ksig, struct pt_regs *regs) |
289 | { | 289 | { |
290 | struct thread_info *thread = current_thread_info(); | ||
291 | struct task_struct *tsk = current; | 290 | struct task_struct *tsk = current; |
292 | sigset_t *oldset = sigmask_to_save(); | 291 | sigset_t *oldset = sigmask_to_save(); |
293 | int usig = ksig->sig; | 292 | int usig = ksig->sig; |
294 | int ret; | 293 | int ret; |
295 | 294 | ||
296 | /* | 295 | /* |
297 | * translate the signal | ||
298 | */ | ||
299 | if (usig < 32 && thread->exec_domain && thread->exec_domain->signal_invmap) | ||
300 | usig = thread->exec_domain->signal_invmap[usig]; | ||
301 | |||
302 | /* | ||
303 | * Set up the stack frame | 296 | * Set up the stack frame |
304 | */ | 297 | */ |
305 | if (is_compat_task()) { | 298 | if (is_compat_task()) { |
diff --git a/arch/avr32/include/asm/thread_info.h b/arch/avr32/include/asm/thread_info.h index d56afa99a514..d4d3079541ea 100644 --- a/arch/avr32/include/asm/thread_info.h +++ b/arch/avr32/include/asm/thread_info.h | |||
@@ -17,11 +17,9 @@ | |||
17 | #include <asm/types.h> | 17 | #include <asm/types.h> |
18 | 18 | ||
19 | struct task_struct; | 19 | struct task_struct; |
20 | struct exec_domain; | ||
21 | 20 | ||
22 | struct thread_info { | 21 | struct thread_info { |
23 | struct task_struct *task; /* main task structure */ | 22 | struct task_struct *task; /* main task structure */ |
24 | struct exec_domain *exec_domain; /* execution domain */ | ||
25 | unsigned long flags; /* low level flags */ | 23 | unsigned long flags; /* low level flags */ |
26 | __u32 cpu; | 24 | __u32 cpu; |
27 | __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ | 25 | __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ |
@@ -36,7 +34,6 @@ struct thread_info { | |||
36 | #define INIT_THREAD_INFO(tsk) \ | 34 | #define INIT_THREAD_INFO(tsk) \ |
37 | { \ | 35 | { \ |
38 | .task = &tsk, \ | 36 | .task = &tsk, \ |
39 | .exec_domain = &default_exec_domain, \ | ||
40 | .flags = 0, \ | 37 | .flags = 0, \ |
41 | .cpu = 0, \ | 38 | .cpu = 0, \ |
42 | .preempt_count = INIT_PREEMPT_COUNT, \ | 39 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/avr32/kernel/asm-offsets.c b/arch/avr32/kernel/asm-offsets.c index e41c84516e5d..2c9764fe3532 100644 --- a/arch/avr32/kernel/asm-offsets.c +++ b/arch/avr32/kernel/asm-offsets.c | |||
@@ -12,7 +12,6 @@ | |||
12 | void foo(void) | 12 | void foo(void) |
13 | { | 13 | { |
14 | OFFSET(TI_task, thread_info, task); | 14 | OFFSET(TI_task, thread_info, task); |
15 | OFFSET(TI_exec_domain, thread_info, exec_domain); | ||
16 | OFFSET(TI_flags, thread_info, flags); | 15 | OFFSET(TI_flags, thread_info, flags); |
17 | OFFSET(TI_cpu, thread_info, cpu); | 16 | OFFSET(TI_cpu, thread_info, cpu); |
18 | OFFSET(TI_preempt_count, thread_info, preempt_count); | 17 | OFFSET(TI_preempt_count, thread_info, preempt_count); |
diff --git a/arch/blackfin/include/asm/thread_info.h b/arch/blackfin/include/asm/thread_info.h index 57c3a8bd583d..2966b93850a1 100644 --- a/arch/blackfin/include/asm/thread_info.h +++ b/arch/blackfin/include/asm/thread_info.h | |||
@@ -37,7 +37,6 @@ typedef unsigned long mm_segment_t; | |||
37 | 37 | ||
38 | struct thread_info { | 38 | struct thread_info { |
39 | struct task_struct *task; /* main task structure */ | 39 | struct task_struct *task; /* main task structure */ |
40 | struct exec_domain *exec_domain; /* execution domain */ | ||
41 | unsigned long flags; /* low level flags */ | 40 | unsigned long flags; /* low level flags */ |
42 | int cpu; /* cpu we're on */ | 41 | int cpu; /* cpu we're on */ |
43 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 42 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
@@ -53,7 +52,6 @@ struct thread_info { | |||
53 | #define INIT_THREAD_INFO(tsk) \ | 52 | #define INIT_THREAD_INFO(tsk) \ |
54 | { \ | 53 | { \ |
55 | .task = &tsk, \ | 54 | .task = &tsk, \ |
56 | .exec_domain = &default_exec_domain, \ | ||
57 | .flags = 0, \ | 55 | .flags = 0, \ |
58 | .cpu = 0, \ | 56 | .cpu = 0, \ |
59 | .preempt_count = INIT_PREEMPT_COUNT, \ | 57 | .preempt_count = INIT_PREEMPT_COUNT, \ |
@@ -76,15 +74,6 @@ static inline struct thread_info *current_thread_info(void) | |||
76 | #endif /* __ASSEMBLY__ */ | 74 | #endif /* __ASSEMBLY__ */ |
77 | 75 | ||
78 | /* | 76 | /* |
79 | * Offsets in thread_info structure, used in assembly code | ||
80 | */ | ||
81 | #define TI_TASK 0 | ||
82 | #define TI_EXECDOMAIN 4 | ||
83 | #define TI_FLAGS 8 | ||
84 | #define TI_CPU 12 | ||
85 | #define TI_PREEMPT 16 | ||
86 | |||
87 | /* | ||
88 | * thread information flag bit numbers | 77 | * thread information flag bit numbers |
89 | */ | 78 | */ |
90 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ | 79 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ |
diff --git a/arch/blackfin/kernel/asm-offsets.c b/arch/blackfin/kernel/asm-offsets.c index 37fcae950216..486560aea050 100644 --- a/arch/blackfin/kernel/asm-offsets.c +++ b/arch/blackfin/kernel/asm-offsets.c | |||
@@ -42,6 +42,12 @@ int main(void) | |||
42 | DEFINE(THREAD_PC, offsetof(struct thread_struct, pc)); | 42 | DEFINE(THREAD_PC, offsetof(struct thread_struct, pc)); |
43 | DEFINE(KERNEL_STACK_SIZE, THREAD_SIZE); | 43 | DEFINE(KERNEL_STACK_SIZE, THREAD_SIZE); |
44 | 44 | ||
45 | /* offsets in thread_info struct */ | ||
46 | OFFSET(TI_TASK, thread_info, task); | ||
47 | OFFSET(TI_FLAGS, thread_info, flags); | ||
48 | OFFSET(TI_CPU, thread_info, cpu); | ||
49 | OFFSET(TI_PREEMPT, thread_info, preempt_count); | ||
50 | |||
45 | /* offsets into the pt_regs */ | 51 | /* offsets into the pt_regs */ |
46 | DEFINE(PT_ORIG_R0, offsetof(struct pt_regs, orig_r0)); | 52 | DEFINE(PT_ORIG_R0, offsetof(struct pt_regs, orig_r0)); |
47 | DEFINE(PT_ORIG_P0, offsetof(struct pt_regs, orig_p0)); | 53 | DEFINE(PT_ORIG_P0, offsetof(struct pt_regs, orig_p0)); |
diff --git a/arch/blackfin/kernel/signal.c b/arch/blackfin/kernel/signal.c index f2a8b5493bd3..ea570db598e5 100644 --- a/arch/blackfin/kernel/signal.c +++ b/arch/blackfin/kernel/signal.c | |||
@@ -151,11 +151,7 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) | |||
151 | 151 | ||
152 | frame = get_sigframe(ksig, sizeof(*frame)); | 152 | frame = get_sigframe(ksig, sizeof(*frame)); |
153 | 153 | ||
154 | err |= __put_user((current_thread_info()->exec_domain | 154 | err |= __put_user(ksig->sig, &frame->sig); |
155 | && current_thread_info()->exec_domain->signal_invmap | ||
156 | && ksig->sig < 32 | ||
157 | ? current_thread_info()->exec_domain-> | ||
158 | signal_invmap[ksig->sig] : ksig->sig), &frame->sig); | ||
159 | 155 | ||
160 | err |= __put_user(&frame->info, &frame->pinfo); | 156 | err |= __put_user(&frame->info, &frame->pinfo); |
161 | err |= __put_user(&frame->uc, &frame->puc); | 157 | err |= __put_user(&frame->uc, &frame->puc); |
diff --git a/arch/blackfin/kernel/traps.c b/arch/blackfin/kernel/traps.c index de5c2c3ebd9b..1ed85ddadc0d 100644 --- a/arch/blackfin/kernel/traps.c +++ b/arch/blackfin/kernel/traps.c | |||
@@ -18,6 +18,7 @@ | |||
18 | #include <asm/fixed_code.h> | 18 | #include <asm/fixed_code.h> |
19 | #include <asm/pseudo_instructions.h> | 19 | #include <asm/pseudo_instructions.h> |
20 | #include <asm/pda.h> | 20 | #include <asm/pda.h> |
21 | #include <asm/asm-offsets.h> | ||
21 | 22 | ||
22 | #ifdef CONFIG_KGDB | 23 | #ifdef CONFIG_KGDB |
23 | # include <linux/kgdb.h> | 24 | # include <linux/kgdb.h> |
diff --git a/arch/c6x/include/asm/thread_info.h b/arch/c6x/include/asm/thread_info.h index 584e253f3217..acc70c135ab8 100644 --- a/arch/c6x/include/asm/thread_info.h +++ b/arch/c6x/include/asm/thread_info.h | |||
@@ -40,7 +40,6 @@ typedef struct { | |||
40 | */ | 40 | */ |
41 | struct thread_info { | 41 | struct thread_info { |
42 | struct task_struct *task; /* main task structure */ | 42 | struct task_struct *task; /* main task structure */ |
43 | struct exec_domain *exec_domain; /* execution domain */ | ||
44 | unsigned long flags; /* low level flags */ | 43 | unsigned long flags; /* low level flags */ |
45 | int cpu; /* cpu we're on */ | 44 | int cpu; /* cpu we're on */ |
46 | int preempt_count; /* 0 = preemptable, <0 = BUG */ | 45 | int preempt_count; /* 0 = preemptable, <0 = BUG */ |
@@ -55,7 +54,6 @@ struct thread_info { | |||
55 | #define INIT_THREAD_INFO(tsk) \ | 54 | #define INIT_THREAD_INFO(tsk) \ |
56 | { \ | 55 | { \ |
57 | .task = &tsk, \ | 56 | .task = &tsk, \ |
58 | .exec_domain = &default_exec_domain, \ | ||
59 | .flags = 0, \ | 57 | .flags = 0, \ |
60 | .cpu = 0, \ | 58 | .cpu = 0, \ |
61 | .preempt_count = INIT_PREEMPT_COUNT, \ | 59 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/cris/arch-v10/kernel/signal.c b/arch/cris/arch-v10/kernel/signal.c index 74d7ba35120d..7122d9773b13 100644 --- a/arch/cris/arch-v10/kernel/signal.c +++ b/arch/cris/arch-v10/kernel/signal.c | |||
@@ -321,8 +321,6 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
321 | if (err) | 321 | if (err) |
322 | return -EFAULT; | 322 | return -EFAULT; |
323 | 323 | ||
324 | /* TODO what is the current->exec_domain stuff and invmap ? */ | ||
325 | |||
326 | /* Set up registers for signal handler */ | 324 | /* Set up registers for signal handler */ |
327 | 325 | ||
328 | /* What we enter NOW */ | 326 | /* What we enter NOW */ |
diff --git a/arch/cris/arch-v32/kernel/signal.c b/arch/cris/arch-v32/kernel/signal.c index 870e3e069318..0c9ce9eac614 100644 --- a/arch/cris/arch-v32/kernel/signal.c +++ b/arch/cris/arch-v32/kernel/signal.c | |||
@@ -287,8 +287,6 @@ setup_rt_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) | |||
287 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 287 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
288 | return -EFAULT; | 288 | return -EFAULT; |
289 | 289 | ||
290 | /* TODO: what is the current->exec_domain stuff and invmap ? */ | ||
291 | |||
292 | err |= __put_user(&frame->info, &frame->pinfo); | 290 | err |= __put_user(&frame->info, &frame->pinfo); |
293 | err |= __put_user(&frame->uc, &frame->puc); | 291 | err |= __put_user(&frame->uc, &frame->puc); |
294 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 292 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
diff --git a/arch/cris/include/asm/thread_info.h b/arch/cris/include/asm/thread_info.h index 7286db5ed90e..4ead1b40d2d7 100644 --- a/arch/cris/include/asm/thread_info.h +++ b/arch/cris/include/asm/thread_info.h | |||
@@ -28,7 +28,6 @@ | |||
28 | #ifndef __ASSEMBLY__ | 28 | #ifndef __ASSEMBLY__ |
29 | struct thread_info { | 29 | struct thread_info { |
30 | struct task_struct *task; /* main task structure */ | 30 | struct task_struct *task; /* main task structure */ |
31 | struct exec_domain *exec_domain; /* execution domain */ | ||
32 | unsigned long flags; /* low level flags */ | 31 | unsigned long flags; /* low level flags */ |
33 | __u32 cpu; /* current CPU */ | 32 | __u32 cpu; /* current CPU */ |
34 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 33 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
@@ -50,7 +49,6 @@ struct thread_info { | |||
50 | #define INIT_THREAD_INFO(tsk) \ | 49 | #define INIT_THREAD_INFO(tsk) \ |
51 | { \ | 50 | { \ |
52 | .task = &tsk, \ | 51 | .task = &tsk, \ |
53 | .exec_domain = &default_exec_domain, \ | ||
54 | .flags = 0, \ | 52 | .flags = 0, \ |
55 | .cpu = 0, \ | 53 | .cpu = 0, \ |
56 | .preempt_count = INIT_PREEMPT_COUNT, \ | 54 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/frv/include/asm/thread_info.h b/arch/frv/include/asm/thread_info.h index 6b917f1c2955..ccba3b6ce918 100644 --- a/arch/frv/include/asm/thread_info.h +++ b/arch/frv/include/asm/thread_info.h | |||
@@ -31,7 +31,6 @@ | |||
31 | 31 | ||
32 | struct thread_info { | 32 | struct thread_info { |
33 | struct task_struct *task; /* main task structure */ | 33 | struct task_struct *task; /* main task structure */ |
34 | struct exec_domain *exec_domain; /* execution domain */ | ||
35 | unsigned long flags; /* low level flags */ | 34 | unsigned long flags; /* low level flags */ |
36 | unsigned long status; /* thread-synchronous flags */ | 35 | unsigned long status; /* thread-synchronous flags */ |
37 | __u32 cpu; /* current CPU */ | 36 | __u32 cpu; /* current CPU */ |
@@ -59,7 +58,6 @@ struct thread_info { | |||
59 | #define INIT_THREAD_INFO(tsk) \ | 58 | #define INIT_THREAD_INFO(tsk) \ |
60 | { \ | 59 | { \ |
61 | .task = &tsk, \ | 60 | .task = &tsk, \ |
62 | .exec_domain = &default_exec_domain, \ | ||
63 | .flags = 0, \ | 61 | .flags = 0, \ |
64 | .cpu = 0, \ | 62 | .cpu = 0, \ |
65 | .preempt_count = INIT_PREEMPT_COUNT, \ | 63 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/frv/kernel/asm-offsets.c b/arch/frv/kernel/asm-offsets.c index 446e89d500cc..8414293f213a 100644 --- a/arch/frv/kernel/asm-offsets.c +++ b/arch/frv/kernel/asm-offsets.c | |||
@@ -34,7 +34,6 @@ void foo(void) | |||
34 | { | 34 | { |
35 | /* offsets into the thread_info structure */ | 35 | /* offsets into the thread_info structure */ |
36 | OFFSET(TI_TASK, thread_info, task); | 36 | OFFSET(TI_TASK, thread_info, task); |
37 | OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain); | ||
38 | OFFSET(TI_FLAGS, thread_info, flags); | 37 | OFFSET(TI_FLAGS, thread_info, flags); |
39 | OFFSET(TI_STATUS, thread_info, status); | 38 | OFFSET(TI_STATUS, thread_info, status); |
40 | OFFSET(TI_CPU, thread_info, cpu); | 39 | OFFSET(TI_CPU, thread_info, cpu); |
diff --git a/arch/frv/kernel/signal.c b/arch/frv/kernel/signal.c index 85ca6727ca07..82d5e914dc15 100644 --- a/arch/frv/kernel/signal.c +++ b/arch/frv/kernel/signal.c | |||
@@ -174,20 +174,14 @@ static inline void __user *get_sigframe(struct ksignal *ksig, | |||
174 | static int setup_frame(struct ksignal *ksig, sigset_t *set) | 174 | static int setup_frame(struct ksignal *ksig, sigset_t *set) |
175 | { | 175 | { |
176 | struct sigframe __user *frame; | 176 | struct sigframe __user *frame; |
177 | int rsig, sig = ksig->sig; | 177 | int sig = ksig->sig; |
178 | 178 | ||
179 | frame = get_sigframe(ksig, sizeof(*frame)); | 179 | frame = get_sigframe(ksig, sizeof(*frame)); |
180 | 180 | ||
181 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 181 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
182 | return -EFAULT; | 182 | return -EFAULT; |
183 | 183 | ||
184 | rsig = sig; | 184 | if (__put_user(sig, &frame->sig) < 0) |
185 | if (sig < 32 && | ||
186 | __current_thread_info->exec_domain && | ||
187 | __current_thread_info->exec_domain->signal_invmap) | ||
188 | rsig = __current_thread_info->exec_domain->signal_invmap[sig]; | ||
189 | |||
190 | if (__put_user(rsig, &frame->sig) < 0) | ||
191 | return -EFAULT; | 185 | return -EFAULT; |
192 | 186 | ||
193 | if (setup_sigcontext(&frame->sc, set->sig[0])) | 187 | if (setup_sigcontext(&frame->sc, set->sig[0])) |
@@ -253,20 +247,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set) | |||
253 | static int setup_rt_frame(struct ksignal *ksig, sigset_t *set) | 247 | static int setup_rt_frame(struct ksignal *ksig, sigset_t *set) |
254 | { | 248 | { |
255 | struct rt_sigframe __user *frame; | 249 | struct rt_sigframe __user *frame; |
256 | int rsig, sig = ksig->sig; | 250 | int sig = ksig->sig; |
257 | 251 | ||
258 | frame = get_sigframe(ksig, sizeof(*frame)); | 252 | frame = get_sigframe(ksig, sizeof(*frame)); |
259 | 253 | ||
260 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 254 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
261 | return -EFAULT; | 255 | return -EFAULT; |
262 | 256 | ||
263 | rsig = sig; | 257 | if (__put_user(sig, &frame->sig) || |
264 | if (sig < 32 && | ||
265 | __current_thread_info->exec_domain && | ||
266 | __current_thread_info->exec_domain->signal_invmap) | ||
267 | rsig = __current_thread_info->exec_domain->signal_invmap[sig]; | ||
268 | |||
269 | if (__put_user(rsig, &frame->sig) || | ||
270 | __put_user(&frame->info, &frame->pinfo) || | 258 | __put_user(&frame->info, &frame->pinfo) || |
271 | __put_user(&frame->uc, &frame->puc)) | 259 | __put_user(&frame->uc, &frame->puc)) |
272 | return -EFAULT; | 260 | return -EFAULT; |
diff --git a/arch/hexagon/include/asm/thread_info.h b/arch/hexagon/include/asm/thread_info.h index bacd3d6030c5..b80fe1db7b64 100644 --- a/arch/hexagon/include/asm/thread_info.h +++ b/arch/hexagon/include/asm/thread_info.h | |||
@@ -47,7 +47,6 @@ typedef struct { | |||
47 | 47 | ||
48 | struct thread_info { | 48 | struct thread_info { |
49 | struct task_struct *task; /* main task structure */ | 49 | struct task_struct *task; /* main task structure */ |
50 | struct exec_domain *exec_domain; /* execution domain */ | ||
51 | unsigned long flags; /* low level flags */ | 50 | unsigned long flags; /* low level flags */ |
52 | __u32 cpu; /* current cpu */ | 51 | __u32 cpu; /* current cpu */ |
53 | int preempt_count; /* 0=>preemptible,<0=>BUG */ | 52 | int preempt_count; /* 0=>preemptible,<0=>BUG */ |
@@ -77,7 +76,6 @@ struct thread_info { | |||
77 | #define INIT_THREAD_INFO(tsk) \ | 76 | #define INIT_THREAD_INFO(tsk) \ |
78 | { \ | 77 | { \ |
79 | .task = &tsk, \ | 78 | .task = &tsk, \ |
80 | .exec_domain = &default_exec_domain, \ | ||
81 | .flags = 0, \ | 79 | .flags = 0, \ |
82 | .cpu = 0, \ | 80 | .cpu = 0, \ |
83 | .preempt_count = 1, \ | 81 | .preempt_count = 1, \ |
diff --git a/arch/ia64/include/asm/thread_info.h b/arch/ia64/include/asm/thread_info.h index c16f21a068ff..aa995b67c3f5 100644 --- a/arch/ia64/include/asm/thread_info.h +++ b/arch/ia64/include/asm/thread_info.h | |||
@@ -20,7 +20,6 @@ | |||
20 | */ | 20 | */ |
21 | struct thread_info { | 21 | struct thread_info { |
22 | struct task_struct *task; /* XXX not really needed, except for dup_task_struct() */ | 22 | struct task_struct *task; /* XXX not really needed, except for dup_task_struct() */ |
23 | struct exec_domain *exec_domain;/* execution domain */ | ||
24 | __u32 flags; /* thread_info flags (see TIF_*) */ | 23 | __u32 flags; /* thread_info flags (see TIF_*) */ |
25 | __u32 cpu; /* current CPU */ | 24 | __u32 cpu; /* current CPU */ |
26 | __u32 last_cpu; /* Last CPU thread ran on */ | 25 | __u32 last_cpu; /* Last CPU thread ran on */ |
@@ -40,7 +39,6 @@ struct thread_info { | |||
40 | #define INIT_THREAD_INFO(tsk) \ | 39 | #define INIT_THREAD_INFO(tsk) \ |
41 | { \ | 40 | { \ |
42 | .task = &tsk, \ | 41 | .task = &tsk, \ |
43 | .exec_domain = &default_exec_domain, \ | ||
44 | .flags = 0, \ | 42 | .flags = 0, \ |
45 | .cpu = 0, \ | 43 | .cpu = 0, \ |
46 | .addr_limit = KERNEL_DS, \ | 44 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index 6b3345758d3e..a9b65cf7b34a 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
@@ -692,31 +692,6 @@ int arch_remove_memory(u64 start, u64 size) | |||
692 | #endif | 692 | #endif |
693 | #endif | 693 | #endif |
694 | 694 | ||
695 | /* | ||
696 | * Even when CONFIG_IA32_SUPPORT is not enabled it is | ||
697 | * useful to have the Linux/x86 domain registered to | ||
698 | * avoid an attempted module load when emulators call | ||
699 | * personality(PER_LINUX32). This saves several milliseconds | ||
700 | * on each such call. | ||
701 | */ | ||
702 | static struct exec_domain ia32_exec_domain; | ||
703 | |||
704 | static int __init | ||
705 | per_linux32_init(void) | ||
706 | { | ||
707 | ia32_exec_domain.name = "Linux/x86"; | ||
708 | ia32_exec_domain.handler = NULL; | ||
709 | ia32_exec_domain.pers_low = PER_LINUX32; | ||
710 | ia32_exec_domain.pers_high = PER_LINUX32; | ||
711 | ia32_exec_domain.signal_map = default_exec_domain.signal_map; | ||
712 | ia32_exec_domain.signal_invmap = default_exec_domain.signal_invmap; | ||
713 | register_exec_domain(&ia32_exec_domain); | ||
714 | |||
715 | return 0; | ||
716 | } | ||
717 | |||
718 | __initcall(per_linux32_init); | ||
719 | |||
720 | /** | 695 | /** |
721 | * show_mem - give short summary of memory stats | 696 | * show_mem - give short summary of memory stats |
722 | * | 697 | * |
diff --git a/arch/m32r/include/asm/asm-offsets.h b/arch/m32r/include/asm/asm-offsets.h new file mode 100644 index 000000000000..d370ee36a182 --- /dev/null +++ b/arch/m32r/include/asm/asm-offsets.h | |||
@@ -0,0 +1 @@ | |||
#include <generated/asm-offsets.h> | |||
diff --git a/arch/m32r/include/asm/thread_info.h b/arch/m32r/include/asm/thread_info.h index 32422d0211c3..f630d9c30b28 100644 --- a/arch/m32r/include/asm/thread_info.h +++ b/arch/m32r/include/asm/thread_info.h | |||
@@ -24,7 +24,6 @@ | |||
24 | 24 | ||
25 | struct thread_info { | 25 | struct thread_info { |
26 | struct task_struct *task; /* main task structure */ | 26 | struct task_struct *task; /* main task structure */ |
27 | struct exec_domain *exec_domain; /* execution domain */ | ||
28 | unsigned long flags; /* low level flags */ | 27 | unsigned long flags; /* low level flags */ |
29 | unsigned long status; /* thread-synchronous flags */ | 28 | unsigned long status; /* thread-synchronous flags */ |
30 | __u32 cpu; /* current CPU */ | 29 | __u32 cpu; /* current CPU */ |
@@ -38,18 +37,7 @@ struct thread_info { | |||
38 | __u8 supervisor_stack[0]; | 37 | __u8 supervisor_stack[0]; |
39 | }; | 38 | }; |
40 | 39 | ||
41 | #else /* !__ASSEMBLY__ */ | 40 | #endif /* !__ASSEMBLY__ */ |
42 | |||
43 | /* offsets into the thread_info struct for assembly code access */ | ||
44 | #define TI_TASK 0x00000000 | ||
45 | #define TI_EXEC_DOMAIN 0x00000004 | ||
46 | #define TI_FLAGS 0x00000008 | ||
47 | #define TI_STATUS 0x0000000C | ||
48 | #define TI_CPU 0x00000010 | ||
49 | #define TI_PRE_COUNT 0x00000014 | ||
50 | #define TI_ADDR_LIMIT 0x00000018 | ||
51 | |||
52 | #endif | ||
53 | 41 | ||
54 | #define THREAD_SIZE (PAGE_SIZE << 1) | 42 | #define THREAD_SIZE (PAGE_SIZE << 1) |
55 | #define THREAD_SIZE_ORDER 1 | 43 | #define THREAD_SIZE_ORDER 1 |
@@ -61,7 +49,6 @@ struct thread_info { | |||
61 | #define INIT_THREAD_INFO(tsk) \ | 49 | #define INIT_THREAD_INFO(tsk) \ |
62 | { \ | 50 | { \ |
63 | .task = &tsk, \ | 51 | .task = &tsk, \ |
64 | .exec_domain = &default_exec_domain, \ | ||
65 | .flags = 0, \ | 52 | .flags = 0, \ |
66 | .cpu = 0, \ | 53 | .cpu = 0, \ |
67 | .preempt_count = INIT_PREEMPT_COUNT, \ | 54 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/m32r/kernel/asm-offsets.c b/arch/m32r/kernel/asm-offsets.c index 9e263112a6e2..cd3d2fc9c8df 100644 --- a/arch/m32r/kernel/asm-offsets.c +++ b/arch/m32r/kernel/asm-offsets.c | |||
@@ -1 +1,14 @@ | |||
1 | /* Dummy asm-offsets.c file. Required by kbuild and ready to be used - hint! */ | 1 | #include <linux/thread_info.h> |
2 | #include <linux/kbuild.h> | ||
3 | |||
4 | int foo(void) | ||
5 | { | ||
6 | OFFSET(TI_TASK, thread_info, task); | ||
7 | OFFSET(TI_FLAGS, thread_info, flags); | ||
8 | OFFSET(TI_STATUS, thread_info, status); | ||
9 | OFFSET(TI_CPU, thread_info, cpu); | ||
10 | OFFSET(TI_PRE_COUNT, thread_info, preempt_count); | ||
11 | OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit); | ||
12 | |||
13 | return 0; | ||
14 | } | ||
diff --git a/arch/m32r/kernel/entry.S b/arch/m32r/kernel/entry.S index 7c3db9940ce1..c639bfa32232 100644 --- a/arch/m32r/kernel/entry.S +++ b/arch/m32r/kernel/entry.S | |||
@@ -65,6 +65,7 @@ | |||
65 | #include <asm/page.h> | 65 | #include <asm/page.h> |
66 | #include <asm/m32r.h> | 66 | #include <asm/m32r.h> |
67 | #include <asm/mmu_context.h> | 67 | #include <asm/mmu_context.h> |
68 | #include <asm/asm-offsets.h> | ||
68 | 69 | ||
69 | #if !defined(CONFIG_MMU) | 70 | #if !defined(CONFIG_MMU) |
70 | #define sys_madvise sys_ni_syscall | 71 | #define sys_madvise sys_ni_syscall |
diff --git a/arch/m32r/kernel/signal.c b/arch/m32r/kernel/signal.c index 8c25e0c8f6a5..1c81e24fd006 100644 --- a/arch/m32r/kernel/signal.c +++ b/arch/m32r/kernel/signal.c | |||
@@ -172,20 +172,14 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
172 | { | 172 | { |
173 | struct rt_sigframe __user *frame; | 173 | struct rt_sigframe __user *frame; |
174 | int err = 0; | 174 | int err = 0; |
175 | int signal, sig = ksig->sig; | 175 | int sig = ksig->sig; |
176 | 176 | ||
177 | frame = get_sigframe(ksig, regs->spu, sizeof(*frame)); | 177 | frame = get_sigframe(ksig, regs->spu, sizeof(*frame)); |
178 | 178 | ||
179 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 179 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
180 | return -EFAULT; | 180 | return -EFAULT; |
181 | 181 | ||
182 | signal = current_thread_info()->exec_domain | 182 | err |= __put_user(sig, &frame->sig); |
183 | && current_thread_info()->exec_domain->signal_invmap | ||
184 | && sig < 32 | ||
185 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
186 | : sig; | ||
187 | |||
188 | err |= __put_user(signal, &frame->sig); | ||
189 | if (err) | 183 | if (err) |
190 | return -EFAULT; | 184 | return -EFAULT; |
191 | 185 | ||
@@ -209,7 +203,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
209 | 203 | ||
210 | /* Set up registers for signal handler */ | 204 | /* Set up registers for signal handler */ |
211 | regs->spu = (unsigned long)frame; | 205 | regs->spu = (unsigned long)frame; |
212 | regs->r0 = signal; /* Arg for signal handler */ | 206 | regs->r0 = sig; /* Arg for signal handler */ |
213 | regs->r1 = (unsigned long)&frame->info; | 207 | regs->r1 = (unsigned long)&frame->info; |
214 | regs->r2 = (unsigned long)&frame->uc; | 208 | regs->r2 = (unsigned long)&frame->uc; |
215 | regs->bpc = (unsigned long)ksig->ka.sa.sa_handler; | 209 | regs->bpc = (unsigned long)ksig->ka.sa.sa_handler; |
diff --git a/arch/m68k/include/asm/thread_info.h b/arch/m68k/include/asm/thread_info.h index c54256e69e64..cee13c2e5161 100644 --- a/arch/m68k/include/asm/thread_info.h +++ b/arch/m68k/include/asm/thread_info.h | |||
@@ -26,7 +26,6 @@ | |||
26 | struct thread_info { | 26 | struct thread_info { |
27 | struct task_struct *task; /* main task structure */ | 27 | struct task_struct *task; /* main task structure */ |
28 | unsigned long flags; | 28 | unsigned long flags; |
29 | struct exec_domain *exec_domain; /* execution domain */ | ||
30 | mm_segment_t addr_limit; /* thread address space */ | 29 | mm_segment_t addr_limit; /* thread address space */ |
31 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 30 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
32 | __u32 cpu; /* should always be 0 on m68k */ | 31 | __u32 cpu; /* should always be 0 on m68k */ |
@@ -37,7 +36,6 @@ struct thread_info { | |||
37 | #define INIT_THREAD_INFO(tsk) \ | 36 | #define INIT_THREAD_INFO(tsk) \ |
38 | { \ | 37 | { \ |
39 | .task = &tsk, \ | 38 | .task = &tsk, \ |
40 | .exec_domain = &default_exec_domain, \ | ||
41 | .addr_limit = KERNEL_DS, \ | 39 | .addr_limit = KERNEL_DS, \ |
42 | .preempt_count = INIT_PREEMPT_COUNT, \ | 40 | .preempt_count = INIT_PREEMPT_COUNT, \ |
43 | } | 41 | } |
diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c index d7179281e74a..af1c4f330aef 100644 --- a/arch/m68k/kernel/signal.c +++ b/arch/m68k/kernel/signal.c | |||
@@ -863,12 +863,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
863 | if (fsize) | 863 | if (fsize) |
864 | err |= copy_to_user (frame + 1, regs + 1, fsize); | 864 | err |= copy_to_user (frame + 1, regs + 1, fsize); |
865 | 865 | ||
866 | err |= __put_user((current_thread_info()->exec_domain | 866 | err |= __put_user(sig, &frame->sig); |
867 | && current_thread_info()->exec_domain->signal_invmap | ||
868 | && sig < 32 | ||
869 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
870 | : sig), | ||
871 | &frame->sig); | ||
872 | 867 | ||
873 | err |= __put_user(regs->vector, &frame->code); | 868 | err |= __put_user(regs->vector, &frame->code); |
874 | err |= __put_user(&frame->sc, &frame->psc); | 869 | err |= __put_user(&frame->sc, &frame->psc); |
@@ -948,12 +943,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
948 | if (fsize) | 943 | if (fsize) |
949 | err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize); | 944 | err |= copy_to_user (&frame->uc.uc_extra, regs + 1, fsize); |
950 | 945 | ||
951 | err |= __put_user((current_thread_info()->exec_domain | 946 | err |= __put_user(sig, &frame->sig); |
952 | && current_thread_info()->exec_domain->signal_invmap | ||
953 | && sig < 32 | ||
954 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
955 | : sig), | ||
956 | &frame->sig); | ||
957 | err |= __put_user(&frame->info, &frame->pinfo); | 947 | err |= __put_user(&frame->info, &frame->pinfo); |
958 | err |= __put_user(&frame->uc, &frame->puc); | 948 | err |= __put_user(&frame->uc, &frame->puc); |
959 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 949 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
diff --git a/arch/metag/include/asm/thread_info.h b/arch/metag/include/asm/thread_info.h index afb3ca4776d1..32677cc278aa 100644 --- a/arch/metag/include/asm/thread_info.h +++ b/arch/metag/include/asm/thread_info.h | |||
@@ -28,7 +28,6 @@ | |||
28 | /* This must be 8 byte aligned so we can ensure stack alignment. */ | 28 | /* This must be 8 byte aligned so we can ensure stack alignment. */ |
29 | struct thread_info { | 29 | struct thread_info { |
30 | struct task_struct *task; /* main task structure */ | 30 | struct task_struct *task; /* main task structure */ |
31 | struct exec_domain *exec_domain; /* execution domain */ | ||
32 | unsigned long flags; /* low level flags */ | 31 | unsigned long flags; /* low level flags */ |
33 | unsigned long status; /* thread-synchronous flags */ | 32 | unsigned long status; /* thread-synchronous flags */ |
34 | u32 cpu; /* current CPU */ | 33 | u32 cpu; /* current CPU */ |
@@ -68,7 +67,6 @@ struct thread_info { | |||
68 | #define INIT_THREAD_INFO(tsk) \ | 67 | #define INIT_THREAD_INFO(tsk) \ |
69 | { \ | 68 | { \ |
70 | .task = &tsk, \ | 69 | .task = &tsk, \ |
71 | .exec_domain = &default_exec_domain, \ | ||
72 | .flags = 0, \ | 70 | .flags = 0, \ |
73 | .cpu = 0, \ | 71 | .cpu = 0, \ |
74 | .preempt_count = INIT_PREEMPT_COUNT, \ | 72 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/metag/kernel/irq.c b/arch/metag/kernel/irq.c index 5385dd1216b7..4f8f1f87ef11 100644 --- a/arch/metag/kernel/irq.c +++ b/arch/metag/kernel/irq.c | |||
@@ -132,7 +132,6 @@ void irq_ctx_init(int cpu) | |||
132 | 132 | ||
133 | irqctx = (union irq_ctx *) &hardirq_stack[cpu * THREAD_SIZE]; | 133 | irqctx = (union irq_ctx *) &hardirq_stack[cpu * THREAD_SIZE]; |
134 | irqctx->tinfo.task = NULL; | 134 | irqctx->tinfo.task = NULL; |
135 | irqctx->tinfo.exec_domain = NULL; | ||
136 | irqctx->tinfo.cpu = cpu; | 135 | irqctx->tinfo.cpu = cpu; |
137 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; | 136 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; |
138 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 137 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
@@ -141,7 +140,6 @@ void irq_ctx_init(int cpu) | |||
141 | 140 | ||
142 | irqctx = (union irq_ctx *) &softirq_stack[cpu * THREAD_SIZE]; | 141 | irqctx = (union irq_ctx *) &softirq_stack[cpu * THREAD_SIZE]; |
143 | irqctx->tinfo.task = NULL; | 142 | irqctx->tinfo.task = NULL; |
144 | irqctx->tinfo.exec_domain = NULL; | ||
145 | irqctx->tinfo.cpu = cpu; | 143 | irqctx->tinfo.cpu = cpu; |
146 | irqctx->tinfo.preempt_count = 0; | 144 | irqctx->tinfo.preempt_count = 0; |
147 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 145 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
diff --git a/arch/microblaze/include/asm/thread_info.h b/arch/microblaze/include/asm/thread_info.h index b699fbd7de4a..383f387b4eee 100644 --- a/arch/microblaze/include/asm/thread_info.h +++ b/arch/microblaze/include/asm/thread_info.h | |||
@@ -65,7 +65,6 @@ typedef struct { | |||
65 | 65 | ||
66 | struct thread_info { | 66 | struct thread_info { |
67 | struct task_struct *task; /* main task structure */ | 67 | struct task_struct *task; /* main task structure */ |
68 | struct exec_domain *exec_domain; /* execution domain */ | ||
69 | unsigned long flags; /* low level flags */ | 68 | unsigned long flags; /* low level flags */ |
70 | unsigned long status; /* thread-synchronous flags */ | 69 | unsigned long status; /* thread-synchronous flags */ |
71 | __u32 cpu; /* current CPU */ | 70 | __u32 cpu; /* current CPU */ |
@@ -81,7 +80,6 @@ struct thread_info { | |||
81 | #define INIT_THREAD_INFO(tsk) \ | 80 | #define INIT_THREAD_INFO(tsk) \ |
82 | { \ | 81 | { \ |
83 | .task = &tsk, \ | 82 | .task = &tsk, \ |
84 | .exec_domain = &default_exec_domain, \ | ||
85 | .flags = 0, \ | 83 | .flags = 0, \ |
86 | .cpu = 0, \ | 84 | .cpu = 0, \ |
87 | .preempt_count = INIT_PREEMPT_COUNT, \ | 85 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/microblaze/kernel/signal.c b/arch/microblaze/kernel/signal.c index 20ccd4e2baa5..97001524ca2d 100644 --- a/arch/microblaze/kernel/signal.c +++ b/arch/microblaze/kernel/signal.c | |||
@@ -158,7 +158,6 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
158 | { | 158 | { |
159 | struct rt_sigframe __user *frame; | 159 | struct rt_sigframe __user *frame; |
160 | int err = 0, sig = ksig->sig; | 160 | int err = 0, sig = ksig->sig; |
161 | unsigned long signal; | ||
162 | unsigned long address = 0; | 161 | unsigned long address = 0; |
163 | #ifdef CONFIG_MMU | 162 | #ifdef CONFIG_MMU |
164 | pmd_t *pmdp; | 163 | pmd_t *pmdp; |
@@ -170,12 +169,6 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
170 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 169 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
171 | return -EFAULT; | 170 | return -EFAULT; |
172 | 171 | ||
173 | signal = current_thread_info()->exec_domain | ||
174 | && current_thread_info()->exec_domain->signal_invmap | ||
175 | && sig < 32 | ||
176 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
177 | : (unsigned long)sig; | ||
178 | |||
179 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) | 172 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) |
180 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 173 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
181 | 174 | ||
@@ -230,7 +223,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
230 | regs->r1 = (unsigned long) frame; | 223 | regs->r1 = (unsigned long) frame; |
231 | 224 | ||
232 | /* Signal handler args: */ | 225 | /* Signal handler args: */ |
233 | regs->r5 = signal; /* arg 0: signum */ | 226 | regs->r5 = sig; /* arg 0: signum */ |
234 | regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */ | 227 | regs->r6 = (unsigned long) &frame->info; /* arg 1: siginfo */ |
235 | regs->r7 = (unsigned long) &frame->uc; /* arg2: ucontext */ | 228 | regs->r7 = (unsigned long) &frame->uc; /* arg2: ucontext */ |
236 | /* Offset to handle microblaze rtid r14, 0 */ | 229 | /* Offset to handle microblaze rtid r14, 0 */ |
diff --git a/arch/mips/include/asm/thread_info.h b/arch/mips/include/asm/thread_info.h index 55ed6602204c..8408a30c47f3 100644 --- a/arch/mips/include/asm/thread_info.h +++ b/arch/mips/include/asm/thread_info.h | |||
@@ -23,7 +23,6 @@ | |||
23 | */ | 23 | */ |
24 | struct thread_info { | 24 | struct thread_info { |
25 | struct task_struct *task; /* main task structure */ | 25 | struct task_struct *task; /* main task structure */ |
26 | struct exec_domain *exec_domain; /* execution domain */ | ||
27 | unsigned long flags; /* low level flags */ | 26 | unsigned long flags; /* low level flags */ |
28 | unsigned long tp_value; /* thread pointer */ | 27 | unsigned long tp_value; /* thread pointer */ |
29 | __u32 cpu; /* current CPU */ | 28 | __u32 cpu; /* current CPU */ |
@@ -44,7 +43,6 @@ struct thread_info { | |||
44 | #define INIT_THREAD_INFO(tsk) \ | 43 | #define INIT_THREAD_INFO(tsk) \ |
45 | { \ | 44 | { \ |
46 | .task = &tsk, \ | 45 | .task = &tsk, \ |
47 | .exec_domain = &default_exec_domain, \ | ||
48 | .flags = _TIF_FIXADE, \ | 46 | .flags = _TIF_FIXADE, \ |
49 | .cpu = 0, \ | 47 | .cpu = 0, \ |
50 | .preempt_count = INIT_PREEMPT_COUNT, \ | 48 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/mips/kernel/asm-offsets.c b/arch/mips/kernel/asm-offsets.c index e59fd7cfac9e..beabe19ff8e5 100644 --- a/arch/mips/kernel/asm-offsets.c +++ b/arch/mips/kernel/asm-offsets.c | |||
@@ -92,7 +92,6 @@ void output_thread_info_defines(void) | |||
92 | { | 92 | { |
93 | COMMENT("MIPS thread_info offsets."); | 93 | COMMENT("MIPS thread_info offsets."); |
94 | OFFSET(TI_TASK, thread_info, task); | 94 | OFFSET(TI_TASK, thread_info, task); |
95 | OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain); | ||
96 | OFFSET(TI_FLAGS, thread_info, flags); | 95 | OFFSET(TI_FLAGS, thread_info, flags); |
97 | OFFSET(TI_TP_VALUE, thread_info, tp_value); | 96 | OFFSET(TI_TP_VALUE, thread_info, tp_value); |
98 | OFFSET(TI_CPU, thread_info, cpu); | 97 | OFFSET(TI_CPU, thread_info, cpu); |
diff --git a/arch/mn10300/include/asm/thread_info.h b/arch/mn10300/include/asm/thread_info.h index c1c374f0ec12..4861a78c7160 100644 --- a/arch/mn10300/include/asm/thread_info.h +++ b/arch/mn10300/include/asm/thread_info.h | |||
@@ -40,7 +40,6 @@ typedef struct { | |||
40 | 40 | ||
41 | struct thread_info { | 41 | struct thread_info { |
42 | struct task_struct *task; /* main task structure */ | 42 | struct task_struct *task; /* main task structure */ |
43 | struct exec_domain *exec_domain; /* execution domain */ | ||
44 | struct pt_regs *frame; /* current exception frame */ | 43 | struct pt_regs *frame; /* current exception frame */ |
45 | unsigned long flags; /* low level flags */ | 44 | unsigned long flags; /* low level flags */ |
46 | __u32 cpu; /* current CPU */ | 45 | __u32 cpu; /* current CPU */ |
@@ -74,7 +73,6 @@ struct thread_info { | |||
74 | #define INIT_THREAD_INFO(tsk) \ | 73 | #define INIT_THREAD_INFO(tsk) \ |
75 | { \ | 74 | { \ |
76 | .task = &tsk, \ | 75 | .task = &tsk, \ |
77 | .exec_domain = &default_exec_domain, \ | ||
78 | .flags = 0, \ | 76 | .flags = 0, \ |
79 | .cpu = 0, \ | 77 | .cpu = 0, \ |
80 | .preempt_count = INIT_PREEMPT_COUNT, \ | 78 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/mn10300/kernel/asm-offsets.c b/arch/mn10300/kernel/asm-offsets.c index d780670cbaf3..e5a61c659b5a 100644 --- a/arch/mn10300/kernel/asm-offsets.c +++ b/arch/mn10300/kernel/asm-offsets.c | |||
@@ -22,7 +22,6 @@ void foo(void) | |||
22 | BLANK(); | 22 | BLANK(); |
23 | 23 | ||
24 | OFFSET(TI_task, thread_info, task); | 24 | OFFSET(TI_task, thread_info, task); |
25 | OFFSET(TI_exec_domain, thread_info, exec_domain); | ||
26 | OFFSET(TI_frame, thread_info, frame); | 25 | OFFSET(TI_frame, thread_info, frame); |
27 | OFFSET(TI_flags, thread_info, flags); | 26 | OFFSET(TI_flags, thread_info, flags); |
28 | OFFSET(TI_cpu, thread_info, cpu); | 27 | OFFSET(TI_cpu, thread_info, cpu); |
@@ -85,7 +84,6 @@ void foo(void) | |||
85 | DEFINE(SIGCHLD_asm, SIGCHLD); | 84 | DEFINE(SIGCHLD_asm, SIGCHLD); |
86 | BLANK(); | 85 | BLANK(); |
87 | 86 | ||
88 | OFFSET(EXEC_DOMAIN_handler, exec_domain, handler); | ||
89 | OFFSET(RT_SIGFRAME_sigcontext, rt_sigframe, uc.uc_mcontext); | 87 | OFFSET(RT_SIGFRAME_sigcontext, rt_sigframe, uc.uc_mcontext); |
90 | 88 | ||
91 | DEFINE(PAGE_SIZE_asm, PAGE_SIZE); | 89 | DEFINE(PAGE_SIZE_asm, PAGE_SIZE); |
diff --git a/arch/mn10300/kernel/signal.c b/arch/mn10300/kernel/signal.c index 8609845f12c5..dfd0301cf200 100644 --- a/arch/mn10300/kernel/signal.c +++ b/arch/mn10300/kernel/signal.c | |||
@@ -202,20 +202,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
202 | struct pt_regs *regs) | 202 | struct pt_regs *regs) |
203 | { | 203 | { |
204 | struct sigframe __user *frame; | 204 | struct sigframe __user *frame; |
205 | int rsig, sig = ksig->sig; | 205 | int sig = ksig->sig; |
206 | 206 | ||
207 | frame = get_sigframe(ksig, regs, sizeof(*frame)); | 207 | frame = get_sigframe(ksig, regs, sizeof(*frame)); |
208 | 208 | ||
209 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 209 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
210 | return -EFAULT; | 210 | return -EFAULT; |
211 | 211 | ||
212 | rsig = sig; | 212 | if (__put_user(sig, &frame->sig) < 0 || |
213 | if (sig < 32 && | ||
214 | current_thread_info()->exec_domain && | ||
215 | current_thread_info()->exec_domain->signal_invmap) | ||
216 | rsig = current_thread_info()->exec_domain->signal_invmap[sig]; | ||
217 | |||
218 | if (__put_user(rsig, &frame->sig) < 0 || | ||
219 | __put_user(&frame->sc, &frame->psc) < 0) | 213 | __put_user(&frame->sc, &frame->psc) < 0) |
220 | return -EFAULT; | 214 | return -EFAULT; |
221 | 215 | ||
@@ -270,20 +264,14 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
270 | struct pt_regs *regs) | 264 | struct pt_regs *regs) |
271 | { | 265 | { |
272 | struct rt_sigframe __user *frame; | 266 | struct rt_sigframe __user *frame; |
273 | int rsig, sig = ksig->sig; | 267 | int sig = ksig->sig; |
274 | 268 | ||
275 | frame = get_sigframe(ksig, regs, sizeof(*frame)); | 269 | frame = get_sigframe(ksig, regs, sizeof(*frame)); |
276 | 270 | ||
277 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 271 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
278 | return -EFAULT; | 272 | return -EFAULT; |
279 | 273 | ||
280 | rsig = sig; | 274 | if (__put_user(sig, &frame->sig) || |
281 | if (sig < 32 && | ||
282 | current_thread_info()->exec_domain && | ||
283 | current_thread_info()->exec_domain->signal_invmap) | ||
284 | rsig = current_thread_info()->exec_domain->signal_invmap[sig]; | ||
285 | |||
286 | if (__put_user(rsig, &frame->sig) || | ||
287 | __put_user(&frame->info, &frame->pinfo) || | 275 | __put_user(&frame->info, &frame->pinfo) || |
288 | __put_user(&frame->uc, &frame->puc) || | 276 | __put_user(&frame->uc, &frame->puc) || |
289 | copy_siginfo_to_user(&frame->info, &ksig->info)) | 277 | copy_siginfo_to_user(&frame->info, &ksig->info)) |
diff --git a/arch/nios2/include/asm/thread_info.h b/arch/nios2/include/asm/thread_info.h index a16e55cbd8ad..d69c338bd19c 100644 --- a/arch/nios2/include/asm/thread_info.h +++ b/arch/nios2/include/asm/thread_info.h | |||
@@ -39,7 +39,6 @@ typedef struct { | |||
39 | */ | 39 | */ |
40 | struct thread_info { | 40 | struct thread_info { |
41 | struct task_struct *task; /* main task structure */ | 41 | struct task_struct *task; /* main task structure */ |
42 | struct exec_domain *exec_domain; /* execution domain */ | ||
43 | unsigned long flags; /* low level flags */ | 42 | unsigned long flags; /* low level flags */ |
44 | __u32 cpu; /* current CPU */ | 43 | __u32 cpu; /* current CPU */ |
45 | int preempt_count; /* 0 => preemptable,<0 => BUG */ | 44 | int preempt_count; /* 0 => preemptable,<0 => BUG */ |
@@ -58,7 +57,6 @@ struct thread_info { | |||
58 | #define INIT_THREAD_INFO(tsk) \ | 57 | #define INIT_THREAD_INFO(tsk) \ |
59 | { \ | 58 | { \ |
60 | .task = &tsk, \ | 59 | .task = &tsk, \ |
61 | .exec_domain = &default_exec_domain, \ | ||
62 | .flags = 0, \ | 60 | .flags = 0, \ |
63 | .cpu = 0, \ | 61 | .cpu = 0, \ |
64 | .preempt_count = INIT_PREEMPT_COUNT, \ | 62 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/openrisc/include/asm/thread_info.h b/arch/openrisc/include/asm/thread_info.h index 875f0845a707..6e619a79a401 100644 --- a/arch/openrisc/include/asm/thread_info.h +++ b/arch/openrisc/include/asm/thread_info.h | |||
@@ -48,7 +48,6 @@ typedef unsigned long mm_segment_t; | |||
48 | 48 | ||
49 | struct thread_info { | 49 | struct thread_info { |
50 | struct task_struct *task; /* main task structure */ | 50 | struct task_struct *task; /* main task structure */ |
51 | struct exec_domain *exec_domain; /* execution domain */ | ||
52 | unsigned long flags; /* low level flags */ | 51 | unsigned long flags; /* low level flags */ |
53 | __u32 cpu; /* current CPU */ | 52 | __u32 cpu; /* current CPU */ |
54 | __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ | 53 | __s32 preempt_count; /* 0 => preemptable, <0 => BUG */ |
@@ -73,7 +72,6 @@ struct thread_info { | |||
73 | #define INIT_THREAD_INFO(tsk) \ | 72 | #define INIT_THREAD_INFO(tsk) \ |
74 | { \ | 73 | { \ |
75 | .task = &tsk, \ | 74 | .task = &tsk, \ |
76 | .exec_domain = &default_exec_domain, \ | ||
77 | .flags = 0, \ | 75 | .flags = 0, \ |
78 | .cpu = 0, \ | 76 | .cpu = 0, \ |
79 | .preempt_count = 1, \ | 77 | .preempt_count = 1, \ |
diff --git a/arch/openrisc/kernel/signal.c b/arch/openrisc/kernel/signal.c index 4112175bf803..c82be69b43c6 100644 --- a/arch/openrisc/kernel/signal.c +++ b/arch/openrisc/kernel/signal.c | |||
@@ -193,8 +193,6 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
193 | if (err) | 193 | if (err) |
194 | return -EFAULT; | 194 | return -EFAULT; |
195 | 195 | ||
196 | /* TODO what is the current->exec_domain stuff and invmap ? */ | ||
197 | |||
198 | /* Set up registers for signal handler */ | 196 | /* Set up registers for signal handler */ |
199 | regs->pc = (unsigned long)ksig->ka.sa.sa_handler; /* what we enter NOW */ | 197 | regs->pc = (unsigned long)ksig->ka.sa.sa_handler; /* what we enter NOW */ |
200 | regs->gpr[9] = (unsigned long)return_ip; /* what we enter LATER */ | 198 | regs->gpr[9] = (unsigned long)return_ip; /* what we enter LATER */ |
diff --git a/arch/parisc/include/asm/thread_info.h b/arch/parisc/include/asm/thread_info.h index fb13e3865563..e96e693fd58c 100644 --- a/arch/parisc/include/asm/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h | |||
@@ -9,7 +9,6 @@ | |||
9 | 9 | ||
10 | struct thread_info { | 10 | struct thread_info { |
11 | struct task_struct *task; /* main task structure */ | 11 | struct task_struct *task; /* main task structure */ |
12 | struct exec_domain *exec_domain;/* execution domain */ | ||
13 | unsigned long flags; /* thread_info flags (see TIF_*) */ | 12 | unsigned long flags; /* thread_info flags (see TIF_*) */ |
14 | mm_segment_t addr_limit; /* user-level address space limit */ | 13 | mm_segment_t addr_limit; /* user-level address space limit */ |
15 | __u32 cpu; /* current CPU */ | 14 | __u32 cpu; /* current CPU */ |
@@ -19,7 +18,6 @@ struct thread_info { | |||
19 | #define INIT_THREAD_INFO(tsk) \ | 18 | #define INIT_THREAD_INFO(tsk) \ |
20 | { \ | 19 | { \ |
21 | .task = &tsk, \ | 20 | .task = &tsk, \ |
22 | .exec_domain = &default_exec_domain, \ | ||
23 | .flags = 0, \ | 21 | .flags = 0, \ |
24 | .cpu = 0, \ | 22 | .cpu = 0, \ |
25 | .addr_limit = KERNEL_DS, \ | 23 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c index dcd55103a4bb..59001cea13f9 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c | |||
@@ -242,7 +242,6 @@ int main(void) | |||
242 | DEFINE(PT_SZ_ALGN, align_frame(sizeof(struct pt_regs), FRAME_ALIGN)); | 242 | DEFINE(PT_SZ_ALGN, align_frame(sizeof(struct pt_regs), FRAME_ALIGN)); |
243 | BLANK(); | 243 | BLANK(); |
244 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 244 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
245 | DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); | ||
246 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 245 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
247 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 246 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
248 | DEFINE(TI_SEGMENT, offsetof(struct thread_info, addr_limit)); | 247 | DEFINE(TI_SEGMENT, offsetof(struct thread_info, addr_limit)); |
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h index 72489799cf02..7efee4a3240b 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h | |||
@@ -39,7 +39,6 @@ | |||
39 | */ | 39 | */ |
40 | struct thread_info { | 40 | struct thread_info { |
41 | struct task_struct *task; /* main task structure */ | 41 | struct task_struct *task; /* main task structure */ |
42 | struct exec_domain *exec_domain; /* execution domain */ | ||
43 | int cpu; /* cpu we're on */ | 42 | int cpu; /* cpu we're on */ |
44 | int preempt_count; /* 0 => preemptable, | 43 | int preempt_count; /* 0 => preemptable, |
45 | <0 => BUG */ | 44 | <0 => BUG */ |
@@ -55,7 +54,6 @@ struct thread_info { | |||
55 | #define INIT_THREAD_INFO(tsk) \ | 54 | #define INIT_THREAD_INFO(tsk) \ |
56 | { \ | 55 | { \ |
57 | .task = &tsk, \ | 56 | .task = &tsk, \ |
58 | .exec_domain = &default_exec_domain, \ | ||
59 | .cpu = 0, \ | 57 | .cpu = 0, \ |
60 | .preempt_count = INIT_PREEMPT_COUNT, \ | 58 | .preempt_count = INIT_PREEMPT_COUNT, \ |
61 | .flags = 0, \ | 59 | .flags = 0, \ |
diff --git a/arch/s390/include/asm/thread_info.h b/arch/s390/include/asm/thread_info.h index d532098d98bf..4c27ec764c36 100644 --- a/arch/s390/include/asm/thread_info.h +++ b/arch/s390/include/asm/thread_info.h | |||
@@ -29,7 +29,6 @@ | |||
29 | */ | 29 | */ |
30 | struct thread_info { | 30 | struct thread_info { |
31 | struct task_struct *task; /* main task structure */ | 31 | struct task_struct *task; /* main task structure */ |
32 | struct exec_domain *exec_domain; /* execution domain */ | ||
33 | unsigned long flags; /* low level flags */ | 32 | unsigned long flags; /* low level flags */ |
34 | unsigned long sys_call_table; /* System call table address */ | 33 | unsigned long sys_call_table; /* System call table address */ |
35 | unsigned int cpu; /* current CPU */ | 34 | unsigned int cpu; /* current CPU */ |
@@ -46,7 +45,6 @@ struct thread_info { | |||
46 | #define INIT_THREAD_INFO(tsk) \ | 45 | #define INIT_THREAD_INFO(tsk) \ |
47 | { \ | 46 | { \ |
48 | .task = &tsk, \ | 47 | .task = &tsk, \ |
49 | .exec_domain = &default_exec_domain, \ | ||
50 | .flags = 0, \ | 48 | .flags = 0, \ |
51 | .cpu = 0, \ | 49 | .cpu = 0, \ |
52 | .preempt_count = INIT_PREEMPT_COUNT, \ | 50 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/s390/kernel/asm-offsets.c b/arch/s390/kernel/asm-offsets.c index f35058da8eaf..c7d1b9d09011 100644 --- a/arch/s390/kernel/asm-offsets.c +++ b/arch/s390/kernel/asm-offsets.c | |||
@@ -34,7 +34,6 @@ int main(void) | |||
34 | DEFINE(__THREAD_per_paid, offsetof(struct task_struct, thread.per_event.paid)); | 34 | DEFINE(__THREAD_per_paid, offsetof(struct task_struct, thread.per_event.paid)); |
35 | BLANK(); | 35 | BLANK(); |
36 | DEFINE(__TI_task, offsetof(struct thread_info, task)); | 36 | DEFINE(__TI_task, offsetof(struct thread_info, task)); |
37 | DEFINE(__TI_domain, offsetof(struct thread_info, exec_domain)); | ||
38 | DEFINE(__TI_flags, offsetof(struct thread_info, flags)); | 37 | DEFINE(__TI_flags, offsetof(struct thread_info, flags)); |
39 | DEFINE(__TI_sysc_table, offsetof(struct thread_info, sys_call_table)); | 38 | DEFINE(__TI_sysc_table, offsetof(struct thread_info, sys_call_table)); |
40 | DEFINE(__TI_cpu, offsetof(struct thread_info, cpu)); | 39 | DEFINE(__TI_cpu, offsetof(struct thread_info, cpu)); |
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index bc1df12dd4f8..fe8d6924efaa 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -370,16 +370,6 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) | |||
370 | return (void __user *)((sp - frame_size) & -8ul); | 370 | return (void __user *)((sp - frame_size) & -8ul); |
371 | } | 371 | } |
372 | 372 | ||
373 | static inline int map_signal(int sig) | ||
374 | { | ||
375 | if (current_thread_info()->exec_domain | ||
376 | && current_thread_info()->exec_domain->signal_invmap | ||
377 | && sig < 32) | ||
378 | return current_thread_info()->exec_domain->signal_invmap[sig]; | ||
379 | else | ||
380 | return sig; | ||
381 | } | ||
382 | |||
383 | static int setup_frame32(struct ksignal *ksig, sigset_t *set, | 373 | static int setup_frame32(struct ksignal *ksig, sigset_t *set, |
384 | struct pt_regs *regs) | 374 | struct pt_regs *regs) |
385 | { | 375 | { |
@@ -449,7 +439,7 @@ static int setup_frame32(struct ksignal *ksig, sigset_t *set, | |||
449 | (regs->psw.mask & ~PSW_MASK_ASC); | 439 | (regs->psw.mask & ~PSW_MASK_ASC); |
450 | regs->psw.addr = (__force __u64) ksig->ka.sa.sa_handler; | 440 | regs->psw.addr = (__force __u64) ksig->ka.sa.sa_handler; |
451 | 441 | ||
452 | regs->gprs[2] = map_signal(sig); | 442 | regs->gprs[2] = sig; |
453 | regs->gprs[3] = (__force __u64) &frame->sc; | 443 | regs->gprs[3] = (__force __u64) &frame->sc; |
454 | 444 | ||
455 | /* We forgot to include these in the sigcontext. | 445 | /* We forgot to include these in the sigcontext. |
@@ -532,7 +522,7 @@ static int setup_rt_frame32(struct ksignal *ksig, sigset_t *set, | |||
532 | (regs->psw.mask & ~PSW_MASK_ASC); | 522 | (regs->psw.mask & ~PSW_MASK_ASC); |
533 | regs->psw.addr = (__u64 __force) ksig->ka.sa.sa_handler; | 523 | regs->psw.addr = (__u64 __force) ksig->ka.sa.sa_handler; |
534 | 524 | ||
535 | regs->gprs[2] = map_signal(ksig->sig); | 525 | regs->gprs[2] = ksig->sig; |
536 | regs->gprs[3] = (__force __u64) &frame->info; | 526 | regs->gprs[3] = (__force __u64) &frame->info; |
537 | regs->gprs[4] = (__force __u64) &frame->uc; | 527 | regs->gprs[4] = (__force __u64) &frame->uc; |
538 | regs->gprs[5] = task_thread_info(current)->last_break; | 528 | regs->gprs[5] = task_thread_info(current)->last_break; |
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index 7fec60cb0b75..c551f22ce066 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
@@ -301,16 +301,6 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) | |||
301 | return (void __user *)((sp - frame_size) & -8ul); | 301 | return (void __user *)((sp - frame_size) & -8ul); |
302 | } | 302 | } |
303 | 303 | ||
304 | static inline int map_signal(int sig) | ||
305 | { | ||
306 | if (current_thread_info()->exec_domain | ||
307 | && current_thread_info()->exec_domain->signal_invmap | ||
308 | && sig < 32) | ||
309 | return current_thread_info()->exec_domain->signal_invmap[sig]; | ||
310 | else | ||
311 | return sig; | ||
312 | } | ||
313 | |||
314 | static int setup_frame(int sig, struct k_sigaction *ka, | 304 | static int setup_frame(int sig, struct k_sigaction *ka, |
315 | sigset_t *set, struct pt_regs * regs) | 305 | sigset_t *set, struct pt_regs * regs) |
316 | { | 306 | { |
@@ -378,7 +368,7 @@ static int setup_frame(int sig, struct k_sigaction *ka, | |||
378 | (regs->psw.mask & ~PSW_MASK_ASC); | 368 | (regs->psw.mask & ~PSW_MASK_ASC); |
379 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; | 369 | regs->psw.addr = (unsigned long) ka->sa.sa_handler | PSW_ADDR_AMODE; |
380 | 370 | ||
381 | regs->gprs[2] = map_signal(sig); | 371 | regs->gprs[2] = sig; |
382 | regs->gprs[3] = (unsigned long) &frame->sc; | 372 | regs->gprs[3] = (unsigned long) &frame->sc; |
383 | 373 | ||
384 | /* We forgot to include these in the sigcontext. | 374 | /* We forgot to include these in the sigcontext. |
@@ -458,7 +448,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
458 | (regs->psw.mask & ~PSW_MASK_ASC); | 448 | (regs->psw.mask & ~PSW_MASK_ASC); |
459 | regs->psw.addr = (unsigned long) ksig->ka.sa.sa_handler | PSW_ADDR_AMODE; | 449 | regs->psw.addr = (unsigned long) ksig->ka.sa.sa_handler | PSW_ADDR_AMODE; |
460 | 450 | ||
461 | regs->gprs[2] = map_signal(ksig->sig); | 451 | regs->gprs[2] = ksig->sig; |
462 | regs->gprs[3] = (unsigned long) &frame->info; | 452 | regs->gprs[3] = (unsigned long) &frame->info; |
463 | regs->gprs[4] = (unsigned long) &frame->uc; | 453 | regs->gprs[4] = (unsigned long) &frame->uc; |
464 | regs->gprs[5] = task_thread_info(current)->last_break; | 454 | regs->gprs[5] = task_thread_info(current)->last_break; |
diff --git a/arch/score/include/asm/thread_info.h b/arch/score/include/asm/thread_info.h index 33864fa2a8d4..7d9ffb15c477 100644 --- a/arch/score/include/asm/thread_info.h +++ b/arch/score/include/asm/thread_info.h | |||
@@ -28,7 +28,6 @@ | |||
28 | */ | 28 | */ |
29 | struct thread_info { | 29 | struct thread_info { |
30 | struct task_struct *task; /* main task structure */ | 30 | struct task_struct *task; /* main task structure */ |
31 | struct exec_domain *exec_domain; /* execution domain */ | ||
32 | unsigned long flags; /* low level flags */ | 31 | unsigned long flags; /* low level flags */ |
33 | unsigned long tp_value; /* thread pointer */ | 32 | unsigned long tp_value; /* thread pointer */ |
34 | __u32 cpu; /* current CPU */ | 33 | __u32 cpu; /* current CPU */ |
@@ -53,7 +52,6 @@ struct thread_info { | |||
53 | #define INIT_THREAD_INFO(tsk) \ | 52 | #define INIT_THREAD_INFO(tsk) \ |
54 | { \ | 53 | { \ |
55 | .task = &tsk, \ | 54 | .task = &tsk, \ |
56 | .exec_domain = &default_exec_domain, \ | ||
57 | .cpu = 0, \ | 55 | .cpu = 0, \ |
58 | .preempt_count = 1, \ | 56 | .preempt_count = 1, \ |
59 | .addr_limit = KERNEL_DS, \ | 57 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/score/kernel/asm-offsets.c b/arch/score/kernel/asm-offsets.c index b4d5214a7a7e..52794f9421e2 100644 --- a/arch/score/kernel/asm-offsets.c +++ b/arch/score/kernel/asm-offsets.c | |||
@@ -100,7 +100,6 @@ void output_thread_info_defines(void) | |||
100 | { | 100 | { |
101 | COMMENT("SCORE thread_info offsets."); | 101 | COMMENT("SCORE thread_info offsets."); |
102 | OFFSET(TI_TASK, thread_info, task); | 102 | OFFSET(TI_TASK, thread_info, task); |
103 | OFFSET(TI_EXEC_DOMAIN, thread_info, exec_domain); | ||
104 | OFFSET(TI_FLAGS, thread_info, flags); | 103 | OFFSET(TI_FLAGS, thread_info, flags); |
105 | OFFSET(TI_TP_VALUE, thread_info, tp_value); | 104 | OFFSET(TI_TP_VALUE, thread_info, tp_value); |
106 | OFFSET(TI_CPU, thread_info, cpu); | 105 | OFFSET(TI_CPU, thread_info, cpu); |
diff --git a/arch/sh/include/asm/thread_info.h b/arch/sh/include/asm/thread_info.h index 657c03919627..2afa321157be 100644 --- a/arch/sh/include/asm/thread_info.h +++ b/arch/sh/include/asm/thread_info.h | |||
@@ -27,7 +27,6 @@ | |||
27 | 27 | ||
28 | struct thread_info { | 28 | struct thread_info { |
29 | struct task_struct *task; /* main task structure */ | 29 | struct task_struct *task; /* main task structure */ |
30 | struct exec_domain *exec_domain; /* execution domain */ | ||
31 | unsigned long flags; /* low level flags */ | 30 | unsigned long flags; /* low level flags */ |
32 | __u32 status; /* thread synchronous flags */ | 31 | __u32 status; /* thread synchronous flags */ |
33 | __u32 cpu; | 32 | __u32 cpu; |
@@ -56,7 +55,6 @@ struct thread_info { | |||
56 | #define INIT_THREAD_INFO(tsk) \ | 55 | #define INIT_THREAD_INFO(tsk) \ |
57 | { \ | 56 | { \ |
58 | .task = &tsk, \ | 57 | .task = &tsk, \ |
59 | .exec_domain = &default_exec_domain, \ | ||
60 | .flags = 0, \ | 58 | .flags = 0, \ |
61 | .status = 0, \ | 59 | .status = 0, \ |
62 | .cpu = 0, \ | 60 | .cpu = 0, \ |
diff --git a/arch/sh/kernel/asm-offsets.c b/arch/sh/kernel/asm-offsets.c index 542225fedb11..4bd44da910f3 100644 --- a/arch/sh/kernel/asm-offsets.c +++ b/arch/sh/kernel/asm-offsets.c | |||
@@ -21,7 +21,6 @@ int main(void) | |||
21 | { | 21 | { |
22 | /* offsets into the thread_info struct */ | 22 | /* offsets into the thread_info struct */ |
23 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 23 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
24 | DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); | ||
25 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); | 24 | DEFINE(TI_FLAGS, offsetof(struct thread_info, flags)); |
26 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 25 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
27 | DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); | 26 | DEFINE(TI_PRE_COUNT, offsetof(struct thread_info, preempt_count)); |
diff --git a/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 65a1ecd77f96..eb10ff84015c 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c | |||
@@ -124,7 +124,6 @@ void irq_ctx_init(int cpu) | |||
124 | 124 | ||
125 | irqctx = (union irq_ctx *)&hardirq_stack[cpu * THREAD_SIZE]; | 125 | irqctx = (union irq_ctx *)&hardirq_stack[cpu * THREAD_SIZE]; |
126 | irqctx->tinfo.task = NULL; | 126 | irqctx->tinfo.task = NULL; |
127 | irqctx->tinfo.exec_domain = NULL; | ||
128 | irqctx->tinfo.cpu = cpu; | 127 | irqctx->tinfo.cpu = cpu; |
129 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; | 128 | irqctx->tinfo.preempt_count = HARDIRQ_OFFSET; |
130 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 129 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
@@ -133,7 +132,6 @@ void irq_ctx_init(int cpu) | |||
133 | 132 | ||
134 | irqctx = (union irq_ctx *)&softirq_stack[cpu * THREAD_SIZE]; | 133 | irqctx = (union irq_ctx *)&softirq_stack[cpu * THREAD_SIZE]; |
135 | irqctx->tinfo.task = NULL; | 134 | irqctx->tinfo.task = NULL; |
136 | irqctx->tinfo.exec_domain = NULL; | ||
137 | irqctx->tinfo.cpu = cpu; | 135 | irqctx->tinfo.cpu = cpu; |
138 | irqctx->tinfo.preempt_count = 0; | 136 | irqctx->tinfo.preempt_count = 0; |
139 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); | 137 | irqctx->tinfo.addr_limit = MAKE_MM_SEG(0); |
diff --git a/arch/sh/kernel/signal_32.c b/arch/sh/kernel/signal_32.c index 97292890b51b..f7c3d5c25caf 100644 --- a/arch/sh/kernel/signal_32.c +++ b/arch/sh/kernel/signal_32.c | |||
@@ -267,19 +267,12 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
267 | { | 267 | { |
268 | struct sigframe __user *frame; | 268 | struct sigframe __user *frame; |
269 | int err = 0, sig = ksig->sig; | 269 | int err = 0, sig = ksig->sig; |
270 | int signal; | ||
271 | 270 | ||
272 | frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); | 271 | frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); |
273 | 272 | ||
274 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 273 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
275 | return -EFAULT; | 274 | return -EFAULT; |
276 | 275 | ||
277 | signal = current_thread_info()->exec_domain | ||
278 | && current_thread_info()->exec_domain->signal_invmap | ||
279 | && sig < 32 | ||
280 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
281 | : sig; | ||
282 | |||
283 | err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); | 276 | err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); |
284 | 277 | ||
285 | if (_NSIG_WORDS > 1) | 278 | if (_NSIG_WORDS > 1) |
@@ -313,7 +306,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
313 | 306 | ||
314 | /* Set up registers for signal handler */ | 307 | /* Set up registers for signal handler */ |
315 | regs->regs[15] = (unsigned long) frame; | 308 | regs->regs[15] = (unsigned long) frame; |
316 | regs->regs[4] = signal; /* Arg for signal handler */ | 309 | regs->regs[4] = sig; /* Arg for signal handler */ |
317 | regs->regs[5] = 0; | 310 | regs->regs[5] = 0; |
318 | regs->regs[6] = (unsigned long) &frame->sc; | 311 | regs->regs[6] = (unsigned long) &frame->sc; |
319 | 312 | ||
@@ -340,19 +333,12 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
340 | { | 333 | { |
341 | struct rt_sigframe __user *frame; | 334 | struct rt_sigframe __user *frame; |
342 | int err = 0, sig = ksig->sig; | 335 | int err = 0, sig = ksig->sig; |
343 | int signal; | ||
344 | 336 | ||
345 | frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); | 337 | frame = get_sigframe(&ksig->ka, regs->regs[15], sizeof(*frame)); |
346 | 338 | ||
347 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 339 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
348 | return -EFAULT; | 340 | return -EFAULT; |
349 | 341 | ||
350 | signal = current_thread_info()->exec_domain | ||
351 | && current_thread_info()->exec_domain->signal_invmap | ||
352 | && sig < 32 | ||
353 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
354 | : sig; | ||
355 | |||
356 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 342 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
357 | 343 | ||
358 | /* Create the ucontext. */ | 344 | /* Create the ucontext. */ |
@@ -390,7 +376,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
390 | 376 | ||
391 | /* Set up registers for signal handler */ | 377 | /* Set up registers for signal handler */ |
392 | regs->regs[15] = (unsigned long) frame; | 378 | regs->regs[15] = (unsigned long) frame; |
393 | regs->regs[4] = signal; /* Arg for signal handler */ | 379 | regs->regs[4] = sig; /* Arg for signal handler */ |
394 | regs->regs[5] = (unsigned long) &frame->info; | 380 | regs->regs[5] = (unsigned long) &frame->info; |
395 | regs->regs[6] = (unsigned long) &frame->uc; | 381 | regs->regs[6] = (unsigned long) &frame->uc; |
396 | 382 | ||
diff --git a/arch/sh/kernel/signal_64.c b/arch/sh/kernel/signal_64.c index 0462995d4d7f..d8a3f0d22809 100644 --- a/arch/sh/kernel/signal_64.c +++ b/arch/sh/kernel/signal_64.c | |||
@@ -385,12 +385,6 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs | |||
385 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 385 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
386 | return -EFAULT; | 386 | return -EFAULT; |
387 | 387 | ||
388 | signal = current_thread_info()->exec_domain | ||
389 | && current_thread_info()->exec_domain->signal_invmap | ||
390 | && sig < 32 | ||
391 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
392 | : sig; | ||
393 | |||
394 | err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); | 388 | err |= setup_sigcontext(&frame->sc, regs, set->sig[0]); |
395 | 389 | ||
396 | /* Give up earlier as i386, in case */ | 390 | /* Give up earlier as i386, in case */ |
@@ -441,7 +435,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs | |||
441 | * All edited pointers are subject to NEFF. | 435 | * All edited pointers are subject to NEFF. |
442 | */ | 436 | */ |
443 | regs->regs[REG_SP] = neff_sign_extend((unsigned long)frame); | 437 | regs->regs[REG_SP] = neff_sign_extend((unsigned long)frame); |
444 | regs->regs[REG_ARG1] = signal; /* Arg for signal handler */ | 438 | regs->regs[REG_ARG1] = sig; /* Arg for signal handler */ |
445 | 439 | ||
446 | /* FIXME: | 440 | /* FIXME: |
447 | The glibc profiling support for SH-5 needs to be passed a sigcontext | 441 | The glibc profiling support for SH-5 needs to be passed a sigcontext |
@@ -459,7 +453,7 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs | |||
459 | 453 | ||
460 | /* Broken %016Lx */ | 454 | /* Broken %016Lx */ |
461 | pr_debug("SIG deliver (#%d,%s:%d): sp=%p pc=%08Lx%08Lx link=%08Lx%08Lx\n", | 455 | pr_debug("SIG deliver (#%d,%s:%d): sp=%p pc=%08Lx%08Lx link=%08Lx%08Lx\n", |
462 | signal, current->comm, current->pid, frame, | 456 | sig, current->comm, current->pid, frame, |
463 | regs->pc >> 32, regs->pc & 0xffffffff, | 457 | regs->pc >> 32, regs->pc & 0xffffffff, |
464 | DEREF_REG_PR >> 32, DEREF_REG_PR & 0xffffffff); | 458 | DEREF_REG_PR >> 32, DEREF_REG_PR & 0xffffffff); |
465 | 459 | ||
@@ -471,19 +465,12 @@ static int setup_rt_frame(struct ksignal *kig, sigset_t *set, | |||
471 | { | 465 | { |
472 | struct rt_sigframe __user *frame; | 466 | struct rt_sigframe __user *frame; |
473 | int err = 0, sig = ksig->sig; | 467 | int err = 0, sig = ksig->sig; |
474 | int signal; | ||
475 | 468 | ||
476 | frame = get_sigframe(&ksig->ka, regs->regs[REG_SP], sizeof(*frame)); | 469 | frame = get_sigframe(&ksig->ka, regs->regs[REG_SP], sizeof(*frame)); |
477 | 470 | ||
478 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 471 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
479 | return -EFAULT; | 472 | return -EFAULT; |
480 | 473 | ||
481 | signal = current_thread_info()->exec_domain | ||
482 | && current_thread_info()->exec_domain->signal_invmap | ||
483 | && sig < 32 | ||
484 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
485 | : sig; | ||
486 | |||
487 | err |= __put_user(&frame->info, &frame->pinfo); | 474 | err |= __put_user(&frame->info, &frame->pinfo); |
488 | err |= __put_user(&frame->uc, &frame->puc); | 475 | err |= __put_user(&frame->uc, &frame->puc); |
489 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 476 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
@@ -540,13 +527,13 @@ static int setup_rt_frame(struct ksignal *kig, sigset_t *set, | |||
540 | * All edited pointers are subject to NEFF. | 527 | * All edited pointers are subject to NEFF. |
541 | */ | 528 | */ |
542 | regs->regs[REG_SP] = neff_sign_extend((unsigned long)frame); | 529 | regs->regs[REG_SP] = neff_sign_extend((unsigned long)frame); |
543 | regs->regs[REG_ARG1] = signal; /* Arg for signal handler */ | 530 | regs->regs[REG_ARG1] = sig; /* Arg for signal handler */ |
544 | regs->regs[REG_ARG2] = (unsigned long long)(unsigned long)(signed long)&frame->info; | 531 | regs->regs[REG_ARG2] = (unsigned long long)(unsigned long)(signed long)&frame->info; |
545 | regs->regs[REG_ARG3] = (unsigned long long)(unsigned long)(signed long)&frame->uc.uc_mcontext; | 532 | regs->regs[REG_ARG3] = (unsigned long long)(unsigned long)(signed long)&frame->uc.uc_mcontext; |
546 | regs->pc = neff_sign_extend((unsigned long)ksig->ka.sa.sa_handler); | 533 | regs->pc = neff_sign_extend((unsigned long)ksig->ka.sa.sa_handler); |
547 | 534 | ||
548 | pr_debug("SIG deliver (#%d,%s:%d): sp=%p pc=%08Lx%08Lx link=%08Lx%08Lx\n", | 535 | pr_debug("SIG deliver (#%d,%s:%d): sp=%p pc=%08Lx%08Lx link=%08Lx%08Lx\n", |
549 | signal, current->comm, current->pid, frame, | 536 | sig, current->comm, current->pid, frame, |
550 | regs->pc >> 32, regs->pc & 0xffffffff, | 537 | regs->pc >> 32, regs->pc & 0xffffffff, |
551 | DEREF_REG_PR >> 32, DEREF_REG_PR & 0xffffffff); | 538 | DEREF_REG_PR >> 32, DEREF_REG_PR & 0xffffffff); |
552 | 539 | ||
diff --git a/arch/sparc/include/asm/thread_info_32.h b/arch/sparc/include/asm/thread_info_32.h index fd7bd0a440ca..229475f0d7ce 100644 --- a/arch/sparc/include/asm/thread_info_32.h +++ b/arch/sparc/include/asm/thread_info_32.h | |||
@@ -27,7 +27,6 @@ | |||
27 | struct thread_info { | 27 | struct thread_info { |
28 | unsigned long uwinmask; | 28 | unsigned long uwinmask; |
29 | struct task_struct *task; /* main task structure */ | 29 | struct task_struct *task; /* main task structure */ |
30 | struct exec_domain *exec_domain; /* execution domain */ | ||
31 | unsigned long flags; /* low level flags */ | 30 | unsigned long flags; /* low level flags */ |
32 | int cpu; /* cpu we're on */ | 31 | int cpu; /* cpu we're on */ |
33 | int preempt_count; /* 0 => preemptable, | 32 | int preempt_count; /* 0 => preemptable, |
@@ -35,6 +34,8 @@ struct thread_info { | |||
35 | int softirq_count; | 34 | int softirq_count; |
36 | int hardirq_count; | 35 | int hardirq_count; |
37 | 36 | ||
37 | u32 __unused; | ||
38 | |||
38 | /* Context switch saved kernel state. */ | 39 | /* Context switch saved kernel state. */ |
39 | unsigned long ksp; /* ... ksp __attribute__ ((aligned (8))); */ | 40 | unsigned long ksp; /* ... ksp __attribute__ ((aligned (8))); */ |
40 | unsigned long kpc; | 41 | unsigned long kpc; |
@@ -56,7 +57,6 @@ struct thread_info { | |||
56 | { \ | 57 | { \ |
57 | .uwinmask = 0, \ | 58 | .uwinmask = 0, \ |
58 | .task = &tsk, \ | 59 | .task = &tsk, \ |
59 | .exec_domain = &default_exec_domain, \ | ||
60 | .flags = 0, \ | 60 | .flags = 0, \ |
61 | .cpu = 0, \ | 61 | .cpu = 0, \ |
62 | .preempt_count = INIT_PREEMPT_COUNT, \ | 62 | .preempt_count = INIT_PREEMPT_COUNT, \ |
@@ -85,12 +85,11 @@ register struct thread_info *current_thread_info_reg asm("g6"); | |||
85 | */ | 85 | */ |
86 | #define TI_UWINMASK 0x00 /* uwinmask */ | 86 | #define TI_UWINMASK 0x00 /* uwinmask */ |
87 | #define TI_TASK 0x04 | 87 | #define TI_TASK 0x04 |
88 | #define TI_EXECDOMAIN 0x08 /* exec_domain */ | 88 | #define TI_FLAGS 0x08 |
89 | #define TI_FLAGS 0x0c | 89 | #define TI_CPU 0x0c |
90 | #define TI_CPU 0x10 | 90 | #define TI_PREEMPT 0x10 /* preempt_count */ |
91 | #define TI_PREEMPT 0x14 /* preempt_count */ | 91 | #define TI_SOFTIRQ 0x14 /* softirq_count */ |
92 | #define TI_SOFTIRQ 0x18 /* softirq_count */ | 92 | #define TI_HARDIRQ 0x18 /* hardirq_count */ |
93 | #define TI_HARDIRQ 0x1c /* hardirq_count */ | ||
94 | #define TI_KSP 0x20 /* ksp */ | 93 | #define TI_KSP 0x20 /* ksp */ |
95 | #define TI_KPC 0x24 /* kpc (ldd'ed with kpc) */ | 94 | #define TI_KPC 0x24 /* kpc (ldd'ed with kpc) */ |
96 | #define TI_KPSR 0x28 /* kpsr */ | 95 | #define TI_KPSR 0x28 /* kpsr */ |
diff --git a/arch/sparc/include/asm/thread_info_64.h b/arch/sparc/include/asm/thread_info_64.h index ff455164732a..bde59825d06c 100644 --- a/arch/sparc/include/asm/thread_info_64.h +++ b/arch/sparc/include/asm/thread_info_64.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <asm/types.h> | 31 | #include <asm/types.h> |
32 | 32 | ||
33 | struct task_struct; | 33 | struct task_struct; |
34 | struct exec_domain; | ||
35 | 34 | ||
36 | struct thread_info { | 35 | struct thread_info { |
37 | /* D$ line 1 */ | 36 | /* D$ line 1 */ |
@@ -44,7 +43,6 @@ struct thread_info { | |||
44 | /* D$ line 2 */ | 43 | /* D$ line 2 */ |
45 | unsigned long fault_address; | 44 | unsigned long fault_address; |
46 | struct pt_regs *kregs; | 45 | struct pt_regs *kregs; |
47 | struct exec_domain *exec_domain; | ||
48 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | 46 | int preempt_count; /* 0 => preemptable, <0 => BUG */ |
49 | __u8 new_child; | 47 | __u8 new_child; |
50 | __u8 current_ds; | 48 | __u8 current_ds; |
@@ -80,18 +78,17 @@ struct thread_info { | |||
80 | #define TI_KSP 0x00000018 | 78 | #define TI_KSP 0x00000018 |
81 | #define TI_FAULT_ADDR 0x00000020 | 79 | #define TI_FAULT_ADDR 0x00000020 |
82 | #define TI_KREGS 0x00000028 | 80 | #define TI_KREGS 0x00000028 |
83 | #define TI_EXEC_DOMAIN 0x00000030 | 81 | #define TI_PRE_COUNT 0x00000030 |
84 | #define TI_PRE_COUNT 0x00000038 | 82 | #define TI_NEW_CHILD 0x00000034 |
85 | #define TI_NEW_CHILD 0x0000003c | 83 | #define TI_CURRENT_DS 0x00000035 |
86 | #define TI_CURRENT_DS 0x0000003d | 84 | #define TI_CPU 0x00000036 |
87 | #define TI_CPU 0x0000003e | 85 | #define TI_UTRAPS 0x00000038 |
88 | #define TI_UTRAPS 0x00000040 | 86 | #define TI_REG_WINDOW 0x00000040 |
89 | #define TI_REG_WINDOW 0x00000048 | 87 | #define TI_RWIN_SPTRS 0x000003c0 |
90 | #define TI_RWIN_SPTRS 0x000003c8 | 88 | #define TI_GSR 0x000003f8 |
91 | #define TI_GSR 0x00000400 | 89 | #define TI_XFSR 0x00000430 |
92 | #define TI_XFSR 0x00000438 | 90 | #define TI_KUNA_REGS 0x00000468 |
93 | #define TI_KUNA_REGS 0x00000470 | 91 | #define TI_KUNA_INSN 0x00000470 |
94 | #define TI_KUNA_INSN 0x00000478 | ||
95 | #define TI_FPREGS 0x00000480 | 92 | #define TI_FPREGS 0x00000480 |
96 | 93 | ||
97 | /* We embed this in the uppermost byte of thread_info->flags */ | 94 | /* We embed this in the uppermost byte of thread_info->flags */ |
@@ -119,7 +116,6 @@ struct thread_info { | |||
119 | { \ | 116 | { \ |
120 | .task = &tsk, \ | 117 | .task = &tsk, \ |
121 | .current_ds = ASI_P, \ | 118 | .current_ds = ASI_P, \ |
122 | .exec_domain = &default_exec_domain, \ | ||
123 | .preempt_count = INIT_PREEMPT_COUNT, \ | 119 | .preempt_count = INIT_PREEMPT_COUNT, \ |
124 | } | 120 | } |
125 | 121 | ||
diff --git a/arch/sparc/kernel/traps_32.c b/arch/sparc/kernel/traps_32.c index 6fd386c5232a..4f21df7d4f13 100644 --- a/arch/sparc/kernel/traps_32.c +++ b/arch/sparc/kernel/traps_32.c | |||
@@ -433,7 +433,6 @@ void trap_init(void) | |||
433 | /* Force linker to barf if mismatched */ | 433 | /* Force linker to barf if mismatched */ |
434 | if (TI_UWINMASK != offsetof(struct thread_info, uwinmask) || | 434 | if (TI_UWINMASK != offsetof(struct thread_info, uwinmask) || |
435 | TI_TASK != offsetof(struct thread_info, task) || | 435 | TI_TASK != offsetof(struct thread_info, task) || |
436 | TI_EXECDOMAIN != offsetof(struct thread_info, exec_domain) || | ||
437 | TI_FLAGS != offsetof(struct thread_info, flags) || | 436 | TI_FLAGS != offsetof(struct thread_info, flags) || |
438 | TI_CPU != offsetof(struct thread_info, cpu) || | 437 | TI_CPU != offsetof(struct thread_info, cpu) || |
439 | TI_PREEMPT != offsetof(struct thread_info, preempt_count) || | 438 | TI_PREEMPT != offsetof(struct thread_info, preempt_count) || |
diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c index 0e699745d643..d21cd625c0de 100644 --- a/arch/sparc/kernel/traps_64.c +++ b/arch/sparc/kernel/traps_64.c | |||
@@ -2691,8 +2691,6 @@ void __init trap_init(void) | |||
2691 | fault_address) || | 2691 | fault_address) || |
2692 | TI_KREGS != offsetof(struct thread_info, kregs) || | 2692 | TI_KREGS != offsetof(struct thread_info, kregs) || |
2693 | TI_UTRAPS != offsetof(struct thread_info, utraps) || | 2693 | TI_UTRAPS != offsetof(struct thread_info, utraps) || |
2694 | TI_EXEC_DOMAIN != offsetof(struct thread_info, | ||
2695 | exec_domain) || | ||
2696 | TI_REG_WINDOW != offsetof(struct thread_info, | 2694 | TI_REG_WINDOW != offsetof(struct thread_info, |
2697 | reg_window) || | 2695 | reg_window) || |
2698 | TI_RWIN_SPTRS != offsetof(struct thread_info, | 2696 | TI_RWIN_SPTRS != offsetof(struct thread_info, |
diff --git a/arch/tile/include/asm/thread_info.h b/arch/tile/include/asm/thread_info.h index 96c14c1430d8..98ee10a0ae89 100644 --- a/arch/tile/include/asm/thread_info.h +++ b/arch/tile/include/asm/thread_info.h | |||
@@ -26,7 +26,6 @@ | |||
26 | */ | 26 | */ |
27 | struct thread_info { | 27 | struct thread_info { |
28 | struct task_struct *task; /* main task structure */ | 28 | struct task_struct *task; /* main task structure */ |
29 | struct exec_domain *exec_domain; /* execution domain */ | ||
30 | unsigned long flags; /* low level flags */ | 29 | unsigned long flags; /* low level flags */ |
31 | unsigned long status; /* thread-synchronous flags */ | 30 | unsigned long status; /* thread-synchronous flags */ |
32 | __u32 homecache_cpu; /* CPU we are homecached on */ | 31 | __u32 homecache_cpu; /* CPU we are homecached on */ |
@@ -51,7 +50,6 @@ struct thread_info { | |||
51 | #define INIT_THREAD_INFO(tsk) \ | 50 | #define INIT_THREAD_INFO(tsk) \ |
52 | { \ | 51 | { \ |
53 | .task = &tsk, \ | 52 | .task = &tsk, \ |
54 | .exec_domain = &default_exec_domain, \ | ||
55 | .flags = 0, \ | 53 | .flags = 0, \ |
56 | .cpu = 0, \ | 54 | .cpu = 0, \ |
57 | .preempt_count = INIT_PREEMPT_COUNT, \ | 55 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/tile/kernel/compat_signal.c b/arch/tile/kernel/compat_signal.c index 8c5abf2e4794..5cbc864398d3 100644 --- a/arch/tile/kernel/compat_signal.c +++ b/arch/tile/kernel/compat_signal.c | |||
@@ -196,19 +196,12 @@ int compat_setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
196 | unsigned long restorer; | 196 | unsigned long restorer; |
197 | struct compat_rt_sigframe __user *frame; | 197 | struct compat_rt_sigframe __user *frame; |
198 | int err = 0, sig = ksig->sig; | 198 | int err = 0, sig = ksig->sig; |
199 | int usig; | ||
200 | 199 | ||
201 | frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame)); | 200 | frame = compat_get_sigframe(&ksig->ka, regs, sizeof(*frame)); |
202 | 201 | ||
203 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 202 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
204 | goto err; | 203 | goto err; |
205 | 204 | ||
206 | usig = current_thread_info()->exec_domain | ||
207 | && current_thread_info()->exec_domain->signal_invmap | ||
208 | && sig < 32 | ||
209 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
210 | : sig; | ||
211 | |||
212 | /* Always write at least the signal number for the stack backtracer. */ | 205 | /* Always write at least the signal number for the stack backtracer. */ |
213 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { | 206 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { |
214 | /* At sigreturn time, restore the callee-save registers too. */ | 207 | /* At sigreturn time, restore the callee-save registers too. */ |
@@ -243,7 +236,7 @@ int compat_setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
243 | regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */ | 236 | regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */ |
244 | regs->sp = ptr_to_compat_reg(frame); | 237 | regs->sp = ptr_to_compat_reg(frame); |
245 | regs->lr = restorer; | 238 | regs->lr = restorer; |
246 | regs->regs[0] = (unsigned long) usig; | 239 | regs->regs[0] = (unsigned long) sig; |
247 | regs->regs[1] = ptr_to_compat_reg(&frame->info); | 240 | regs->regs[1] = ptr_to_compat_reg(&frame->info); |
248 | regs->regs[2] = ptr_to_compat_reg(&frame->uc); | 241 | regs->regs[2] = ptr_to_compat_reg(&frame->uc); |
249 | regs->flags |= PT_FLAGS_CALLER_SAVES; | 242 | regs->flags |= PT_FLAGS_CALLER_SAVES; |
diff --git a/arch/tile/kernel/signal.c b/arch/tile/kernel/signal.c index 8a524e332c1a..87299a6cfec8 100644 --- a/arch/tile/kernel/signal.c +++ b/arch/tile/kernel/signal.c | |||
@@ -151,19 +151,12 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
151 | unsigned long restorer; | 151 | unsigned long restorer; |
152 | struct rt_sigframe __user *frame; | 152 | struct rt_sigframe __user *frame; |
153 | int err = 0, sig = ksig->sig; | 153 | int err = 0, sig = ksig->sig; |
154 | int usig; | ||
155 | 154 | ||
156 | frame = get_sigframe(&ksig->ka, regs, sizeof(*frame)); | 155 | frame = get_sigframe(&ksig->ka, regs, sizeof(*frame)); |
157 | 156 | ||
158 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) | 157 | if (!access_ok(VERIFY_WRITE, frame, sizeof(*frame))) |
159 | goto err; | 158 | goto err; |
160 | 159 | ||
161 | usig = current_thread_info()->exec_domain | ||
162 | && current_thread_info()->exec_domain->signal_invmap | ||
163 | && sig < 32 | ||
164 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
165 | : sig; | ||
166 | |||
167 | /* Always write at least the signal number for the stack backtracer. */ | 160 | /* Always write at least the signal number for the stack backtracer. */ |
168 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { | 161 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { |
169 | /* At sigreturn time, restore the callee-save registers too. */ | 162 | /* At sigreturn time, restore the callee-save registers too. */ |
@@ -198,7 +191,7 @@ static int setup_rt_frame(struct ksignal *ksig, sigset_t *set, | |||
198 | regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */ | 191 | regs->ex1 = PL_ICS_EX1(USER_PL, 1); /* set crit sec in handler */ |
199 | regs->sp = (unsigned long) frame; | 192 | regs->sp = (unsigned long) frame; |
200 | regs->lr = restorer; | 193 | regs->lr = restorer; |
201 | regs->regs[0] = (unsigned long) usig; | 194 | regs->regs[0] = (unsigned long) sig; |
202 | regs->regs[1] = (unsigned long) &frame->info; | 195 | regs->regs[1] = (unsigned long) &frame->info; |
203 | regs->regs[2] = (unsigned long) &frame->uc; | 196 | regs->regs[2] = (unsigned long) &frame->uc; |
204 | regs->flags |= PT_FLAGS_CALLER_SAVES; | 197 | regs->flags |= PT_FLAGS_CALLER_SAVES; |
diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h index e04114c4fcd9..b30c85b141d9 100644 --- a/arch/um/include/asm/thread_info.h +++ b/arch/um/include/asm/thread_info.h | |||
@@ -14,7 +14,6 @@ | |||
14 | 14 | ||
15 | struct thread_info { | 15 | struct thread_info { |
16 | struct task_struct *task; /* main task structure */ | 16 | struct task_struct *task; /* main task structure */ |
17 | struct exec_domain *exec_domain; /* execution domain */ | ||
18 | unsigned long flags; /* low level flags */ | 17 | unsigned long flags; /* low level flags */ |
19 | __u32 cpu; /* current CPU */ | 18 | __u32 cpu; /* current CPU */ |
20 | int preempt_count; /* 0 => preemptable, | 19 | int preempt_count; /* 0 => preemptable, |
@@ -28,7 +27,6 @@ struct thread_info { | |||
28 | #define INIT_THREAD_INFO(tsk) \ | 27 | #define INIT_THREAD_INFO(tsk) \ |
29 | { \ | 28 | { \ |
30 | .task = &tsk, \ | 29 | .task = &tsk, \ |
31 | .exec_domain = &default_exec_domain, \ | ||
32 | .flags = 0, \ | 30 | .flags = 0, \ |
33 | .cpu = 0, \ | 31 | .cpu = 0, \ |
34 | .preempt_count = INIT_PREEMPT_COUNT, \ | 32 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/unicore32/include/asm/thread_info.h b/arch/unicore32/include/asm/thread_info.h index 63e2839dfeb8..e79ad6d5b5b2 100644 --- a/arch/unicore32/include/asm/thread_info.h +++ b/arch/unicore32/include/asm/thread_info.h | |||
@@ -24,7 +24,6 @@ | |||
24 | #ifndef __ASSEMBLY__ | 24 | #ifndef __ASSEMBLY__ |
25 | 25 | ||
26 | struct task_struct; | 26 | struct task_struct; |
27 | struct exec_domain; | ||
28 | 27 | ||
29 | #include <asm/types.h> | 28 | #include <asm/types.h> |
30 | 29 | ||
@@ -71,7 +70,6 @@ struct thread_info { | |||
71 | /* <0 => bug */ | 70 | /* <0 => bug */ |
72 | mm_segment_t addr_limit; /* address limit */ | 71 | mm_segment_t addr_limit; /* address limit */ |
73 | struct task_struct *task; /* main task structure */ | 72 | struct task_struct *task; /* main task structure */ |
74 | struct exec_domain *exec_domain; /* execution domain */ | ||
75 | __u32 cpu; /* cpu */ | 73 | __u32 cpu; /* cpu */ |
76 | struct cpu_context_save cpu_context; /* cpu context */ | 74 | struct cpu_context_save cpu_context; /* cpu context */ |
77 | __u32 syscall; /* syscall number */ | 75 | __u32 syscall; /* syscall number */ |
@@ -84,7 +82,6 @@ struct thread_info { | |||
84 | #define INIT_THREAD_INFO(tsk) \ | 82 | #define INIT_THREAD_INFO(tsk) \ |
85 | { \ | 83 | { \ |
86 | .task = &tsk, \ | 84 | .task = &tsk, \ |
87 | .exec_domain = &default_exec_domain, \ | ||
88 | .flags = 0, \ | 85 | .flags = 0, \ |
89 | .preempt_count = INIT_PREEMPT_COUNT, \ | 86 | .preempt_count = INIT_PREEMPT_COUNT, \ |
90 | .addr_limit = KERNEL_DS, \ | 87 | .addr_limit = KERNEL_DS, \ |
diff --git a/arch/unicore32/kernel/asm-offsets.c b/arch/unicore32/kernel/asm-offsets.c index ffcbe7536ca7..80d50c4651e3 100644 --- a/arch/unicore32/kernel/asm-offsets.c +++ b/arch/unicore32/kernel/asm-offsets.c | |||
@@ -42,7 +42,6 @@ int main(void) | |||
42 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); | 42 | DEFINE(TI_PREEMPT, offsetof(struct thread_info, preempt_count)); |
43 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); | 43 | DEFINE(TI_ADDR_LIMIT, offsetof(struct thread_info, addr_limit)); |
44 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); | 44 | DEFINE(TI_TASK, offsetof(struct thread_info, task)); |
45 | DEFINE(TI_EXEC_DOMAIN, offsetof(struct thread_info, exec_domain)); | ||
46 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); | 45 | DEFINE(TI_CPU, offsetof(struct thread_info, cpu)); |
47 | DEFINE(TI_CPU_SAVE, offsetof(struct thread_info, cpu_context)); | 46 | DEFINE(TI_CPU_SAVE, offsetof(struct thread_info, cpu_context)); |
48 | DEFINE(TI_USED_CP, offsetof(struct thread_info, used_cp)); | 47 | DEFINE(TI_USED_CP, offsetof(struct thread_info, used_cp)); |
diff --git a/arch/unicore32/kernel/signal.c b/arch/unicore32/kernel/signal.c index d329f85766cc..4ae51cf15ade 100644 --- a/arch/unicore32/kernel/signal.c +++ b/arch/unicore32/kernel/signal.c | |||
@@ -330,13 +330,6 @@ static void handle_signal(struct ksignal *ksig, struct pt_regs *regs, | |||
330 | } | 330 | } |
331 | 331 | ||
332 | /* | 332 | /* |
333 | * translate the signal | ||
334 | */ | ||
335 | if (usig < 32 && thread->exec_domain | ||
336 | && thread->exec_domain->signal_invmap) | ||
337 | usig = thread->exec_domain->signal_invmap[usig]; | ||
338 | |||
339 | /* | ||
340 | * Set up the stack frame | 333 | * Set up the stack frame |
341 | */ | 334 | */ |
342 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) | 335 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) |
diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h index ea2dbe82cba3..b4bdec3e9523 100644 --- a/arch/x86/include/asm/thread_info.h +++ b/arch/x86/include/asm/thread_info.h | |||
@@ -46,13 +46,11 @@ | |||
46 | */ | 46 | */ |
47 | #ifndef __ASSEMBLY__ | 47 | #ifndef __ASSEMBLY__ |
48 | struct task_struct; | 48 | struct task_struct; |
49 | struct exec_domain; | ||
50 | #include <asm/processor.h> | 49 | #include <asm/processor.h> |
51 | #include <linux/atomic.h> | 50 | #include <linux/atomic.h> |
52 | 51 | ||
53 | struct thread_info { | 52 | struct thread_info { |
54 | struct task_struct *task; /* main task structure */ | 53 | struct task_struct *task; /* main task structure */ |
55 | struct exec_domain *exec_domain; /* execution domain */ | ||
56 | __u32 flags; /* low level flags */ | 54 | __u32 flags; /* low level flags */ |
57 | __u32 status; /* thread synchronous flags */ | 55 | __u32 status; /* thread synchronous flags */ |
58 | __u32 cpu; /* current CPU */ | 56 | __u32 cpu; /* current CPU */ |
@@ -66,7 +64,6 @@ struct thread_info { | |||
66 | #define INIT_THREAD_INFO(tsk) \ | 64 | #define INIT_THREAD_INFO(tsk) \ |
67 | { \ | 65 | { \ |
68 | .task = &tsk, \ | 66 | .task = &tsk, \ |
69 | .exec_domain = &default_exec_domain, \ | ||
70 | .flags = 0, \ | 67 | .flags = 0, \ |
71 | .cpu = 0, \ | 68 | .cpu = 0, \ |
72 | .saved_preempt_count = INIT_PREEMPT_COUNT, \ | 69 | .saved_preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c index 3e581865c8e2..f9804080ccb3 100644 --- a/arch/x86/kernel/signal.c +++ b/arch/x86/kernel/signal.c | |||
@@ -593,24 +593,10 @@ badframe: | |||
593 | return 0; | 593 | return 0; |
594 | } | 594 | } |
595 | 595 | ||
596 | /* | ||
597 | * OK, we're invoking a handler: | ||
598 | */ | ||
599 | static int signr_convert(int sig) | ||
600 | { | ||
601 | #ifdef CONFIG_X86_32 | ||
602 | struct thread_info *info = current_thread_info(); | ||
603 | |||
604 | if (info->exec_domain && info->exec_domain->signal_invmap && sig < 32) | ||
605 | return info->exec_domain->signal_invmap[sig]; | ||
606 | #endif /* CONFIG_X86_32 */ | ||
607 | return sig; | ||
608 | } | ||
609 | |||
610 | static int | 596 | static int |
611 | setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) | 597 | setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs) |
612 | { | 598 | { |
613 | int usig = signr_convert(ksig->sig); | 599 | int usig = ksig->sig; |
614 | sigset_t *set = sigmask_to_save(); | 600 | sigset_t *set = sigmask_to_save(); |
615 | compat_sigset_t *cset = (compat_sigset_t *) set; | 601 | compat_sigset_t *cset = (compat_sigset_t *) set; |
616 | 602 | ||
diff --git a/arch/x86/um/signal.c b/arch/x86/um/signal.c index 0c8c32bfd792..592491d1d70d 100644 --- a/arch/x86/um/signal.c +++ b/arch/x86/um/signal.c | |||
@@ -549,13 +549,6 @@ int setup_signal_stack_si(unsigned long stack_top, struct ksignal *ksig, | |||
549 | if (err) | 549 | if (err) |
550 | return err; | 550 | return err; |
551 | 551 | ||
552 | /* Set up registers for signal handler */ | ||
553 | { | ||
554 | struct exec_domain *ed = current_thread_info()->exec_domain; | ||
555 | if (unlikely(ed && ed->signal_invmap && sig < 32)) | ||
556 | sig = ed->signal_invmap[sig]; | ||
557 | } | ||
558 | |||
559 | PT_REGS_SP(regs) = (unsigned long) frame; | 552 | PT_REGS_SP(regs) = (unsigned long) frame; |
560 | PT_REGS_DI(regs) = sig; | 553 | PT_REGS_DI(regs) = sig; |
561 | /* In case the signal handler was declared without prototypes */ | 554 | /* In case the signal handler was declared without prototypes */ |
diff --git a/arch/xtensa/include/asm/thread_info.h b/arch/xtensa/include/asm/thread_info.h index a9b5d3ba196c..9ad12c617184 100644 --- a/arch/xtensa/include/asm/thread_info.h +++ b/arch/xtensa/include/asm/thread_info.h | |||
@@ -44,7 +44,6 @@ typedef struct xtregs_coprocessor { | |||
44 | 44 | ||
45 | struct thread_info { | 45 | struct thread_info { |
46 | struct task_struct *task; /* main task structure */ | 46 | struct task_struct *task; /* main task structure */ |
47 | struct exec_domain *exec_domain; /* execution domain */ | ||
48 | unsigned long flags; /* low level flags */ | 47 | unsigned long flags; /* low level flags */ |
49 | unsigned long status; /* thread-synchronous flags */ | 48 | unsigned long status; /* thread-synchronous flags */ |
50 | __u32 cpu; /* current CPU */ | 49 | __u32 cpu; /* current CPU */ |
@@ -61,17 +60,6 @@ struct thread_info { | |||
61 | xtregs_user_t xtregs_user; | 60 | xtregs_user_t xtregs_user; |
62 | }; | 61 | }; |
63 | 62 | ||
64 | #else /* !__ASSEMBLY__ */ | ||
65 | |||
66 | /* offsets into the thread_info struct for assembly code access */ | ||
67 | #define TI_TASK 0x00000000 | ||
68 | #define TI_EXEC_DOMAIN 0x00000004 | ||
69 | #define TI_FLAGS 0x00000008 | ||
70 | #define TI_STATUS 0x0000000C | ||
71 | #define TI_CPU 0x00000010 | ||
72 | #define TI_PRE_COUNT 0x00000014 | ||
73 | #define TI_ADDR_LIMIT 0x00000018 | ||
74 | |||
75 | #endif | 63 | #endif |
76 | 64 | ||
77 | /* | 65 | /* |
@@ -83,7 +71,6 @@ struct thread_info { | |||
83 | #define INIT_THREAD_INFO(tsk) \ | 71 | #define INIT_THREAD_INFO(tsk) \ |
84 | { \ | 72 | { \ |
85 | .task = &tsk, \ | 73 | .task = &tsk, \ |
86 | .exec_domain = &default_exec_domain, \ | ||
87 | .flags = 0, \ | 74 | .flags = 0, \ |
88 | .cpu = 0, \ | 75 | .cpu = 0, \ |
89 | .preempt_count = INIT_PREEMPT_COUNT, \ | 76 | .preempt_count = INIT_PREEMPT_COUNT, \ |
diff --git a/arch/xtensa/kernel/asm-offsets.c b/arch/xtensa/kernel/asm-offsets.c index 1915c7c889ba..b123ace3b67c 100644 --- a/arch/xtensa/kernel/asm-offsets.c +++ b/arch/xtensa/kernel/asm-offsets.c | |||
@@ -77,6 +77,14 @@ int main(void) | |||
77 | DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, stack)); | 77 | DEFINE(TASK_THREAD_INFO, offsetof (struct task_struct, stack)); |
78 | DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct)); | 78 | DEFINE(TASK_STRUCT_SIZE, sizeof (struct task_struct)); |
79 | 79 | ||
80 | /* offsets in thread_info struct */ | ||
81 | OFFSET(TI_TASK, thread_info, task); | ||
82 | OFFSET(TI_FLAGS, thread_info, flags); | ||
83 | OFFSET(TI_STSTUS, thread_info, status); | ||
84 | OFFSET(TI_CPU, thread_info, cpu); | ||
85 | OFFSET(TI_PRE_COUNT, thread_info, preempt_count); | ||
86 | OFFSET(TI_ADDR_LIMIT, thread_info, addr_limit); | ||
87 | |||
80 | /* struct thread_info (offset from start_struct) */ | 88 | /* struct thread_info (offset from start_struct) */ |
81 | DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra)); | 89 | DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra)); |
82 | DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp)); | 90 | DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp)); |
diff --git a/arch/xtensa/kernel/signal.c b/arch/xtensa/kernel/signal.c index 6b3790445cbe..e87adaa07ff3 100644 --- a/arch/xtensa/kernel/signal.c +++ b/arch/xtensa/kernel/signal.c | |||
@@ -336,7 +336,6 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
336 | { | 336 | { |
337 | struct rt_sigframe *frame; | 337 | struct rt_sigframe *frame; |
338 | int err = 0, sig = ksig->sig; | 338 | int err = 0, sig = ksig->sig; |
339 | int signal; | ||
340 | unsigned long sp, ra, tp; | 339 | unsigned long sp, ra, tp; |
341 | 340 | ||
342 | sp = regs->areg[1]; | 341 | sp = regs->areg[1]; |
@@ -354,12 +353,6 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
354 | return -EFAULT; | 353 | return -EFAULT; |
355 | } | 354 | } |
356 | 355 | ||
357 | signal = current_thread_info()->exec_domain | ||
358 | && current_thread_info()->exec_domain->signal_invmap | ||
359 | && sig < 32 | ||
360 | ? current_thread_info()->exec_domain->signal_invmap[sig] | ||
361 | : sig; | ||
362 | |||
363 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { | 356 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { |
364 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); | 357 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
365 | } | 358 | } |
@@ -400,14 +393,14 @@ static int setup_frame(struct ksignal *ksig, sigset_t *set, | |||
400 | * Note: PS.CALLINC is set to one by start_thread | 393 | * Note: PS.CALLINC is set to one by start_thread |
401 | */ | 394 | */ |
402 | regs->areg[4] = (((unsigned long) ra) & 0x3fffffff) | 0x40000000; | 395 | regs->areg[4] = (((unsigned long) ra) & 0x3fffffff) | 0x40000000; |
403 | regs->areg[6] = (unsigned long) signal; | 396 | regs->areg[6] = (unsigned long) sig; |
404 | regs->areg[7] = (unsigned long) &frame->info; | 397 | regs->areg[7] = (unsigned long) &frame->info; |
405 | regs->areg[8] = (unsigned long) &frame->uc; | 398 | regs->areg[8] = (unsigned long) &frame->uc; |
406 | regs->threadptr = tp; | 399 | regs->threadptr = tp; |
407 | 400 | ||
408 | #if DEBUG_SIG | 401 | #if DEBUG_SIG |
409 | printk("SIG rt deliver (%s:%d): signal=%d sp=%p pc=%08x\n", | 402 | printk("SIG rt deliver (%s:%d): signal=%d sp=%p pc=%08x\n", |
410 | current->comm, current->pid, signal, frame, regs->pc); | 403 | current->comm, current->pid, sig, frame, regs->pc); |
411 | #endif | 404 | #endif |
412 | 405 | ||
413 | return 0; | 406 | return 0; |
diff --git a/include/linux/personality.h b/include/linux/personality.h index 646c0a7d50fa..aeb7892b2468 100644 --- a/include/linux/personality.h +++ b/include/linux/personality.h | |||
@@ -3,52 +3,14 @@ | |||
3 | 3 | ||
4 | #include <uapi/linux/personality.h> | 4 | #include <uapi/linux/personality.h> |
5 | 5 | ||
6 | |||
7 | /* | ||
8 | * Handling of different ABIs (personalities). | ||
9 | */ | ||
10 | |||
11 | struct exec_domain; | ||
12 | struct pt_regs; | ||
13 | |||
14 | extern int register_exec_domain(struct exec_domain *); | ||
15 | extern int unregister_exec_domain(struct exec_domain *); | ||
16 | extern int __set_personality(unsigned int); | ||
17 | |||
18 | |||
19 | /* | ||
20 | * Description of an execution domain. | ||
21 | * | ||
22 | * The first two members are refernced from assembly source | ||
23 | * and should stay where they are unless explicitly needed. | ||
24 | */ | ||
25 | typedef void (*handler_t)(int, struct pt_regs *); | ||
26 | |||
27 | struct exec_domain { | ||
28 | const char *name; /* name of the execdomain */ | ||
29 | handler_t handler; /* handler for syscalls */ | ||
30 | unsigned char pers_low; /* lowest personality */ | ||
31 | unsigned char pers_high; /* highest personality */ | ||
32 | unsigned long *signal_map; /* signal mapping */ | ||
33 | unsigned long *signal_invmap; /* reverse signal mapping */ | ||
34 | struct map_segment *err_map; /* error mapping */ | ||
35 | struct map_segment *socktype_map; /* socket type mapping */ | ||
36 | struct map_segment *sockopt_map; /* socket option mapping */ | ||
37 | struct map_segment *af_map; /* address family mapping */ | ||
38 | struct module *module; /* module context of the ed. */ | ||
39 | struct exec_domain *next; /* linked list (internal) */ | ||
40 | }; | ||
41 | |||
42 | /* | 6 | /* |
43 | * Return the base personality without flags. | 7 | * Return the base personality without flags. |
44 | */ | 8 | */ |
45 | #define personality(pers) (pers & PER_MASK) | 9 | #define personality(pers) (pers & PER_MASK) |
46 | 10 | ||
47 | |||
48 | /* | 11 | /* |
49 | * Change personality of the currently running process. | 12 | * Change personality of the currently running process. |
50 | */ | 13 | */ |
51 | #define set_personality(pers) \ | 14 | #define set_personality(pers) (current->personality = (pers)) |
52 | ((current->personality == (pers)) ? 0 : __set_personality(pers)) | ||
53 | 15 | ||
54 | #endif /* _LINUX_PERSONALITY_H */ | 16 | #endif /* _LINUX_PERSONALITY_H */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index f74d4cc3a3e5..8222ae40ecb0 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -125,7 +125,6 @@ struct sched_attr { | |||
125 | u64 sched_period; | 125 | u64 sched_period; |
126 | }; | 126 | }; |
127 | 127 | ||
128 | struct exec_domain; | ||
129 | struct futex_pi_state; | 128 | struct futex_pi_state; |
130 | struct robust_list_head; | 129 | struct robust_list_head; |
131 | struct bio_list; | 130 | struct bio_list; |
@@ -2311,11 +2310,6 @@ extern void set_curr_task(int cpu, struct task_struct *p); | |||
2311 | 2310 | ||
2312 | void yield(void); | 2311 | void yield(void); |
2313 | 2312 | ||
2314 | /* | ||
2315 | * The default (Linux) execution domain. | ||
2316 | */ | ||
2317 | extern struct exec_domain default_exec_domain; | ||
2318 | |||
2319 | union thread_union { | 2313 | union thread_union { |
2320 | struct thread_info thread_info; | 2314 | struct thread_info thread_info; |
2321 | unsigned long stack[THREAD_SIZE/sizeof(long)]; | 2315 | unsigned long stack[THREAD_SIZE/sizeof(long)]; |
diff --git a/kernel/exec_domain.c b/kernel/exec_domain.c index 83d4382f5699..6873bb3e6b7e 100644 --- a/kernel/exec_domain.c +++ b/kernel/exec_domain.c | |||
@@ -20,145 +20,10 @@ | |||
20 | #include <linux/types.h> | 20 | #include <linux/types.h> |
21 | #include <linux/fs_struct.h> | 21 | #include <linux/fs_struct.h> |
22 | 22 | ||
23 | |||
24 | static void default_handler(int, struct pt_regs *); | ||
25 | |||
26 | static struct exec_domain *exec_domains = &default_exec_domain; | ||
27 | static DEFINE_RWLOCK(exec_domains_lock); | ||
28 | |||
29 | |||
30 | static unsigned long ident_map[32] = { | ||
31 | 0, 1, 2, 3, 4, 5, 6, 7, | ||
32 | 8, 9, 10, 11, 12, 13, 14, 15, | ||
33 | 16, 17, 18, 19, 20, 21, 22, 23, | ||
34 | 24, 25, 26, 27, 28, 29, 30, 31 | ||
35 | }; | ||
36 | |||
37 | struct exec_domain default_exec_domain = { | ||
38 | .name = "Linux", /* name */ | ||
39 | .handler = default_handler, /* lcall7 causes a seg fault. */ | ||
40 | .pers_low = 0, /* PER_LINUX personality. */ | ||
41 | .pers_high = 0, /* PER_LINUX personality. */ | ||
42 | .signal_map = ident_map, /* Identity map signals. */ | ||
43 | .signal_invmap = ident_map, /* - both ways. */ | ||
44 | }; | ||
45 | |||
46 | |||
47 | static void | ||
48 | default_handler(int segment, struct pt_regs *regp) | ||
49 | { | ||
50 | set_personality(0); | ||
51 | |||
52 | if (current_thread_info()->exec_domain->handler != default_handler) | ||
53 | current_thread_info()->exec_domain->handler(segment, regp); | ||
54 | else | ||
55 | send_sig(SIGSEGV, current, 1); | ||
56 | } | ||
57 | |||
58 | static struct exec_domain * | ||
59 | lookup_exec_domain(unsigned int personality) | ||
60 | { | ||
61 | unsigned int pers = personality(personality); | ||
62 | struct exec_domain *ep; | ||
63 | |||
64 | read_lock(&exec_domains_lock); | ||
65 | for (ep = exec_domains; ep; ep = ep->next) { | ||
66 | if (pers >= ep->pers_low && pers <= ep->pers_high) | ||
67 | if (try_module_get(ep->module)) | ||
68 | goto out; | ||
69 | } | ||
70 | |||
71 | #ifdef CONFIG_MODULES | ||
72 | read_unlock(&exec_domains_lock); | ||
73 | request_module("personality-%d", pers); | ||
74 | read_lock(&exec_domains_lock); | ||
75 | |||
76 | for (ep = exec_domains; ep; ep = ep->next) { | ||
77 | if (pers >= ep->pers_low && pers <= ep->pers_high) | ||
78 | if (try_module_get(ep->module)) | ||
79 | goto out; | ||
80 | } | ||
81 | #endif | ||
82 | |||
83 | ep = &default_exec_domain; | ||
84 | out: | ||
85 | read_unlock(&exec_domains_lock); | ||
86 | return ep; | ||
87 | } | ||
88 | |||
89 | int | ||
90 | register_exec_domain(struct exec_domain *ep) | ||
91 | { | ||
92 | struct exec_domain *tmp; | ||
93 | int err = -EBUSY; | ||
94 | |||
95 | if (ep == NULL) | ||
96 | return -EINVAL; | ||
97 | |||
98 | if (ep->next != NULL) | ||
99 | return -EBUSY; | ||
100 | |||
101 | write_lock(&exec_domains_lock); | ||
102 | for (tmp = exec_domains; tmp; tmp = tmp->next) { | ||
103 | if (tmp == ep) | ||
104 | goto out; | ||
105 | } | ||
106 | |||
107 | ep->next = exec_domains; | ||
108 | exec_domains = ep; | ||
109 | err = 0; | ||
110 | |||
111 | out: | ||
112 | write_unlock(&exec_domains_lock); | ||
113 | return err; | ||
114 | } | ||
115 | EXPORT_SYMBOL(register_exec_domain); | ||
116 | |||
117 | int | ||
118 | unregister_exec_domain(struct exec_domain *ep) | ||
119 | { | ||
120 | struct exec_domain **epp; | ||
121 | |||
122 | epp = &exec_domains; | ||
123 | write_lock(&exec_domains_lock); | ||
124 | for (epp = &exec_domains; *epp; epp = &(*epp)->next) { | ||
125 | if (ep == *epp) | ||
126 | goto unregister; | ||
127 | } | ||
128 | write_unlock(&exec_domains_lock); | ||
129 | return -EINVAL; | ||
130 | |||
131 | unregister: | ||
132 | *epp = ep->next; | ||
133 | ep->next = NULL; | ||
134 | write_unlock(&exec_domains_lock); | ||
135 | return 0; | ||
136 | } | ||
137 | EXPORT_SYMBOL(unregister_exec_domain); | ||
138 | |||
139 | int __set_personality(unsigned int personality) | ||
140 | { | ||
141 | struct exec_domain *oep = current_thread_info()->exec_domain; | ||
142 | |||
143 | current_thread_info()->exec_domain = lookup_exec_domain(personality); | ||
144 | current->personality = personality; | ||
145 | module_put(oep->module); | ||
146 | |||
147 | return 0; | ||
148 | } | ||
149 | EXPORT_SYMBOL(__set_personality); | ||
150 | |||
151 | #ifdef CONFIG_PROC_FS | 23 | #ifdef CONFIG_PROC_FS |
152 | static int execdomains_proc_show(struct seq_file *m, void *v) | 24 | static int execdomains_proc_show(struct seq_file *m, void *v) |
153 | { | 25 | { |
154 | struct exec_domain *ep; | 26 | seq_puts(m, "0-0\tLinux \t[kernel]\n"); |
155 | |||
156 | read_lock(&exec_domains_lock); | ||
157 | for (ep = exec_domains; ep; ep = ep->next) | ||
158 | seq_printf(m, "%d-%d\t%-16s\t[%s]\n", | ||
159 | ep->pers_low, ep->pers_high, ep->name, | ||
160 | module_name(ep->module)); | ||
161 | read_unlock(&exec_domains_lock); | ||
162 | return 0; | 27 | return 0; |
163 | } | 28 | } |
164 | 29 | ||
diff --git a/kernel/exit.c b/kernel/exit.c index feff10bbb307..22fcc05dec40 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
@@ -756,8 +756,6 @@ void do_exit(long code) | |||
756 | 756 | ||
757 | cgroup_exit(tsk); | 757 | cgroup_exit(tsk); |
758 | 758 | ||
759 | module_put(task_thread_info(tsk)->exec_domain->module); | ||
760 | |||
761 | /* | 759 | /* |
762 | * FIXME: do that only when needed, using sched_exit tracepoint | 760 | * FIXME: do that only when needed, using sched_exit tracepoint |
763 | */ | 761 | */ |
diff --git a/kernel/fork.c b/kernel/fork.c index cf65139615a0..f2c1e7352298 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1279,9 +1279,6 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1279 | if (nr_threads >= max_threads) | 1279 | if (nr_threads >= max_threads) |
1280 | goto bad_fork_cleanup_count; | 1280 | goto bad_fork_cleanup_count; |
1281 | 1281 | ||
1282 | if (!try_module_get(task_thread_info(p)->exec_domain->module)) | ||
1283 | goto bad_fork_cleanup_count; | ||
1284 | |||
1285 | delayacct_tsk_init(p); /* Must remain after dup_task_struct() */ | 1282 | delayacct_tsk_init(p); /* Must remain after dup_task_struct() */ |
1286 | p->flags &= ~(PF_SUPERPRIV | PF_WQ_WORKER); | 1283 | p->flags &= ~(PF_SUPERPRIV | PF_WQ_WORKER); |
1287 | p->flags |= PF_FORKNOEXEC; | 1284 | p->flags |= PF_FORKNOEXEC; |
@@ -1590,7 +1587,6 @@ bad_fork_cleanup_threadgroup_lock: | |||
1590 | if (clone_flags & CLONE_THREAD) | 1587 | if (clone_flags & CLONE_THREAD) |
1591 | threadgroup_change_end(current); | 1588 | threadgroup_change_end(current); |
1592 | delayacct_tsk_free(p); | 1589 | delayacct_tsk_free(p); |
1593 | module_put(task_thread_info(p)->exec_domain->module); | ||
1594 | bad_fork_cleanup_count: | 1590 | bad_fork_cleanup_count: |
1595 | atomic_dec(&p->cred->user->processes); | 1591 | atomic_dec(&p->cred->user->processes); |
1596 | exit_creds(p); | 1592 | exit_creds(p); |