linux/arch/sparc/include/asm/pgalloc_32.h
<<
>>
Prefs
   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#include <linux/pgtable.h>
   8
   9#include <asm/pgtsrmmu.h>
  10#include <asm/vaddrs.h>
  11#include <asm/page.h>
  12
  13struct page;
  14
  15void *srmmu_get_nocache(int size, int align);
  16void srmmu_free_nocache(void *addr, int size);
  17
  18extern struct resource sparc_iomap;
  19
  20pgd_t *get_pgd_fast(void);
  21static 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
  29static inline void pud_set(pud_t * pudp, pmd_t * pmdp)
  30{
  31        unsigned long pa = __nocache_pa(pmdp);
  32
  33        set_pte((pte_t *)pudp, __pte((SRMMU_ET_PTD | (pa >> 4))));
  34}
  35
  36#define pud_populate(MM, PGD, PMD)      pud_set(PGD, PMD)
  37
  38static 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
  45static 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#define pmd_populate(mm, pmd, pte)      pmd_set(pmd, pte)
  54
  55void pmd_set(pmd_t *pmdp, pte_t *ptep);
  56#define pmd_populate_kernel             pmd_populate
  57
  58pgtable_t pte_alloc_one(struct mm_struct *mm);
  59
  60static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm)
  61{
  62        return srmmu_get_nocache(SRMMU_PTE_TABLE_SIZE,
  63                                 SRMMU_PTE_TABLE_SIZE);
  64}
  65
  66
  67static inline void free_pte_fast(pte_t *pte)
  68{
  69        srmmu_free_nocache(pte, SRMMU_PTE_TABLE_SIZE);
  70}
  71
  72#define pte_free_kernel(mm, pte)        free_pte_fast(pte)
  73
  74void 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 */
  78