cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

pgalloc_32.h (1823B)


      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 */