Merge tag 'gpio-fixes-for-v6.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / include / linux / page_table_check.h
CommitLineData
df4e817b
PT
1/* SPDX-License-Identifier: GPL-2.0 */
2
3/*
4 * Copyright (c) 2021, Google LLC.
5 * Pasha Tatashin <pasha.tatashin@soleen.com>
6 */
7#ifndef __LINUX_PAGE_TABLE_CHECK_H
8#define __LINUX_PAGE_TABLE_CHECK_H
9
10#ifdef CONFIG_PAGE_TABLE_CHECK
11#include <linux/jump_label.h>
12
13extern struct static_key_true page_table_check_disabled;
14extern struct page_ext_operations page_table_check_ops;
15
16void __page_table_check_zero(struct page *page, unsigned int order);
aa232204 17void __page_table_check_pte_clear(struct mm_struct *mm, pte_t pte);
1831414c 18void __page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd);
931c38e1 19void __page_table_check_pud_clear(struct mm_struct *mm, pud_t pud);
a3793220
MWO
20void __page_table_check_ptes_set(struct mm_struct *mm, pte_t *ptep, pte_t pte,
21 unsigned int nr);
a3b83713 22void __page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp, pmd_t pmd);
6d144436 23void __page_table_check_pud_set(struct mm_struct *mm, pud_t *pudp, pud_t pud);
80110bbf
PT
24void __page_table_check_pte_clear_range(struct mm_struct *mm,
25 unsigned long addr,
26 pmd_t pmd);
df4e817b
PT
27
28static inline void page_table_check_alloc(struct page *page, unsigned int order)
29{
30 if (static_branch_likely(&page_table_check_disabled))
31 return;
32
33 __page_table_check_zero(page, order);
34}
35
36static inline void page_table_check_free(struct page *page, unsigned int order)
37{
38 if (static_branch_likely(&page_table_check_disabled))
39 return;
40
41 __page_table_check_zero(page, order);
42}
43
aa232204 44static inline void page_table_check_pte_clear(struct mm_struct *mm, pte_t pte)
df4e817b
PT
45{
46 if (static_branch_likely(&page_table_check_disabled))
47 return;
48
aa232204 49 __page_table_check_pte_clear(mm, pte);
df4e817b
PT
50}
51
1831414c 52static inline void page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd)
df4e817b
PT
53{
54 if (static_branch_likely(&page_table_check_disabled))
55 return;
56
1831414c 57 __page_table_check_pmd_clear(mm, pmd);
df4e817b
PT
58}
59
931c38e1 60static inline void page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
df4e817b
PT
61{
62 if (static_branch_likely(&page_table_check_disabled))
63 return;
64
931c38e1 65 __page_table_check_pud_clear(mm, pud);
df4e817b
PT
66}
67
a3793220
MWO
68static inline void page_table_check_ptes_set(struct mm_struct *mm,
69 pte_t *ptep, pte_t pte, unsigned int nr)
df4e817b
PT
70{
71 if (static_branch_likely(&page_table_check_disabled))
72 return;
73
a3793220 74 __page_table_check_ptes_set(mm, ptep, pte, nr);
df4e817b
PT
75}
76
a3b83713 77static inline void page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp,
df4e817b
PT
78 pmd_t pmd)
79{
80 if (static_branch_likely(&page_table_check_disabled))
81 return;
82
a3b83713 83 __page_table_check_pmd_set(mm, pmdp, pmd);
df4e817b
PT
84}
85
6d144436 86static inline void page_table_check_pud_set(struct mm_struct *mm, pud_t *pudp,
df4e817b
PT
87 pud_t pud)
88{
89 if (static_branch_likely(&page_table_check_disabled))
90 return;
91
6d144436 92 __page_table_check_pud_set(mm, pudp, pud);
df4e817b
PT
93}
94
80110bbf
PT
95static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
96 unsigned long addr,
97 pmd_t pmd)
98{
99 if (static_branch_likely(&page_table_check_disabled))
100 return;
101
102 __page_table_check_pte_clear_range(mm, addr, pmd);
103}
104
df4e817b
PT
105#else
106
107static inline void page_table_check_alloc(struct page *page, unsigned int order)
108{
109}
110
111static inline void page_table_check_free(struct page *page, unsigned int order)
112{
113}
114
aa232204 115static inline void page_table_check_pte_clear(struct mm_struct *mm, pte_t pte)
df4e817b
PT
116{
117}
118
1831414c 119static inline void page_table_check_pmd_clear(struct mm_struct *mm, pmd_t pmd)
df4e817b
PT
120{
121}
122
931c38e1 123static inline void page_table_check_pud_clear(struct mm_struct *mm, pud_t pud)
df4e817b
PT
124{
125}
126
a3793220
MWO
127static inline void page_table_check_ptes_set(struct mm_struct *mm,
128 pte_t *ptep, pte_t pte, unsigned int nr)
df4e817b
PT
129{
130}
131
a3b83713 132static inline void page_table_check_pmd_set(struct mm_struct *mm, pmd_t *pmdp,
df4e817b
PT
133 pmd_t pmd)
134{
135}
136
6d144436 137static inline void page_table_check_pud_set(struct mm_struct *mm, pud_t *pudp,
df4e817b
PT
138 pud_t pud)
139{
140}
141
80110bbf
PT
142static inline void page_table_check_pte_clear_range(struct mm_struct *mm,
143 unsigned long addr,
144 pmd_t pmd)
145{
146}
147
df4e817b
PT
148#endif /* CONFIG_PAGE_TABLE_CHECK */
149#endif /* __LINUX_PAGE_TABLE_CHECK_H */