linux/arch/score/include/asm/pgalloc.h
<<
>>
Prefs
   1#ifndef _ASM_SCORE_PGALLOC_H
   2#define _ASM_SCORE_PGALLOC_H
   3
   4#include <linux/mm.h>
   5
   6static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
   7        pte_t *pte)
   8{
   9        set_pmd(pmd, __pmd((unsigned long)pte));
  10}
  11
  12static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
  13        pgtable_t pte)
  14{
  15        set_pmd(pmd, __pmd((unsigned long)page_address(pte)));
  16}
  17
  18#define pmd_pgtable(pmd)        pmd_page(pmd)
  19
  20static inline pgd_t *pgd_alloc(struct mm_struct *mm)
  21{
  22        pgd_t *ret, *init;
  23
  24        ret = (pgd_t *) __get_free_pages(GFP_KERNEL, PGD_ORDER);
  25        if (ret) {
  26                init = pgd_offset(&init_mm, 0UL);
  27                pgd_init((unsigned long)ret);
  28                memcpy(ret + USER_PTRS_PER_PGD, init + USER_PTRS_PER_PGD,
  29                (PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
  30        }
  31
  32        return ret;
  33}
  34
  35static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
  36{
  37        free_pages((unsigned long)pgd, PGD_ORDER);
  38}
  39
  40static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
  41        unsigned long address)
  42{
  43        pte_t *pte;
  44
  45        pte = (pte_t *) __get_free_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO,
  46                                        PTE_ORDER);
  47
  48        return pte;
  49}
  50
  51static inline struct page *pte_alloc_one(struct mm_struct *mm,
  52        unsigned long address)
  53{
  54        struct page *pte;
  55
  56        pte = alloc_pages(GFP_KERNEL | __GFP_REPEAT, PTE_ORDER);
  57        if (pte) {
  58                clear_highpage(pte);
  59                pgtable_page_ctor(pte);
  60        }
  61        return pte;
  62}
  63
  64static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  65{
  66        free_pages((unsigned long)pte, PTE_ORDER);
  67}
  68
  69static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
  70{
  71        pgtable_page_dtor(pte);
  72        __free_pages(pte, PTE_ORDER);
  73}
  74
  75#define __pte_free_tlb(tlb, pte, buf)                   \
  76do {                                                    \
  77        pgtable_page_dtor(pte);                         \
  78        tlb_remove_page((tlb), pte);                    \
  79} while (0)
  80
  81#define check_pgt_cache()               do {} while (0)
  82
  83#endif /* _ASM_SCORE_PGALLOC_H */
  84