aboutsummaryrefslogtreecommitdiffstats
path: root/fs/binfmt_elf_fdpic.c
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2008-10-16 01:04:15 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-10-16 14:21:46 -0400
commitc7637941d16ae426a94058fe3b5460a31f68f61b (patch)
tree61ae6860d2e58acf17ca2c3c774b99db6994a5a4 /fs/binfmt_elf_fdpic.c
parentec23847d6cfe445ba9a1a5ec513297f4cc0ada53 (diff)
binfmt_elf_fdpic: convert initial stack alignment to arch_align_stack()
binfmt_elf_fdpic seems to have grabbed a hard-coded hack from an ancient version of binfmt_elf in order to try and fix up initial stack alignment on multi-threaded x86, which while in addition to being unused, was also pushed down beyond the first set of operations on the stack pointer, negating the entire purpose. These days, we have an architecture independent arch_align_stack(), so we switch to using that instead. Move the initial alignment up before the initial stores while we're at it. Signed-off-by: Paul Mundt <lethal@linux-sh.org> Signed-off-by: David Howells <dhowells@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'fs/binfmt_elf_fdpic.c')
-rw-r--r--fs/binfmt_elf_fdpic.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index e4eb472558ca..9eee649449a8 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -466,7 +466,8 @@ error_kill:
466#endif 466#endif
467 467
468/* 468/*
469 * present useful information to the program 469 * present useful information to the program by shovelling it onto the new
470 * process's stack
470 */ 471 */
471static int create_elf_fdpic_tables(struct linux_binprm *bprm, 472static int create_elf_fdpic_tables(struct linux_binprm *bprm,
472 struct mm_struct *mm, 473 struct mm_struct *mm,
@@ -482,9 +483,13 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
482 int loop; 483 int loop;
483 int nr; /* reset for each csp adjustment */ 484 int nr; /* reset for each csp adjustment */
484 485
485 /* we're going to shovel a whole load of stuff onto the stack */
486#ifdef CONFIG_MMU 486#ifdef CONFIG_MMU
487 sp = bprm->p; 487 /* In some cases (e.g. Hyper-Threading), we want to avoid L1 evictions
488 * by the processes running on the same package. One thing we can do is
489 * to shuffle the initial stack for them, so we give the architecture
490 * an opportunity to do so here.
491 */
492 sp = arch_align_stack(bprm->p);
488#else 493#else
489 sp = mm->start_stack; 494 sp = mm->start_stack;
490 495
@@ -527,20 +532,6 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
527 return -EFAULT; 532 return -EFAULT;
528 } 533 }
529 534
530#if defined(__i386__) && defined(CONFIG_SMP)
531 /* in some cases (e.g. Hyper-Threading), we want to avoid L1 evictions
532 * by the processes running on the same package. One thing we can do is
533 * to shuffle the initial stack for them.
534 *
535 * the conditionals here are unneeded, but kept in to make the code
536 * behaviour the same as pre change unless we have hyperthreaded
537 * processors. This keeps Mr Marcelo Person happier but should be
538 * removed for 2.5
539 */
540 if (smp_num_siblings > 1)
541 sp = sp - ((current->pid % 64) << 7);
542#endif
543
544 sp &= ~7UL; 535 sp &= ~7UL;
545 536
546 /* stack the load map(s) */ 537 /* stack the load map(s) */