Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/openrisc/include/asm/pgalloc.h
26481 views
1
/* SPDX-License-Identifier: GPL-2.0-or-later */
2
/*
3
* OpenRISC Linux
4
*
5
* Linux architectural port borrowing liberally from similar works of
6
* others. All original copyrights apply as per the original source
7
* declaration.
8
*
9
* OpenRISC implementation:
10
* Copyright (C) 2003 Matjaz Breskvar <[email protected]>
11
* Copyright (C) 2010-2011 Jonas Bonn <[email protected]>
12
* et al.
13
*/
14
15
#ifndef __ASM_OPENRISC_PGALLOC_H
16
#define __ASM_OPENRISC_PGALLOC_H
17
18
#include <asm/page.h>
19
#include <linux/threads.h>
20
#include <linux/mm.h>
21
#include <linux/memblock.h>
22
23
#define __HAVE_ARCH_PTE_ALLOC_ONE_KERNEL
24
#include <asm-generic/pgalloc.h>
25
26
extern int mem_init_done;
27
28
#define pmd_populate_kernel(mm, pmd, pte) \
29
set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)))
30
31
static inline void pmd_populate(struct mm_struct *mm, pmd_t *pmd,
32
struct page *pte)
33
{
34
set_pmd(pmd, __pmd(_KERNPG_TABLE +
35
((unsigned long)page_to_pfn(pte) <<
36
(unsigned long) PAGE_SHIFT)));
37
}
38
39
/*
40
* Allocate and free page tables.
41
*/
42
static inline pgd_t *pgd_alloc(struct mm_struct *mm)
43
{
44
pgd_t *ret = __pgd_alloc(mm, 0);
45
46
if (ret)
47
memcpy(ret + USER_PTRS_PER_PGD,
48
swapper_pg_dir + USER_PTRS_PER_PGD,
49
(PTRS_PER_PGD - USER_PTRS_PER_PGD) * sizeof(pgd_t));
50
51
return ret;
52
}
53
54
#if 0
55
/* FIXME: This seems to be the preferred style, but we are using
56
* current_pgd (from mm->pgd) to load kernel pages so we need it
57
* initialized. This needs to be looked into.
58
*/
59
extern inline pgd_t *pgd_alloc(struct mm_struct *mm)
60
{
61
return (pgd_t *)get_zeroed_page(GFP_KERNEL);
62
}
63
#endif
64
65
extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm);
66
67
#define __pte_free_tlb(tlb, pte, addr) \
68
tlb_remove_ptdesc((tlb), page_ptdesc(pte))
69
70
#endif
71
72