From: Kenn H. <ke...@us...> - 2002-12-28 02:12:04
|
Update of /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm In directory sc8-pr-cvs1:/tmp/cvs-serv18412 Modified Files: page.h pagelet_pte.h Log Message: pte_pfn() and pfn_pte() APIs added to convert PTEs to PFNs and back. pfn_to_page() and page_to_pfn() added to convert PFNs to struct page * and back. __mk_pte() and mk_pte_phys() no longer needed. Index: page.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/page.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- page.h 2 Dec 2002 00:10:23 -0000 1.4 +++ page.h 28 Dec 2002 02:12:01 -0000 1.5 @@ -85,7 +85,12 @@ #define MAP_NR(addr) (((GET_HWSPTE_VIRT(addr))->hwpte & PAGELET_PFN_MASK) >> 3) #define virt_to_page(kaddr) (mem_map + MAP_NR(kaddr)) -#define VALID_PAGE(page) ((page - mem_map) < max_mapnr) +#define pfn_valid(pfn) ((pfn) < max_mapnr) + +#define pfn_to_page(pfn) (mem_map + (pfn)) +#define page_to_pfn(page) ((unsigned long)((page) - mem_map)) + +#define virt_addr_valid(kaddr) pfn_valid(MAP_NR(kaddr)) #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) Index: pagelet_pte.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.5/include/asm-vax/mm/pagelet_pte.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- pagelet_pte.h 2 Dec 2002 00:12:30 -0000 1.4 +++ pagelet_pte.h 28 Dec 2002 02:12:01 -0000 1.5 @@ -117,29 +117,23 @@ * * See asm-i386/pgtable-3level.h for background. */ -/* D.A. May 2001 - FIXME: this needs cleaning up, hacked in a mk_pte and - __mk_pte... will clean up later.. our mk_pte is being use incorrectly - in some VAX code so I needed __mk_pte. - */ -static inline pte_t __mk_pte(unsigned long int page, pgprot_t pgprot) -{ - pte_t pte; - pte_val(pte) = (__pa(page) >> PAGELET_SHIFT) | pgprot_val(pgprot); - return pte; -} +#define pte_page(x) pfn_to_page(pte_pfn(x)) -#define mk_pte(page, pgprot) __mk_pte(((page)-mem_map)<<PAGE_SHIFT,(pgprot)) -/* This takes a physical page address that is used by the remapping functions */ -static inline pte_t mk_pte_phys(unsigned long int physpage, pgprot_t pgprot) +#define pte_pfn(x) ((unsigned long)(((pte_val(x) & PAGE_PFN_MASK) \ + >> (PAGE_SHIFT - PAGELET_SHIFT)))) + +/* Create a PTE from a PFN and a page protection. Note that the PFN + passed in is a PAGE-sized PFN, not a PAGELET-sized PFN */ +static inline pte_t pfn_pte(unsigned long pfn, pgprot_t pgprot) { pte_t pte; - pte_val(pte) = ((unsigned long)(physpage) >> PAGELET_SHIFT) | pgprot_val(pgprot); + pte_val(pte) = (pfn << (PAGE_SHIFT - PAGELET_SHIFT)) | pgprot_val(pgprot); return pte; } -#define pte_page(x) (mem_map+(unsigned long)(((pte_val(x) & PAGE_PFN_MASK) \ - >> (PAGE_SHIFT - PAGELET_SHIFT)))) +#define mk_pte(page, pgprot) pfn_pte(page_to_pfn(page), pgprot) + /* * This requires that pte_set is called after pte_modify |