]> git.hungrycats.org Git - linux/commitdiff
Sparc64: Fix pfn_foo macros and add descriptive commentary
authorDavid S. Miller <davem@nuts.ninka.net>
Tue, 7 May 2002 08:37:57 +0000 (01:37 -0700)
committerDavid S. Miller <davem@nuts.ninka.net>
Tue, 7 May 2002 08:37:57 +0000 (01:37 -0700)
above explaining the {phys,pfn}_base stuff.

include/asm-sparc64/page.h
include/asm-sparc64/pgtable.h

index b577b76cf07418f3d6f7a4feee3badcbf5a57b4c..a0ffd1ac93ea29d88c8d0ec3e7fbcda8497557f2 100644 (file)
@@ -114,11 +114,17 @@ typedef unsigned long iopgprot_t;
 #define __pa(x)                        ((unsigned long)(x) - PAGE_OFFSET)
 #define __va(x)                        ((void *)((unsigned long) (x) + PAGE_OFFSET))
 
+/* PFNs are real physical page numbers.  However, mem_map only begins to record
+ * per-page information starting at pfn_base.  This is to handle systems where
+ * the first physical page in the machine is at some huge physical address, such
+ * as 4GB.   This is common on a partitioned E10000, for example.
+ */
+
 #define pfn_to_page(pfn)       (mem_map + ((pfn)-(pfn_base)))
 #define page_to_pfn(page)      ((unsigned long)(((page) - mem_map) + pfn_base))
 #define virt_to_page(kaddr)    pfn_to_page(__pa(kaddr)>>PAGE_SHIFT)
 
-#define pfn_valid(pfn)         ((pfn) < max_mapnr)
+#define pfn_valid(pfn)         (((pfn)-(pfn_base)) < max_mapnr)
 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
 
 #define virt_to_phys __pa
index 547e6358f2aba0d392672c3dd9a7ca1071b7e0d7..73d5951edfb908bd28fd6d459e4c7929dd5582dc 100644 (file)
@@ -195,10 +195,19 @@ extern unsigned long pfn_base;
 extern struct page *mem_map_zero;
 #define ZERO_PAGE(vaddr)       (mem_map_zero)
 
+/* PFNs are real physical page numbers.  However, mem_map only begins to record
+ * per-page information starting at pfn_base.  This is to handle systems where
+ * the first physical page in the machine is at some huge physical address, such
+ * as 4GB.   This is common on a partitioned E10000, for example.
+ */
+
 #define pfn_pte(pfn, prot)     \
-       __pte((((pfn)+(pfn_base)) << PAGE_SHIFT) | pgprot_val(prot) | _PAGE_SZBITS)
+       __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot) | _PAGE_SZBITS)
 #define mk_pte(page, pgprot)   pfn_pte(page_to_pfn(page), (pgprot))
 
+#define pte_pfn(x)             ((pte_val(x) & _PAGE_PADDR)>>PAGE_SHIFT)
+#define pte_page(x)            pfn_to_page(pte_pfn(x))
+
 #define page_pte_prot(page, prot)      mk_pte(page, prot)
 #define page_pte(page)                 page_pte_prot(page, __pgprot(0))
 
@@ -246,9 +255,6 @@ extern inline pte_t pte_modify(pte_t orig_pte, pgprot_t new_prot)
 /* Permanent address of a page. */
 #define __page_address(page)   page_address(page)
 
-#define pte_pfn(x)             (pte_val(x) & _PAGE_PADDR)
-#define pte_page(x)            pfn_to_page(pte_pfn(x))
-
 /* Be very careful when you change these three, they are delicate. */
 #define pte_mkyoung(pte)       (__pte(pte_val(pte) | _PAGE_ACCESSED | _PAGE_R))
 #define pte_mkwrite(pte)       (__pte(pte_val(pte) | _PAGE_WRITE))