1. 16 Dec, 2022 1 commit
    • Michael Ellerman's avatar
      powerpc/code-patching: Fix oops with DEBUG_VM enabled · 980411a4
      Michael Ellerman authored
      Nathan reported that the new per-cpu mm patching oopses if DEBUG_VM is
      enabled:
      
        ------------[ cut here ]------------
        kernel BUG at arch/powerpc/mm/pgtable.c:333!
        Oops: Exception in kernel mode, sig: 5 [#1]
        LE PAGE_SIZE=64K MMU=Radix SMP NR_CPUS=2048 NUMA PowerNV
        Modules linked in:
        CPU: 0 PID: 1 Comm: swapper/0 Not tainted 6.1.0-rc2+ #1
        Hardware name: IBM PowerNV (emulated by qemu) POWER9 0x4e1200 opal:v7.0 PowerNV
        ...
        NIP assert_pte_locked+0x180/0x1a0
        LR  assert_pte_locked+0x170/0x1a0
        Call Trace:
          0x60000000 (unreliable)
          patch_instruction+0x618/0x6d0
          arch_prepare_kprobe+0xfc/0x2d0
          register_kprobe+0x520/0x7c0
          arch_init_kprobes+0x28/0x3c
          init_kprobes+0x108/0x184
          do_one_initcall+0x60/0x2e0
          kernel_init_freeable+0x1f0/0x3e0
          kernel_init+0x34/0x1d0
          ret_from_kernel_thread+0x5c/0x64
      
      It's caused by the assert_spin_locked() failing in assert_pte_locked().
      The assert fails because the PTE was unlocked in text_area_cpu_up_mm(),
      and never relocked.
      
      The PTE page shouldn't be freed, the patching_mm is only used for
      patching on this CPU, only that single PTE is ever mapped, and it's only
      unmapped at CPU offline.
      
      In fact assert_pte_locked() has a special case to ignore init_mm
      entirely, and the patching_mm is more-or-less like init_mm, so possibly
      the check could be skipped for patching_mm too.
      
      But for now be conservative, and use the proper PTE accessors at
      patching time, so that the PTE lock is held while the PTE is used. That
      also avoids the warning in assert_pte_locked().
      
      With that it's no longer necessary to save the PTE in
      cpu_patching_context for the mm_patch_enabled() case.
      
      Fixes: c28c15b6 ("powerpc/code-patching: Use temporary mm for Radix MMU")
      Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20221216125913.990972-1-mpe@ellerman.id.au
      980411a4
  2. 12 Dec, 2022 1 commit
  3. 08 Dec, 2022 1 commit
  4. 07 Dec, 2022 14 commits
  5. 06 Dec, 2022 3 commits
  6. 05 Dec, 2022 1 commit
  7. 02 Dec, 2022 19 commits