mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	If an architecture uses 4level-fixup.h we don't need to do anything as it includes 5level-fixup.h. If an architecture uses pgtable-nop*d.h, define __ARCH_USE_5LEVEL_HACK before inclusion of the header. It makes asm-generic code to use 5level-fixup.h. If an architecture has 4-level paging or folds levels on its own, include 5level-fixup.h directly. Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> Acked-by: Michal Hocko <mhocko@suse.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*
 | 
						|
 * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
 | 
						|
 * Copyright 2003 PathScale, Inc.
 | 
						|
 * Derived from include/asm-i386/pgtable.h
 | 
						|
 * Licensed under the GPL
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef __UM_PGTABLE_2LEVEL_H
 | 
						|
#define __UM_PGTABLE_2LEVEL_H
 | 
						|
 | 
						|
#define __ARCH_USE_5LEVEL_HACK
 | 
						|
#include <asm-generic/pgtable-nopmd.h>
 | 
						|
 | 
						|
/* PGDIR_SHIFT determines what a third-level page table entry can map */
 | 
						|
 | 
						|
#define PGDIR_SHIFT	22
 | 
						|
#define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
 | 
						|
#define PGDIR_MASK	(~(PGDIR_SIZE-1))
 | 
						|
 | 
						|
/*
 | 
						|
 * entries per page directory level: the i386 is two-level, so
 | 
						|
 * we don't really have any PMD directory physically.
 | 
						|
 */
 | 
						|
#define PTRS_PER_PTE	1024
 | 
						|
#define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
 | 
						|
#define PTRS_PER_PGD	1024
 | 
						|
#define FIRST_USER_ADDRESS	0UL
 | 
						|
 | 
						|
#define pte_ERROR(e) \
 | 
						|
        printk("%s:%d: bad pte %p(%08lx).\n", __FILE__, __LINE__, &(e), \
 | 
						|
	       pte_val(e))
 | 
						|
#define pgd_ERROR(e) \
 | 
						|
        printk("%s:%d: bad pgd %p(%08lx).\n", __FILE__, __LINE__, &(e), \
 | 
						|
	       pgd_val(e))
 | 
						|
 | 
						|
static inline int pgd_newpage(pgd_t pgd)	{ return 0; }
 | 
						|
static inline void pgd_mkuptodate(pgd_t pgd)	{ }
 | 
						|
 | 
						|
#define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
 | 
						|
 | 
						|
#define pte_pfn(x) phys_to_pfn(pte_val(x))
 | 
						|
#define pfn_pte(pfn, prot) __pte(pfn_to_phys(pfn) | pgprot_val(prot))
 | 
						|
#define pfn_pmd(pfn, prot) __pmd(pfn_to_phys(pfn) | pgprot_val(prot))
 | 
						|
 | 
						|
#endif
 |