# git rev-parse -q --verify ee40d543e97d23d3392d8fb1ec9972eb4e9c7611^{commit} ee40d543e97d23d3392d8fb1ec9972eb4e9c7611 already have revision, skipping fetch # git checkout -q -f -B kisskb ee40d543e97d23d3392d8fb1ec9972eb4e9c7611 # git clean -qxdf # < git log -1 # commit ee40d543e97d23d3392d8fb1ec9972eb4e9c7611 # Author: Hugh Dickins # Date: Sat Sep 2 08:29:30 2023 -0700 # # mm/pagewalk: fix bootstopping regression from extra pte_unmap() # # Mikhail reports early-6.6-based Fedora Rawhide not booting: "rcu_preempt # detected expedited stalls", minutes wait, and then hung_task splat while # kworker trying to synchronize_rcu_expedited(). Nothing logged to disk. # # He bisected to my 6.6 a349d72fd9ef ("mm/pgtable: add rcu_read_lock() and # rcu_read_unlock()s"): but the one to blame is my 6.5 commit to fix the # espfix "bad pmd" warnings when booting x86_64 with CONFIG_EFI_PGT_DUMP=y. # # Gaah, that added an "addr >= TASK_SIZE" check to avoid pte_offset_map(), # but failed to add the equivalent check when choosing to pte_unmap(). # # It's not a problem on 6.5 (for different reasons, it's harmless on both # 64-bit and 32-bit), but becomes a bootstopper on 6.6 with the unbalanced # rcu_read_unlock() - RCU has a WARN_ON_ONCE for that, but it would have # scrolled off Mikhail's console too quickly. # # Reported-by: Mikhail Gavrilov # Closes: https://lore.kernel.org/linux-mm/CABXGCsNi8Tiv5zUPNXr6UJw6qV1VdaBEfGqEAMkkXE3QPvZuAQ@mail.gmail.com/ # Fixes: 8b1cb4a2e819 ("mm/pagewalk: fix EFI_PGT_DUMP of espfix area") # Fixes: a349d72fd9ef ("mm/pgtable: add rcu_read_lock() and rcu_read_unlock()s") # Signed-off-by: Hugh Dickins # Tested-by: Mikhail Gavrilov # Signed-off-by: Linus Torvalds # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-gcc --version # < /opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux-ld --version # < git log --format=%s --max-count=1 ee40d543e97d23d3392d8fb1ec9972eb4e9c7611 # make -s -j 32 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- x86_64_defconfig # < make -s -j 32 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- help # make -s -j 32 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- olddefconfig # make -s -j 32 ARCH=x86 O=/kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 CROSS_COMPILE=/opt/cross/kisskb/korg/gcc-8.5.0-nolibc/x86_64-linux/bin/x86_64-linux- Completed OK # rm -rf /kisskb/build/linus_x86_64_defconfig_x86_64-gcc8 # Build took: 0:02:07.731363