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

sun3_pgalloc.h (1267B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* sun3_pgalloc.h --
      3 * reorganization around 2.3.39, routines moved from sun3_pgtable.h
      4 *
      5 *
      6 * 02/27/2002 -- Modified to support "highpte" implementation in 2.5.5 (Sam)
      7 *
      8 * moved 1/26/2000 Sam Creasey
      9 */
     10
     11#ifndef _SUN3_PGALLOC_H
     12#define _SUN3_PGALLOC_H
     13
     14#include <asm/tlb.h>
     15
     16#include <asm-generic/pgalloc.h>
     17
     18extern const char bad_pmd_string[];
     19
     20#define __pte_free_tlb(tlb,pte,addr)			\
     21do {							\
     22	pgtable_pte_page_dtor(pte);			\
     23	tlb_remove_page((tlb), pte);			\
     24} while (0)
     25
     26static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd, pte_t *pte)
     27{
     28	pmd_val(*pmd) = __pa((unsigned long)pte);
     29}
     30
     31static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, pgtable_t page)
     32{
     33	pmd_val(*pmd) = __pa((unsigned long)page_address(page));
     34}
     35
     36/*
     37 * allocating and freeing a pmd is trivial: the 1-entry pmd is
     38 * inside the pgd, so has no extra memory associated with it.
     39 */
     40#define pmd_free(mm, x)			do { } while (0)
     41
     42static inline pgd_t * pgd_alloc(struct mm_struct *mm)
     43{
     44     pgd_t *new_pgd;
     45
     46     new_pgd = (pgd_t *)get_zeroed_page(GFP_KERNEL);
     47     memcpy(new_pgd, swapper_pg_dir, PAGE_SIZE);
     48     memset(new_pgd, 0, (PAGE_OFFSET >> PGDIR_SHIFT));
     49     return new_pgd;
     50}
     51
     52#endif /* SUN3_PGALLOC_H */