public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/2] Use page present for pae pdpes
@ 2005-08-31 21:51 Zachary Amsden
  0 siblings, 0 replies; only message in thread
From: Zachary Amsden @ 2005-08-31 21:51 UTC (permalink / raw)
  To: Andrew Morton, Linux Kernel Mailing List,
	Virtualization Mailing List, H. Peter Anvin, Zwane Mwaikambo,
	Chris Wright, Martin Bligh, Pratap Subrahmanyam, Christopher Li,
	Zachary Amsden, Zachary Amsden

Ok, the use of "1 + " and subtraction of one for PAE PDPEs has confused
many people now.  Make it explicit what is going on and why anding with
PAGE_MASK is a better idea to strip these bits.

Signed-off-by: Zachary Amsden <zach@vmware.com>
Depends-on: add-pgtable-allocation-notifiers
Index: linux-2.6.13/arch/i386/mm/pgtable.c
===================================================================
--- linux-2.6.13.orig/arch/i386/mm/pgtable.c	2005-08-31 14:48:17.000000000 -0700
+++ linux-2.6.13/arch/i386/mm/pgtable.c	2005-08-31 14:48:53.000000000 -0700
@@ -247,14 +247,14 @@ pgd_t *pgd_alloc(struct mm_struct *mm)
 		if (!pmd)
 			goto out_oom;
 		SetPagePDE(virt_to_page(pmd));
-		set_pgd(&pgd[i], __pgd(1 + __pa(pmd)));
+		set_pgd(&pgd[i], __pgd(_PAGE_PRESENT | __pa(pmd)));
 	}
 	return pgd;
 
 out_oom:
 	for (i--; i >= 0; i--) {
 		ClearPagePDE(pfn_to_page(pgd_val(pgd[i]) >> PAGE_SHIFT));
-		kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
+		kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i]) & PAGE_MASK));
 	}
 	kmem_cache_free(pgd_cache, pgd);
 	return NULL;
@@ -268,7 +268,7 @@ void pgd_free(pgd_t *pgd)
 	if (PTRS_PER_PMD > 1)
 		for (i = 0; i < USER_PTRS_PER_PGD; ++i) {
 			ClearPagePDE(pfn_to_page(pgd_val(pgd[i]) >> PAGE_SHIFT));
-			kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i])-1));
+			kmem_cache_free(pmd_cache, (void *)__va(pgd_val(pgd[i]) & PAGE_MASK));
 		}
 	/* in the non-PAE case, free_pgtables() clears user pgd entries */
 	kmem_cache_free(pgd_cache, pgd);
Index: linux-2.6.13/arch/i386/mm/init.c
===================================================================
--- linux-2.6.13.orig/arch/i386/mm/init.c	2005-08-31 14:48:17.000000000 -0700
+++ linux-2.6.13/arch/i386/mm/init.c	2005-08-31 14:48:53.000000000 -0700
@@ -387,7 +387,7 @@ void zap_low_mappings (void)
 	 */
 	for (i = 0; i < USER_PTRS_PER_PGD; i++)
 #ifdef CONFIG_X86_PAE
-		set_pgd(swapper_pg_dir+i, __pgd(1 + __pa(empty_zero_page)));
+		set_pgd(swapper_pg_dir+i, __pgd(_PAGE_PRESENT | __pa(empty_zero_page)));
 #else
 		set_pgd(swapper_pg_dir+i, __pgd(0));
 #endif

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-08-31 21:51 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-31 21:51 [PATCH 2/2] Use page present for pae pdpes Zachary Amsden

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