root/arch/mips/include/asm/pgalloc.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. pmd_populate_kernel
  2. pmd_populate
  3. pud_populate
  4. pgd_free
  5. pmd_alloc_one
  6. pmd_free
  7. pud_alloc_one
  8. pud_free
  9. pgd_populate

   1 /*
   2  * This file is subject to the terms and conditions of the GNU General Public
   3  * License.  See the file "COPYING" in the main directory of this archive
   4  * for more details.
   5  *
   6  * Copyright (C) 1994 - 2001, 2003 by Ralf Baechle
   7  * Copyright (C) 1999, 2000, 2001 Silicon Graphics, Inc.
   8  */
   9 #ifndef _ASM_PGALLOC_H
  10 #define _ASM_PGALLOC_H
  11 
  12 #include <linux/highmem.h>
  13 #include <linux/mm.h>
  14 #include <linux/sched.h>
  15 
  16 #include <asm-generic/pgalloc.h>        /* for pte_{alloc,free}_one */
  17 
  18 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
  19         pte_t *pte)
  20 {
  21         set_pmd(pmd, __pmd((unsigned long)pte));
  22 }
  23 
  24 static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
  25         pgtable_t pte)
  26 {
  27         set_pmd(pmd, __pmd((unsigned long)page_address(pte)));
  28 }
  29 #define pmd_pgtable(pmd) pmd_page(pmd)
  30 
  31 /*
  32  * Initialize a new pmd table with invalid pointers.
  33  */
  34 extern void pmd_init(unsigned long page, unsigned long pagetable);
  35 
  36 #ifndef __PAGETABLE_PMD_FOLDED
  37 
  38 static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
  39 {
  40         set_pud(pud, __pud((unsigned long)pmd));
  41 }
  42 #endif
  43 
  44 /*
  45  * Initialize a new pgd / pmd table with invalid pointers.
  46  */
  47 extern void pgd_init(unsigned long page);
  48 extern pgd_t *pgd_alloc(struct mm_struct *mm);
  49 
  50 static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
  51 {
  52         free_pages((unsigned long)pgd, PGD_ORDER);
  53 }
  54 
  55 #define __pte_free_tlb(tlb,pte,address)                 \
  56 do {                                                    \
  57         pgtable_pte_page_dtor(pte);                     \
  58         tlb_remove_page((tlb), pte);                    \
  59 } while (0)
  60 
  61 #ifndef __PAGETABLE_PMD_FOLDED
  62 
  63 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address)
  64 {
  65         pmd_t *pmd;
  66 
  67         pmd = (pmd_t *) __get_free_pages(GFP_KERNEL, PMD_ORDER);
  68         if (pmd)
  69                 pmd_init((unsigned long)pmd, (unsigned long)invalid_pte_table);
  70         return pmd;
  71 }
  72 
  73 static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
  74 {
  75         free_pages((unsigned long)pmd, PMD_ORDER);
  76 }
  77 
  78 #define __pmd_free_tlb(tlb, x, addr)    pmd_free((tlb)->mm, x)
  79 
  80 #endif
  81 
  82 #ifndef __PAGETABLE_PUD_FOLDED
  83 
  84 static inline pud_t *pud_alloc_one(struct mm_struct *mm, unsigned long address)
  85 {
  86         pud_t *pud;
  87 
  88         pud = (pud_t *) __get_free_pages(GFP_KERNEL, PUD_ORDER);
  89         if (pud)
  90                 pud_init((unsigned long)pud, (unsigned long)invalid_pmd_table);
  91         return pud;
  92 }
  93 
  94 static inline void pud_free(struct mm_struct *mm, pud_t *pud)
  95 {
  96         free_pages((unsigned long)pud, PUD_ORDER);
  97 }
  98 
  99 static inline void pgd_populate(struct mm_struct *mm, pgd_t *pgd, pud_t *pud)
 100 {
 101         set_pgd(pgd, __pgd((unsigned long)pud));
 102 }
 103 
 104 #define __pud_free_tlb(tlb, x, addr)    pud_free((tlb)->mm, x)
 105 
 106 #endif /* __PAGETABLE_PUD_FOLDED */
 107 
 108 extern void pagetable_init(void);
 109 
 110 #endif /* _ASM_PGALLOC_H */

/* [<][>][^][v][top][bottom][index][help] */