-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge tag 'riscv-for-linus-5.14-mw0' of git://git.kernel.org/pub/scm/…
…linux/kernel/git/riscv/linux Pull RISC-V updates from Palmer Dabbelt: "We have a handful of new features for 5.14: - Support for transparent huge pages. - Support for generic PCI resources mapping. - Support for the mem= kernel parameter. - Support for KFENCE. - A handful of fixes to avoid W+X mappings in the kernel. - Support for VMAP_STACK based overflow detection. - An optimized copy_{to,from}_user" * tag 'riscv-for-linus-5.14-mw0' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: (37 commits) riscv: xip: Fix duplicate included asm/pgtable.h riscv: Fix PTDUMP output now BPF region moved back to module region riscv: __asm_copy_to-from_user: Optimize unaligned memory access and pipeline stall riscv: add VMAP_STACK overflow detection riscv: ptrace: add argn syntax riscv: mm: fix build errors caused by mk_pmd() riscv: Introduce structure that group all variables regarding kernel mapping riscv: Map the kernel with correct permissions the first time riscv: Introduce set_kernel_memory helper riscv: Enable KFENCE for riscv64 RISC-V: Use asm-generic for {in,out}{bwlq} riscv: add ASID-based tlbflushing methods riscv: pass the mm_struct to __sbi_tlb_flush_range riscv: Add mem kernel parameter support riscv: Simplify xip and !xip kernel address conversion macros riscv: Remove CONFIG_PHYS_RAM_BASE_FIXED riscv: Only initialize swiotlb when necessary riscv: fix typo in init.c riscv: Cleanup unused functions riscv: mm: Use better bitmap_zalloc() ...
- Loading branch information
Showing
37 changed files
with
901 additions
and
360 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
/* SPDX-License-Identifier: GPL-2.0 */ | ||
|
||
#ifndef _ASM_RISCV_KFENCE_H | ||
#define _ASM_RISCV_KFENCE_H | ||
|
||
#include <linux/kfence.h> | ||
#include <linux/pfn.h> | ||
#include <asm-generic/pgalloc.h> | ||
#include <asm/pgtable.h> | ||
|
||
static inline int split_pmd_page(unsigned long addr) | ||
{ | ||
int i; | ||
unsigned long pfn = PFN_DOWN(__pa((addr & PMD_MASK))); | ||
pmd_t *pmd = pmd_off_k(addr); | ||
pte_t *pte = pte_alloc_one_kernel(&init_mm); | ||
|
||
if (!pte) | ||
return -ENOMEM; | ||
|
||
for (i = 0; i < PTRS_PER_PTE; i++) | ||
set_pte(pte + i, pfn_pte(pfn + i, PAGE_KERNEL)); | ||
set_pmd(pmd, pfn_pmd(PFN_DOWN(__pa(pte)), PAGE_TABLE)); | ||
|
||
flush_tlb_kernel_range(addr, addr + PMD_SIZE); | ||
return 0; | ||
} | ||
|
||
static inline bool arch_kfence_init_pool(void) | ||
{ | ||
int ret; | ||
unsigned long addr; | ||
pmd_t *pmd; | ||
|
||
for (addr = (unsigned long)__kfence_pool; is_kfence_address((void *)addr); | ||
addr += PAGE_SIZE) { | ||
pmd = pmd_off_k(addr); | ||
|
||
if (pmd_leaf(*pmd)) { | ||
ret = split_pmd_page(addr); | ||
if (ret) | ||
return false; | ||
} | ||
} | ||
|
||
return true; | ||
} | ||
|
||
static inline bool kfence_protect_page(unsigned long addr, bool protect) | ||
{ | ||
pte_t *pte = virt_to_kpte(addr); | ||
|
||
if (protect) | ||
set_pte(pte, __pte(pte_val(*pte) & ~_PAGE_PRESENT)); | ||
else | ||
set_pte(pte, __pte(pte_val(*pte) | _PAGE_PRESENT)); | ||
|
||
flush_tlb_kernel_range(addr, addr + PAGE_SIZE); | ||
|
||
return true; | ||
} | ||
|
||
#endif /* _ASM_RISCV_KFENCE_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.