aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-04-15 16:53:55 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-04-15 16:53:55 -0400
commitfa2e5c073a355465a2a8c9a2fbecf404f9857c3a (patch)
tree771be75e5436031ad53649634dffa67f6667b083 /arch/sh
parente44740c1a94b5d39b093045920f543a7bc135584 (diff)
parent97b2f0dc331474fb80ba4f4e4aee1d8e9ffbf7ce (diff)
Merge branch 'exec_domain_rip_v2' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc
Pull exec domain removal from Richard Weinberger: "This series removes execution domain support from Linux. The idea behind exec domains was to support different ABIs. The feature was never complete nor stable. Let's rip it out and make the kernel signal handling code less complicated" * 'exec_domain_rip_v2' of git://git.kernel.org/pub/scm/linux/kernel/git/rw/misc: (27 commits) arm64: Removed unused variable sparc: Fix execution domain removal Remove rest of exec domains. arch: Remove exec_domain from remaining archs arc: Remove signal translation and exec_domain xtensa: Remove signal translation and exec_domain xtensa: Autogenerate offsets in struct thread_info x86: Remove signal translation and exec_domain unicore32: Remove signal translation and exec_domain um: Remove signal translation and exec_domain tile: Remove signal translation and exec_domain sparc: Remove signal translation and exec_domain sh: Remove signal translation and exec_domain s390: Remove signal translation and exec_domain mn10300: Remove signal translation and exec_domain microblaze: Remove signal translation and exec_domain m68k: Remove signal translation and exec_domain m32r: Remove signal translation and exec_domain m32r: Autogenerate offsets in struct thread_info frv: Remove signal translation and exec_domain ...
Diffstat (limited to 'arch/sh')
-rw-r--r--arch/sh/include/asm/thread_info.h2
-rw-r--r--arch/sh/kernel/asm-offsets.c1
-rw-r--r--arch/sh/kernel/irq.c2
-rw-r--r--arch/sh/kernel/signal_32.c18
-rw-r--r--arch/sh/kernel/signal_64.c21
5 files changed, 6 insertions, 38 deletions
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
28struct thread_info { 28struct 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