~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/include/asm/pgalloc.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/arm/include/asm/pgalloc.h (Architecture ppc) and /arch/i386/include/asm-i386/pgalloc.h (Architecture i386)


  1 /* SPDX-License-Identifier: GPL-2.0-only */         1 
  2 /*                                                
  3  *  arch/arm/include/asm/pgalloc.h                
  4  *                                                
  5  *  Copyright (C) 2000-2001 Russell King          
  6  */                                               
  7 #ifndef _ASMARM_PGALLOC_H                         
  8 #define _ASMARM_PGALLOC_H                         
  9                                                   
 10 #include <linux/pagemap.h>                        
 11                                                   
 12 #include <asm/domain.h>                           
 13 #include <asm/pgtable-hwdef.h>                    
 14 #include <asm/processor.h>                        
 15 #include <asm/cacheflush.h>                       
 16 #include <asm/tlbflush.h>                         
 17                                                   
 18 #ifdef CONFIG_MMU                                 
 19                                                   
 20 #define _PAGE_USER_TABLE        (PMD_TYPE_TABL    
 21 #define _PAGE_KERNEL_TABLE      (PMD_TYPE_TABL    
 22                                                   
 23 #ifdef CONFIG_ARM_LPAE                            
 24 #define PGD_SIZE                (PTRS_PER_PGD     
 25                                                   
 26 static inline void pud_populate(struct mm_stru    
 27 {                                                 
 28         set_pud(pud, __pud(__pa(pmd) | PMD_TYP    
 29 }                                                 
 30                                                   
 31 #else   /* !CONFIG_ARM_LPAE */                    
 32 #define PGD_SIZE                (PAGE_SIZE <<     
 33                                                   
 34 /*                                                
 35  * Since we have only two-level page tables, t    
 36  */                                               
 37 #define pmd_alloc_one(mm,addr)          ({ BUG    
 38 #define pmd_free(mm, pmd)               do { }    
 39 #ifdef CONFIG_KASAN                               
 40 /* The KASan core unconditionally calls pud_po    
 41 #define pud_populate(mm,pmd,pte)        do { }    
 42 #else                                             
 43 #define pud_populate(mm,pmd,pte)        BUG()     
 44 #endif                                            
 45 #endif  /* CONFIG_ARM_LPAE */                     
 46                                                   
 47 extern pgd_t *pgd_alloc(struct mm_struct *mm);    
 48 extern void pgd_free(struct mm_struct *mm, pgd    
 49                                                   
 50 static inline void clean_pte_table(pte_t *pte)    
 51 {                                                 
 52         clean_dcache_area(pte + PTE_HWTABLE_PT    
 53 }                                                 
 54                                                   
 55 /*                                                
 56  * Allocate one PTE table.                        
 57  *                                                
 58  * This actually allocates two hardware PTE ta    
 59  * into one table thus:                           
 60  *                                                
 61  *  +------------+                                
 62  *  | Linux pt 0 |                                
 63  *  +------------+                                
 64  *  | Linux pt 1 |                                
 65  *  +------------+                                
 66  *  |  h/w pt 0  |                                
 67  *  +------------+                                
 68  *  |  h/w pt 1  |                                
 69  *  +------------+                                
 70  */                                               
 71                                                   
 72 #define __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL          
 73 #define __HAVE_ARCH_PTE_ALLOC_ONE                 
 74 #define __HAVE_ARCH_PGD_FREE                      
 75 #include <asm-generic/pgalloc.h>                  
 76                                                   
 77 static inline pte_t *                             
 78 pte_alloc_one_kernel(struct mm_struct *mm)        
 79 {                                                 
 80         pte_t *pte = __pte_alloc_one_kernel(mm    
 81                                                   
 82         if (pte)                                  
 83                 clean_pte_table(pte);             
 84                                                   
 85         return pte;                               
 86 }                                                 
 87                                                   
 88 #ifdef CONFIG_HIGHPTE                             
 89 #define PGTABLE_HIGHMEM __GFP_HIGHMEM             
 90 #else                                             
 91 #define PGTABLE_HIGHMEM 0                         
 92 #endif                                            
 93                                                   
 94 static inline pgtable_t                           
 95 pte_alloc_one(struct mm_struct *mm)               
 96 {                                                 
 97         struct page *pte;                         
 98                                                   
 99         pte = __pte_alloc_one(mm, GFP_PGTABLE_    
100         if (!pte)                                 
101                 return NULL;                      
102         if (!PageHighMem(pte))                    
103                 clean_pte_table(page_address(p    
104         return pte;                               
105 }                                                 
106                                                   
107 static inline void __pmd_populate(pmd_t *pmdp,    
108                                   pmdval_t pro    
109 {                                                 
110         pmdval_t pmdval = (pte + PTE_HWTABLE_O    
111         pmdp[0] = __pmd(pmdval);                  
112 #ifndef CONFIG_ARM_LPAE                           
113         pmdp[1] = __pmd(pmdval + 256 * sizeof(    
114 #endif                                            
115         flush_pmd_entry(pmdp);                    
116 }                                                 
117                                                   
118 /*                                                
119  * Populate the pmdp entry with a pointer to t    
120  * of the mm address space.                       
121  *                                                
122  * Ensure that we always set both PMD entries.    
123  */                                               
124 static inline void                                
125 pmd_populate_kernel(struct mm_struct *mm, pmd_    
126 {                                                 
127         /*                                        
128          * The pmd must be loaded with the phy    
129          */                                       
130         __pmd_populate(pmdp, __pa(ptep), _PAGE    
131 }                                                 
132                                                   
133 static inline void                                
134 pmd_populate(struct mm_struct *mm, pmd_t *pmdp    
135 {                                                 
136         extern pmdval_t user_pmd_table;           
137         pmdval_t prot;                            
138                                                   
139         if (__LINUX_ARM_ARCH__ >= 6 && !IS_ENA    
140                 prot = user_pmd_table;            
141         else                                      
142                 prot = _PAGE_USER_TABLE;          
143                                                   
144         __pmd_populate(pmdp, page_to_phys(ptep    
145 }                                                 
146                                                   
147 #endif /* CONFIG_MMU */                           
148                                                   
149 #endif                                            
150                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php