All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/6] freepgt2: free_pgtables from FIRST_USER_ADDRESS
@ 2005-04-07  1:10 Hugh Dickins
  2005-04-07  1:13 ` [PATCH 2/6] freepgt2: sys_mincore ignore FIRST_USER_PGD_NR Hugh Dickins
                   ` (4 more replies)
  0 siblings, 5 replies; 10+ messages in thread
From: Hugh Dickins @ 2005-04-07  1:10 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Nick Piggin, Russell King, linux-kernel

The patches to free_pgtables by vma left problems on any architectures
which leave some user address page table entries unencapsulated by vma.
Andi has fixed the 32-bit vDSO on x86_64 to use a vma.  Now fix arm (and
arm26), whose first PAGE_SIZE is reserved (perhaps) for machine vectors.

Our calls to free_pgtables must not touch that area, and exit_mmap's
BUG_ON(nr_ptes) must allow that arm's get_pgd_slow may (or may not) have
allocated an extra page table, which its free_pgd_slow would free later.

FIRST_USER_PGD_NR has misled me and others: until all the arches define
FIRST_USER_ADDRESS instead, a hack in mmap.c to derive one from t'other.
This patch fixes the bugs, the remaining patches just clean it up.

Signed-off-by: Hugh Dickins <hugh@veritas.com>
---

 mm/mmap.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

--- 2.6.12-rc2-mm1/mm/mmap.c	2005-04-05 15:23:00.000000000 +0100
+++ linux/mm/mmap.c	2005-04-05 18:59:01.000000000 +0100
@@ -1608,6 +1608,11 @@ static void unmap_vma_list(struct mm_str
 	validate_mm(mm);
 }
 
+#ifndef FIRST_USER_ADDRESS	/* temporary hack */
+#define THIS_IS_ARM		FIRST_USER_PGD_NR
+#define FIRST_USER_ADDRESS	(THIS_IS_ARM * PAGE_SIZE)
+#endif
+
 /*
  * Get rid of page table information in the indicated region.
  *
@@ -1626,7 +1631,7 @@ static void unmap_region(struct mm_struc
 	tlb = tlb_gather_mmu(mm, 0);
 	unmap_vmas(&tlb, mm, vma, start, end, &nr_accounted, NULL);
 	vm_unacct_memory(nr_accounted);
-	free_pgtables(&tlb, vma, prev? prev->vm_end: 0,
+	free_pgtables(&tlb, vma, prev? prev->vm_end: FIRST_USER_ADDRESS,
 				 next? next->vm_start: 0);
 	tlb_finish_mmu(tlb, start, end);
 	spin_unlock(&mm->page_table_lock);
@@ -1906,7 +1911,7 @@ void exit_mmap(struct mm_struct *mm)
 	/* Use -1 here to ensure all VMAs in the mm are unmapped */
 	end = unmap_vmas(&tlb, mm, vma, 0, -1, &nr_accounted, NULL);
 	vm_unacct_memory(nr_accounted);
-	free_pgtables(&tlb, vma, 0, 0);
+	free_pgtables(&tlb, vma, FIRST_USER_ADDRESS, 0);
 	tlb_finish_mmu(tlb, 0, end);
 
 	mm->mmap = mm->mmap_cache = NULL;
@@ -1927,7 +1932,7 @@ void exit_mmap(struct mm_struct *mm)
 		vma = next;
 	}
 
-	BUG_ON(mm->nr_ptes);	/* This is just debugging */
+	BUG_ON(mm->nr_ptes > (FIRST_USER_ADDRESS+PMD_SIZE-1)>>PMD_SHIFT);
 }
 
 /* Insert vm structure into process list sorted by address

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

end of thread, other threads:[~2005-04-08  3:40 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-04-07  1:10 [PATCH 1/6] freepgt2: free_pgtables from FIRST_USER_ADDRESS Hugh Dickins
2005-04-07  1:13 ` [PATCH 2/6] freepgt2: sys_mincore ignore FIRST_USER_PGD_NR Hugh Dickins
2005-04-07 10:14   ` David Howells
2005-04-07 14:31     ` Nick Piggin
2005-04-08  3:40       ` Hugh Dickins
2005-04-07  1:14 ` [PATCH 3/6] freepgt2: arm FIRST_USER_ADDRESS PAGE_SIZE Hugh Dickins
2005-04-07  1:16 ` [PATCH 4/6] freepgt2: arm26 " Hugh Dickins
2005-04-07  2:22   ` Ian Molton
2005-04-07  1:18 ` [PATCH 5/6] freepgt2: arch FIRST_USER_ADDRESS 0 Hugh Dickins
2005-04-07  1:19 ` [PATCH 6/6] freepgt2: remove FIRST_USER_ADDRESS hack Hugh Dickins

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.