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

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

Version: ~ [ linux-5.18 ] ~ [ linux-5.17.9 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.41 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.117 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.195 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.244 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.280 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.315 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ 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 ] ~

  1 /*
  2  * include/asm-xtensa/pgalloc.h
  3  *
  4  * This program is free software; you can redistribute it and/or modify
  5  * it under the terms of the GNU General Public License version 2 as
  6  * published by the Free Software Foundation.
  7  *
  8  * Copyright (C) 2001-2007 Tensilica Inc.
  9  */
 10 
 11 #ifndef _XTENSA_PGALLOC_H
 12 #define _XTENSA_PGALLOC_H
 13 
 14 #ifdef __KERNEL__
 15 
 16 #include <linux/highmem.h>
 17 #include <linux/slab.h>
 18 
 19 /*
 20  * Allocating and freeing a pmd is trivial: the 1-entry pmd is
 21  * inside the pgd, so has no extra memory associated with it.
 22  */
 23 
 24 #define pmd_populate_kernel(mm, pmdp, ptep)                                  \
 25         (pmd_val(*(pmdp)) = ((unsigned long)ptep))
 26 #define pmd_populate(mm, pmdp, page)                                         \
 27         (pmd_val(*(pmdp)) = ((unsigned long)page_to_virt(page)))
 28 #define pmd_pgtable(pmd) pmd_page(pmd)
 29 
 30 static inline pgd_t*
 31 pgd_alloc(struct mm_struct *mm)
 32 {
 33         return (pgd_t*) __get_free_pages(GFP_KERNEL | __GFP_ZERO, PGD_ORDER);
 34 }
 35 
 36 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
 37 {
 38         free_page((unsigned long)pgd);
 39 }
 40 
 41 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 42                                          unsigned long address)
 43 {
 44         pte_t *ptep;
 45         int i;
 46 
 47         ptep = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT);
 48         if (!ptep)
 49                 return NULL;
 50         for (i = 0; i < 1024; i++)
 51                 pte_clear(NULL, 0, ptep + i);
 52         return ptep;
 53 }
 54 
 55 static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
 56                                         unsigned long addr)
 57 {
 58         pte_t *pte;
 59         struct page *page;
 60 
 61         pte = pte_alloc_one_kernel(mm, addr);
 62         if (!pte)
 63                 return NULL;
 64         page = virt_to_page(pte);
 65         if (!pgtable_page_ctor(page)) {
 66                 __free_page(page);
 67                 return NULL;
 68         }
 69         return page;
 70 }
 71 
 72 static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
 73 {
 74         free_page((unsigned long)pte);
 75 }
 76 
 77 static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
 78 {
 79         pgtable_page_dtor(pte);
 80         __free_page(pte);
 81 }
 82 #define pmd_pgtable(pmd) pmd_page(pmd)
 83 
 84 #endif /* __KERNEL__ */
 85 #endif /* _XTENSA_PGALLOC_H */
 86 

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

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | 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.

osdn.jp