public inbox for linux-arch@vger.kernel.org
 help / color / mirror / Atom feed
* [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso]
@ 2006-02-28  8:35 Benjamin Herrenschmidt
  2006-02-28  9:22 ` David Howells
  0 siblings, 1 reply; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2006-02-28  8:35 UTC (permalink / raw)
  To: Linux Arch list

Forgot this list on the CC ... Comments welcome, the idea is to finally
track if an mm is 32 or 64 bits (knowing that I have an urgent need to
get that fixed in 2.6.16 due to a problem with the powerpc vdso).

Please, arch maintainer, comment if the approach I use for setting
mm->task_size is valid for you.

Ben.


-------- Forwarded Message --------
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Andrew Morton <akpm@osdl.org>
Cc: linux-mm@kvack.org, hugh@veritas.com, paulus@samba.org,
nickpiggin@yahoo.com.au, David S. Miller <davem@davemloft.net>
Subject: [PATCH] Add mm->task_size and fix powerpc vdso
Date: 	Tue, 28 Feb 2006 17:27:20 +1100

This patch adds mm->task_size to keep track of the task size of a given
mm and uses that to fix the powerpc vdso so that it uses the mm task
size to decide what pages to fault in instead of the current thread
flags (which broke when ptracing).

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>

Index: linux-work/arch/powerpc/kernel/vdso.c
===================================================================
--- linux-work.orig/arch/powerpc/kernel/vdso.c	2005-11-29 10:56:02.000000000 +1100
+++ linux-work/arch/powerpc/kernel/vdso.c	2006-02-28 17:07:18.000000000 +1100
@@ -182,8 +182,8 @@ static struct page * vdso_vma_nopage(str
 	unsigned long offset = address - vma->vm_start;
 	struct page *pg;
 #ifdef CONFIG_PPC64
-	void *vbase = test_thread_flag(TIF_32BIT) ?
-		vdso32_kbase : vdso64_kbase;
+	void *vbase = (vma->vm_mm->task_size > TASK_SIZE_USER32) ?
+		vdso64_kbase : vdso32_kbase;
 #else
 	void *vbase = vdso32_kbase;
 #endif
Index: linux-work/fs/exec.c
===================================================================
--- linux-work.orig/fs/exec.c	2006-02-17 14:38:43.000000000 +1100
+++ linux-work/fs/exec.c	2006-02-28 17:05:50.000000000 +1100
@@ -885,6 +885,12 @@ int flush_old_exec(struct linux_binprm *
 	current->flags &= ~PF_RANDOMIZE;
 	flush_thread();
 
+	/* Set the new mm task size. We have to do that late because it may
+	 * depend on TIF_32BIT which is only updated in flush_thread() on
+	 * some architectures like powerpc
+	 */
+	current->mm->task_size = TASK_SIZE;
+
 	if (bprm->e_uid != current->euid || bprm->e_gid != current->egid || 
 	    file_permission(bprm->file, MAY_READ) ||
 	    (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)) {
Index: linux-work/include/linux/sched.h
===================================================================
--- linux-work.orig/include/linux/sched.h	2006-02-17 14:38:43.000000000 +1100
+++ linux-work/include/linux/sched.h	2006-02-28 17:03:52.000000000 +1100
@@ -299,6 +299,7 @@ struct mm_struct {
 				unsigned long pgoff, unsigned long flags);
 	void (*unmap_area) (struct mm_struct *mm, unsigned long addr);
         unsigned long mmap_base;		/* base of mmap area */
+	unsigned long task_size;		/* size of task vm space */
         unsigned long cached_hole_size;         /* if non-zero, the largest hole below free_area_cache */
 	unsigned long free_area_cache;		/* first hole of size cached_hole_size or larger */
 	pgd_t * pgd;


--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso]
  2006-02-28  8:35 [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso] Benjamin Herrenschmidt
@ 2006-02-28  9:22 ` David Howells
  2006-02-28  9:32   ` Benjamin Herrenschmidt
  2006-02-28 10:05   ` Paul Mackerras
  0 siblings, 2 replies; 4+ messages in thread
From: David Howells @ 2006-02-28  9:22 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: Linux Arch list

Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:

> Forgot this list on the CC ... Comments welcome, the idea is to finally
> track if an mm is 32 or 64 bits (knowing that I have an urgent need to
> get that fixed in 2.6.16 due to a problem with the powerpc vdso).

Is it possible to end up with a 32-bit and a 64-bit process sharing an
mm_struct? I assume not as I imagine this is set up by execve() which'll
destroy any CLONE_VM sharing.

David

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso]
  2006-02-28  9:22 ` David Howells
@ 2006-02-28  9:32   ` Benjamin Herrenschmidt
  2006-02-28 10:05   ` Paul Mackerras
  1 sibling, 0 replies; 4+ messages in thread
From: Benjamin Herrenschmidt @ 2006-02-28  9:32 UTC (permalink / raw)
  To: David Howells; +Cc: Linux Arch list

On Tue, 2006-02-28 at 09:22 +0000, David Howells wrote:
> Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> 
> > Forgot this list on the CC ... Comments welcome, the idea is to finally
> > track if an mm is 32 or 64 bits (knowing that I have an urgent need to
> > get that fixed in 2.6.16 due to a problem with the powerpc vdso).
> 
> Is it possible to end up with a 32-bit and a 64-bit process sharing an
> mm_struct? I assume not as I imagine this is set up by execve() which'll
> destroy any CLONE_VM sharing.

Well, if it's possible, I don't see how it would be possible for those
to have a vDSO at all ... But I don't think it's possible with any
current code path.

Ben.



^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso]
  2006-02-28  9:22 ` David Howells
  2006-02-28  9:32   ` Benjamin Herrenschmidt
@ 2006-02-28 10:05   ` Paul Mackerras
  1 sibling, 0 replies; 4+ messages in thread
From: Paul Mackerras @ 2006-02-28 10:05 UTC (permalink / raw)
  To: David Howells; +Cc: Benjamin Herrenschmidt, Linux Arch list

David Howells writes:

> Is it possible to end up with a 32-bit and a 64-bit process sharing an
> mm_struct? I assume not as I imagine this is set up by execve() which'll
> destroy any CLONE_VM sharing.

No... the only way to switch between 32-bit and 64-bit is via exec,
which creates a new mm.

Paul.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2006-02-28 10:06 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-02-28  8:35 [Fwd: [PATCH] Add mm->task_size and fix powerpc vdso] Benjamin Herrenschmidt
2006-02-28  9:22 ` David Howells
2006-02-28  9:32   ` Benjamin Herrenschmidt
2006-02-28 10:05   ` Paul Mackerras

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox