Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/um/include/asm/pgalloc.h
10820 views
1
/*
2
* Copyright (C) 2000, 2001, 2002 Jeff Dike ([email protected])
3
* Copyright 2003 PathScale, Inc.
4
* Derived from include/asm-i386/pgalloc.h and include/asm-i386/pgtable.h
5
* Licensed under the GPL
6
*/
7
8
#ifndef __UM_PGALLOC_H
9
#define __UM_PGALLOC_H
10
11
#include "linux/mm.h"
12
#include "asm/fixmap.h"
13
14
#define pmd_populate_kernel(mm, pmd, pte) \
15
set_pmd(pmd, __pmd(_PAGE_TABLE + (unsigned long) __pa(pte)))
16
17
#define pmd_populate(mm, pmd, pte) \
18
set_pmd(pmd, __pmd(_PAGE_TABLE + \
19
((unsigned long long)page_to_pfn(pte) << \
20
(unsigned long long) PAGE_SHIFT)))
21
#define pmd_pgtable(pmd) pmd_page(pmd)
22
23
/*
24
* Allocate and free page tables.
25
*/
26
extern pgd_t *pgd_alloc(struct mm_struct *);
27
extern void pgd_free(struct mm_struct *mm, pgd_t *pgd);
28
29
extern pte_t *pte_alloc_one_kernel(struct mm_struct *, unsigned long);
30
extern pgtable_t pte_alloc_one(struct mm_struct *, unsigned long);
31
32
static inline void pte_free_kernel(struct mm_struct *mm, pte_t *pte)
33
{
34
free_page((unsigned long) pte);
35
}
36
37
static inline void pte_free(struct mm_struct *mm, pgtable_t pte)
38
{
39
pgtable_page_dtor(pte);
40
__free_page(pte);
41
}
42
43
#define __pte_free_tlb(tlb,pte, address) \
44
do { \
45
pgtable_page_dtor(pte); \
46
tlb_remove_page((tlb),(pte)); \
47
} while (0)
48
49
#ifdef CONFIG_3_LEVEL_PGTABLES
50
51
static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
52
{
53
free_page((unsigned long)pmd);
54
}
55
56
#define __pmd_free_tlb(tlb,x, address) tlb_remove_page((tlb),virt_to_page(x))
57
#endif
58
59
#define check_pgt_cache() do { } while (0)
60
61
#endif
62
63
64