pgalloc.h (13224794cb0832caa403ad583d8605202cabc6bc) | pgalloc.h (6fb12766f7fcd7934b09fbfbd32a725cc2febf96) |
---|---|
1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __ASM_SH_PGALLOC_H 3#define __ASM_SH_PGALLOC_H 4 5#include <asm/page.h> | 1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef __ASM_SH_PGALLOC_H 3#define __ASM_SH_PGALLOC_H 4 5#include <asm/page.h> |
6#include <asm-generic/pgalloc.h> |
|
6 7extern pgd_t *pgd_alloc(struct mm_struct *); 8extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); 9 10#if PAGETABLE_LEVELS > 2 11extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd); 12extern pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address); 13extern void pmd_free(struct mm_struct *mm, pmd_t *pmd); --- 7 unchanged lines hidden (view full) --- 21 22static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, 23 pgtable_t pte) 24{ 25 set_pmd(pmd, __pmd((unsigned long)page_address(pte))); 26} 27#define pmd_pgtable(pmd) pmd_page(pmd) 28 | 7 8extern pgd_t *pgd_alloc(struct mm_struct *); 9extern void pgd_free(struct mm_struct *mm, pgd_t *pgd); 10 11#if PAGETABLE_LEVELS > 2 12extern void pud_populate(struct mm_struct *mm, pud_t *pudp, pmd_t *pmd); 13extern pmd_t *pmd_alloc_one(struct mm_struct *mm, unsigned long address); 14extern void pmd_free(struct mm_struct *mm, pmd_t *pmd); --- 7 unchanged lines hidden (view full) --- 22 23static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd, 24 pgtable_t pte) 25{ 26 set_pmd(pmd, __pmd((unsigned long)page_address(pte))); 27} 28#define pmd_pgtable(pmd) pmd_page(pmd) 29 |
29/* 30 * Allocate and free page tables. 31 */ 32static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm) 33{ 34 return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_ZERO); 35} 36 37static inline pgtable_t pte_alloc_one(struct mm_struct *mm) 38{ 39 struct page *page; 40 41 page = alloc_page(GFP_KERNEL | __GFP_ZERO); 42 if (!page) 43 return NULL; 44 if (!pgtable_page_ctor(page)) { 45 __free_page(page); 46 return NULL; 47 } 48 return page; 49} 50 51static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte) 52{ 53 free_page((unsigned long)pte); 54} 55 56static inline void pte_free(struct mm_struct *mm, pgtable_t pte) 57{ 58 pgtable_page_dtor(pte); 59 __free_page(pte); 60} 61 | |
62#define __pte_free_tlb(tlb,pte,addr) \ 63do { \ 64 pgtable_page_dtor(pte); \ 65 tlb_remove_page((tlb), (pte)); \ 66} while (0) 67 68#if CONFIG_PGTABLE_LEVELS > 2 69#define __pmd_free_tlb(tlb, pmdp, addr) \ 70do { \ 71 struct page *page = virt_to_page(pmdp); \ 72 pgtable_pmd_page_dtor(page); \ 73 tlb_remove_page((tlb), page); \ 74} while (0); 75#endif 76 77#endif /* __ASM_SH_PGALLOC_H */ | 30#define __pte_free_tlb(tlb,pte,addr) \ 31do { \ 32 pgtable_page_dtor(pte); \ 33 tlb_remove_page((tlb), (pte)); \ 34} while (0) 35 36#if CONFIG_PGTABLE_LEVELS > 2 37#define __pmd_free_tlb(tlb, pmdp, addr) \ 38do { \ 39 struct page *page = virt_to_page(pmdp); \ 40 pgtable_pmd_page_dtor(page); \ 41 tlb_remove_page((tlb), page); \ 42} while (0); 43#endif 44 45#endif /* __ASM_SH_PGALLOC_H */ |