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#include <linux/highmem.h>
   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                return NULL;
  59        clear_highpage(pte);
  60        if (!pgtable_page_ctor(pte)) {
  61                __free_page(pte);
  62                return NULL;
  63        }
  64        return pte;
  65}
  66
  67static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
  68{
  69        free_pages((unsigned long)pte, PTE_ORDER);
  70}
  71
  72static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
  73{
  74        pgtable_page_dtor(pte);
  75        __free_pages(pte, PTE_ORDER);
  76}
  77
  78#define __pte_free_tlb(tlb, pte, buf)                   \
  79do {                                                    \
  80        pgtable_page_dtor(pte);                         \
  81        tlb_remove_page((tlb), pte);                    \
  82} while (0)
  83
  84#define check_pgt_cache()               do {} while (0)
  85
  86#endif /* _ASM_SCORE_PGALLOC_H */
  87