[PATCH] powerpc/book3s/hash64/devmap: Use H_PAGE_THP_HUGE when setting up huge devmap pte entries
Michael Ellerman
patch-notifications at ellerman.id.au
Thu Mar 26 23:06:51 AEDT 2020
On Fri, 2020-03-13 at 09:48:42 UTC, "Aneesh Kumar K.V" wrote:
> H_PAGE_THP_HUGE is used to differentiate between a THP hugepage and hugetlb
> hugepage entries. The difference is w.r.t how we handle hash fault on these
> address. THP address enables MPSS in segments. We want to manage devmap hugepage
> entries similar to THP pt entries. Hence use H_PAGE_THP_HUGE for devmap huge pte
> entries.
>
> With current code while handling hash pte fault, we do set is_thp = true when
> finding devmap pte huge pte entries.
>
> Current code also does the below sequence we setting up huge devmap entries.
> entry = pmd_mkhuge(pfn_t_pmd(pfn, prot));
> if (pfn_t_devmap(pfn))
> entry = pmd_mkdevmap(entry);
>
> In that case we would find both H_PAGE_THP_HUGE and PAGE_DEVMAP set for huge
> devmap pte entries. This results in false positive error like below.
>
> kernel BUG at /home/kvaneesh/src/linux/mm/memory.c:4321!
> Oops: Exception in kernel mode, sig: 5 [#1]
> LE PAGE_SIZE=64K MMU=Hash SMP NR_CPUS=2048 NUMA pSeries
> Modules linked in:
> CPU: 56 PID: 67996 Comm: t_mmap_dio Not tainted 5.6.0-rc4-59640-g371c804dedbc #128
> ....
> NIP [c00000000044c9e4] __follow_pte_pmd+0x264/0x900
> LR [c0000000005d45f8] dax_writeback_one+0x1a8/0x740
> Call Trace:
> [c000000c6e9f38c0] [c0000000013f4130] str_spec.74809+0x22ffb4/0x2d116c (unreliable)
> [c000000c6e9f3960] [c0000000005d45f8] dax_writeback_one+0x1a8/0x740
> [c000000c6e9f3a40] [c0000000005d4dfc] dax_writeback_mapping_range+0x26c/0x700
> [c000000c6e9f3b30] [c000000000666580] ext4_dax_writepages+0x150/0x5a0
> [c000000c6e9f3ba0] [c0000000003fe278] do_writepages+0x68/0x180
> [c000000c6e9f3c10] [c0000000003ecc58] __filemap_fdatawrite_range+0x138/0x180
> [c000000c6e9f3cc0] [c0000000003ede74] file_write_and_wait_range+0xa4/0x110
> [c000000c6e9f3d10] [c0000000006552d0] ext4_sync_file+0x370/0x6e0
> [c000000c6e9f3d70] [c00000000057d330] vfs_fsync_range+0x70/0xf0
> [c000000c6e9f3db0] [c00000000046a000] sys_msync+0x220/0x2e0
> [c000000c6e9f3e20] [c00000000000b478] system_call+0x5c/0x68
> Instruction dump:
> 7a941564 392affff 7fbffc36 7a94f082 7d2907b4 78f4f00e 7fff4838 7bff1f24
> 7e54f82a 7e74fa14 724900a0 40820410 <0b080000> 72490040 418201c8 2fb7000
>
> This is because our pmd_trans_huge check doesn't exclude _PAGE_DEVMAP.
>
> To make this all consistent, update pmd_mkdevmap to set H_PAGE_THP_HUGE and
> pmd_trans_huge check now excludes _PAGE_DEVMAP correctly.
>
> Fixes: ebd31197931d ("powerpc/mm: Add devmap support for ppc64")
> Signed-off-by: Aneesh Kumar K.V <aneesh.kumar at linux.ibm.com>
Applied to powerpc next, thanks.
https://git.kernel.org/powerpc/c/36b78402d97a3b9aeab136feb9b00d8647ec2c20
cheers
More information about the Linuxppc-dev
mailing list