powerpc/mm: Fix WARN_ON with THP NUMA migration
WARNING: CPU: 12 PID: 4322 at /arch/powerpc/mm/pgtable-book3s64.c:76 set_pmd_at+0x4c/0x2b0
Modules linked in:
CPU: 12 PID: 4322 Comm: qemu-system-ppc Tainted: G W
4.19.0-rc3-00758-g8f0c636b0542 #36
NIP:
c0000000000872fc LR:
c000000000484eec CTR:
0000000000000000
REGS:
c000003fba876fe0 TRAP: 0700 Tainted: G W (
4.19.0-rc3-00758-g8f0c636b0542)
MSR:
900000010282b033 <SF,HV,VEC,VSX,EE,FP,ME,IR,DR,RI,LE,TM[E]> CR:
24282884 XER:
00000000
CFAR:
c000000000484ee8 IRQMASK: 0
GPR00:
c000000000484eec c000003fba877268 c000000001f0ec00 c000003fbd229f80
GPR04:
00007c8fe8e00000 c000003f864c5a38 860300853e0000c0 0000000000000080
GPR08:
0000000080000000 0000000000000001 0401000000000080 0000000000000001
GPR12:
0000000000002000 c000003fffff5400 c000003fce292000 00007c9024570000
GPR16:
0000000000000000 0000000000ffffff 0000000000000001 c000000001885950
GPR20:
0000000000000000 001ffffc0004807c 0000000000000008 c000000001f49d05
GPR24:
00007c8fe8e00000 c0000000020f2468 ffffffffffffffff c000003fcd33b090
GPR28:
00007c8fe8e00000 c000003fbd229f80 c000003f864c5a38 860300853e0000c0
NIP [
c0000000000872fc] set_pmd_at+0x4c/0x2b0
LR [
c000000000484eec] do_huge_pmd_numa_page+0xb1c/0xc20
Call Trace:
[
c000003fba877268] [
c00000000045931c] mpol_misplaced+0x1bc/0x230 (unreliable)
[
c000003fba8772c8] [
c000000000484eec] do_huge_pmd_numa_page+0xb1c/0xc20
[
c000003fba877398] [
c00000000040d344] __handle_mm_fault+0x5e4/0x2300
[
c000003fba8774d8] [
c00000000040f400] handle_mm_fault+0x3a0/0x420
[
c000003fba877528] [
c0000000003ff6f4] __get_user_pages+0x2e4/0x560
[
c000003fba877628] [
c000000000400314] get_user_pages_unlocked+0x104/0x2a0
[
c000003fba8776c8] [
c000000000118f44] __gfn_to_pfn_memslot+0x284/0x6a0
[
c000003fba877748] [
c0000000001463a0] kvmppc_book3s_radix_page_fault+0x360/0x12d0
[
c000003fba877838] [
c000000000142228] kvmppc_book3s_hv_page_fault+0x48/0x1300
[
c000003fba877988] [
c00000000013dc08] kvmppc_vcpu_run_hv+0x1808/0x1b50
[
c000003fba877af8] [
c000000000126b44] kvmppc_vcpu_run+0x34/0x50
[
c000003fba877b18] [
c000000000123268] kvm_arch_vcpu_ioctl_run+0x288/0x2d0
[
c000003fba877b98] [
c00000000011253c] kvm_vcpu_ioctl+0x1fc/0x8c0
[
c000003fba877d08] [
c0000000004e9b24] do_vfs_ioctl+0xa44/0xae0
[
c000003fba877db8] [
c0000000004e9c44] ksys_ioctl+0x84/0xf0
[
c000003fba877e08] [
c0000000004e9cd8] sys_ioctl+0x28/0x80
We removed the pte_protnone check earlier with the understanding that we
mark the pte invalid before the set_pte/set_pmd usage. But the huge pmd
autonuma still use the set_pmd_at directly. This is ok because a protnone pte
won't have translation cache in TLB.
Fixes: da7ad366b497 ("powerpc/mm/book3s: Update pmd_present to look at _PAGE_PRESENT bit")
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>