1f2f4bf5aSAlex Dewar /* SPDX-License-Identifier: GPL-2.0 */ 28ede0bdbSAl Viro /* 38ede0bdbSAl Viro * Copyright (C) 2000, 2001, 2002 Jeff Dike ([email protected]) 48ede0bdbSAl Viro * Copyright 2003 PathScale, Inc. 58ede0bdbSAl Viro * Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h 68ede0bdbSAl Viro */ 78ede0bdbSAl Viro 88ede0bdbSAl Viro #ifndef __UM_PGALLOC_H 98ede0bdbSAl Viro #define __UM_PGALLOC_H 108ede0bdbSAl Viro 1128a12cb5SAl Viro #include <linux/mm.h> 128ede0bdbSAl Viro 131355c31eSMike Rapoport #include <asm-generic/pgalloc.h> 14f32848e1SMike Rapoport 158ede0bdbSAl Viro #define pmd_populate_kernel(mm, pmd, pte) \ 168ede0bdbSAl Viro set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte))) 178ede0bdbSAl Viro 188ede0bdbSAl Viro #define pmd_populate(mm, pmd, pte) \ 198ede0bdbSAl Viro set_pmd(pmd, __pmd(_PAGE_TABLE + \ 208ede0bdbSAl Viro ((unsigned long long)page_to_pfn(pte) << \ 218ede0bdbSAl Viro (unsigned long long) PAGE_SHIFT))) 228ede0bdbSAl Viro 238ede0bdbSAl Viro /* 248ede0bdbSAl Viro * Allocate and free page tables. 258ede0bdbSAl Viro */ 268ede0bdbSAl Viro extern pgd_t *pgd_alloc(struct mm_struct *); 278ede0bdbSAl Viro 289e1b32caSBenjamin Herrenschmidt #define __pte_free_tlb(tlb, pte, address) \ 29*e3ecf7c7SQi Zheng tlb_remove_ptdesc((tlb), page_ptdesc(pte)) 308ede0bdbSAl Viro 3141ab5fe7SBenjamin Berg #if CONFIG_PGTABLE_LEVELS > 2 329a5085b3SRichard Weinberger 339a5085b3SRichard Weinberger #define __pmd_free_tlb(tlb, pmd, address) \ 34*e3ecf7c7SQi Zheng tlb_remove_ptdesc((tlb), virt_to_ptdesc(pmd)) 359a5085b3SRichard Weinberger 3641ab5fe7SBenjamin Berg #if CONFIG_PGTABLE_LEVELS > 3 3741ab5fe7SBenjamin Berg 3841ab5fe7SBenjamin Berg #define __pud_free_tlb(tlb, pud, address) \ 39*e3ecf7c7SQi Zheng tlb_remove_ptdesc((tlb), virt_to_ptdesc(pud)) 4041ab5fe7SBenjamin Berg 4141ab5fe7SBenjamin Berg #endif 428ede0bdbSAl Viro #endif 438ede0bdbSAl Viro 448ede0bdbSAl Viro #endif 458ede0bdbSAl Viro 46