root/arch/sparc/include/asm/pgalloc_32.h

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

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. free_pgd_fast
  2. pgd_set
  3. pmd_alloc_one
  4. free_pmd_fast
  5. pte_alloc_one_kernel
  6. free_pte_fast

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _SPARC_PGALLOC_H
   3 #define _SPARC_PGALLOC_H
   4 
   5 #include <linux/kernel.h>
   6 #include <linux/sched.h>
   7 
   8 #include <asm/pgtsrmmu.h>
   9 #include <asm/pgtable.h>
  10 #include <asm/vaddrs.h>
  11 #include <asm/page.h>
  12 
  13 struct page;
  14 
  15 void *srmmu_get_nocache(int size, int align);
  16 void srmmu_free_nocache(void *addr, int size);
  17 
  18 extern struct resource sparc_iomap;
  19 
  20 pgd_t *get_pgd_fast(void);
  21 static inline void free_pgd_fast(pgd_t *pgd)
  22 {
  23         srmmu_free_nocache(pgd, SRMMU_PGD_TABLE_SIZE);
  24 }
  25 
  26 #define pgd_free(mm, pgd)       free_pgd_fast(pgd)
  27 #define pgd_alloc(mm)   get_pgd_fast()
  28 
  29 static inline void pgd_set(pgd_t * pgdp, pmd_t * pmdp)
  30 {
  31         unsigned long pa = __nocache_pa(pmdp);
  32 
  33         set_pte((pte_t *)pgdp, __pte((SRMMU_ET_PTD | (pa >> 4))));
  34 }
  35 
  36 #define pgd_populate(MM, PGD, PMD)      pgd_set(PGD, PMD)
  37 
  38 static inline pmd_t *pmd_alloc_one(struct mm_struct *mm,
  39                                    unsigned long address)
  40 {
  41         return srmmu_get_nocache(SRMMU_PMD_TABLE_SIZE,
  42                                  SRMMU_PMD_TABLE_SIZE);
  43 }
  44 
  45 static inline void free_pmd_fast(pmd_t * pmd)
  46 {
  47         srmmu_free_nocache(pmd, SRMMU_PMD_TABLE_SIZE);
  48 }
  49 
  50 #define pmd_free(mm, pmd)               free_pmd_fast(pmd)
  51 #define __pmd_free_tlb(tlb, pmd, addr)  pmd_free((tlb)->mm, pmd)
  52 
  53 void pmd_populate(struct mm_struct *mm, pmd_t *pmdp, struct page *ptep);
  54 #define pmd_pgtable(pmd) pmd_page(pmd)
  55 
  56 void pmd_set(pmd_t *pmdp, pte_t *ptep);
  57 #define pmd_populate_kernel(MM, PMD, PTE) pmd_set(PMD, PTE)
  58 
  59 pgtable_t pte_alloc_one(struct mm_struct *mm);
  60 
  61 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
  62 {
  63         return srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
  64 }
  65 
  66 
  67 static inline void free_pte_fast(pte_t *pte)
  68 {
  69         srmmu_free_nocache(pte, PTE_SIZE);
  70 }
  71 
  72 #define pte_free_kernel(mm, pte)        free_pte_fast(pte)
  73 
  74 void pte_free(struct mm_struct * mm, pgtable_t pte);
  75 #define __pte_free_tlb(tlb, pte, addr)  pte_free((tlb)->mm, pte)
  76 
  77 #endif /* _SPARC_PGALLOC_H */

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