Merge tag 'riscv-for-linus-5.15-mw0' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Sep 2021 18:31:23 +0000 (11:31 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Sun, 5 Sep 2021 18:31:23 +0000 (11:31 -0700)
Pull RISC-V updates from Palmer Dabbelt:

 - support PC-relative instructions (auipc and branches) in kprobes

 - support for forced IRQ threading

 - support for the hlt/nohlt kernel command line options, via the
   generic idle loop

 - show the edge/level triggered behavior of interrupts
   in /proc/interrupts

 - a handful of cleanups to our address mapping mechanisms

 - support for allocating gigantic hugepages via CMA

 - support for the undefined behavior sanitizer (UBSAN)

 - a handful of cleanups to the VDSO that allow the kernel to build with
   LLD.

 - support for hugepage migration

* tag 'riscv-for-linus-5.15-mw0' of git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux: (21 commits)
  riscv: add support for hugepage migration
  RISC-V: Fix VDSO build for !MMU
  riscv: use strscpy to replace strlcpy
  riscv: explicitly use symbol offsets for VDSO
  riscv: Enable Undefined Behavior Sanitizer UBSAN
  riscv: Keep the riscv Kconfig selects sorted
  riscv: Support allocating gigantic hugepages using CMA
  riscv: fix the global name pfn_base confliction error
  riscv: Move early fdt mapping creation in its own function
  riscv: Simplify BUILTIN_DTB device tree mapping handling
  riscv: Use __maybe_unused instead of #ifdefs around variable declarations
  riscv: Get rid of map_size parameter to create_kernel_page_table
  riscv: Introduce va_kernel_pa_offset for 32-bit kernel
  riscv: Optimize kernel virtual address conversion macro
  dt-bindings: riscv: add starfive jh7100 bindings
  riscv: Enable GENERIC_IRQ_SHOW_LEVEL
  riscv: Enable idle generic idle loop
  riscv: Allow forced irq threading
  riscv: Implement thread_struct whitelist for hardened usercopy
  riscv: kprobes: implement the branch instructions
  ...

1  2 
arch/riscv/Kconfig
arch/riscv/Makefile
arch/riscv/include/asm/page.h
arch/riscv/kernel/setup.c
arch/riscv/mm/init.c

Simple merge
Simple merge
@@@ -103,13 -101,12 +101,13 @@@ struct kernel_mapping 
  };
  
  extern struct kernel_mapping kernel_map;
 +extern phys_addr_t phys_ram_base;
  
- #ifdef CONFIG_64BIT
  #define is_kernel_mapping(x)  \
        ((x) >= kernel_map.virt_addr && (x) < (kernel_map.virt_addr + kernel_map.size))
  #define is_linear_mapping(x)  \
-       ((x) >= PAGE_OFFSET && (x) < kernel_map.virt_addr)
+       ((x) >= PAGE_OFFSET && (!IS_ENABLED(CONFIG_64BIT) || (x) < kernel_map.virt_addr))
  
  #define linear_mapping_pa_to_va(x)    ((void *)((unsigned long)(x) + kernel_map.va_pa_offset))
  #define kernel_mapping_pa_to_va(y)    ({                                              \
Simple merge
@@@ -589,16 -594,8 +615,16 @@@ asmlinkage void __init setup_vm(uintptr
  
        /* Sanity check alignment and size */
        BUG_ON((PAGE_OFFSET % PGDIR_SIZE) != 0);
-       BUG_ON((kernel_map.phys_addr % map_size) != 0);
+       BUG_ON((kernel_map.phys_addr % PMD_SIZE) != 0);
  
 +#ifdef CONFIG_64BIT
 +      /*
 +       * The last 4K bytes of the addressable memory can not be mapped because
 +       * of IS_ERR_VALUE macro.
 +       */
 +      BUG_ON((kernel_map.virt_addr + kernel_map.size) > ADDRESS_SPACE_END - SZ_4K);
 +#endif
 +
        pt_ops.alloc_pte = alloc_pte_early;
        pt_ops.get_pte_virt = get_pte_virt_early;
  #ifndef __PAGETABLE_PMD_FOLDED