Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * PA-RISC KFENCE support.
4 *
5 * Copyright (C) 2021, Helge Deller <deller@gmx.de>
6 */
7
8#ifndef _ASM_PARISC_KFENCE_H
9#define _ASM_PARISC_KFENCE_H
10
11#include <linux/kfence.h>
12
13#include <asm/pgtable.h>
14#include <asm/tlbflush.h>
15
16static inline bool arch_kfence_init_pool(void)
17{
18 return true;
19}
20
21/* Protect the given page and flush TLB. */
22static inline bool kfence_protect_page(unsigned long addr, bool protect)
23{
24 pte_t *pte = virt_to_kpte(addr);
25
26 if (WARN_ON(!pte))
27 return false;
28
29 /*
30 * We need to avoid IPIs, as we may get KFENCE allocations or faults
31 * with interrupts disabled.
32 */
33
34 if (protect)
35 set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT));
36 else
37 set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT));
38
39 flush_tlb_kernel_range(addr, addr + PAGE_SIZE);
40
41 return true;
42}
43
44#endif /* _ASM_PARISC_KFENCE_H */