Re: [PATCH v2 1/2] KVM: arm/arm64: add WARN_ON if size is not PAGE_SIZE aligned in unmap_stage2_range
Pingļ¼thanks -- Cheers, Jia On 5/18/2018 5:27 PM, Jia He Wrote: > There is a panic in armv8a server(QDF2400) under memory pressure tests > (start 20 guests and run memhog in the host). > > -begin > [35380.800950] BUG: Bad page state in process qemu-kvm pfn:dd0b6 > [35380.805825] page:7fe003742d80 count:-4871 mapcount:-2126053375 > mapping: (null) index:0x0 > [35380.815024] flags: 0x1fffc000() > [35380.818845] raw: 1fffc000 > ecf98147 > [35380.826569] raw: dead0100 dead0200 8017c001c000 > > [35380.805825] page:7fe003742d80 count:-4871 mapcount:-2126053375 > mapping: (null) index:0x0 > [35380.815024] flags: 0x1fffc000() > [35380.818845] raw: 1fffc000 > ecf98147 > [35380.826569] raw: dead0100 dead0200 8017c001c000 > > [35380.834294] page dumped because: nonzero _refcount > [35380.839069] Modules linked in: vhost_net vhost tap ebtable_filter > ebtables ip6table_filter ip6_tables iptable_filter fcoe libfcoe libfc > 8021q garp mrp stp llc scsi_transport_fc openvswitch nf_conntrack_ipv6 > nf_nat_ipv6 nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_defrag_ipv6 > nf_nat nf_conntrack vfat fat rpcrdma ib_isert iscsi_target_mod ib_iser > libiscsi scsi_transport_iscsi ib_srpt target_core_mod ib_srp > scsi_transport_srp ib_ipoib rdma_ucm ib_ucm ib_uverbs ib_umad rdma_cm > ib_cm iw_cm mlx5_ib ib_core crc32_ce ipmi_ssif tpm_tis tpm_tis_core sg > nfsd auth_rpcgss nfs_acl lockd grace sunrpc dm_multipath ip_tables xfs > libcrc32c mlx5_core mlxfw devlink ahci_platform libahci_platform libahci > qcom_emac sdhci_acpi sdhci hdma mmc_core hdma_mgmt i2c_qup dm_mirror > dm_region_hash dm_log dm_mod > [35380.908341] CPU: 29 PID: 18323 Comm: qemu-kvm Tainted: G W > 4.14.15-5.hxt.aarch64 #1 > [35380.917107] Hardware name: > [35380.930909] Call trace: > [35380.933345] [] dump_backtrace+0x0/0x22c > [35380.938723] [] show_stack+0x24/0x2c > [35380.943759] [] dump_stack+0x8c/0xb0 > [35380.948794] [] bad_page+0xf4/0x154 > [35380.953740] [] free_pages_check_bad+0x90/0x9c > [35380.959642] [] free_pcppages_bulk+0x464/0x518 > [35380.965545] [] free_hot_cold_page+0x22c/0x300 > [35380.971448] [] __put_page+0x54/0x60 > [35380.976484] [] unmap_stage2_range+0x170/0x2b4 > [35380.982385] [] kvm_unmap_hva_handler+0x30/0x40 > [35380.988375] [] handle_hva_to_gpa+0xb0/0xec > [35380.994016] [] kvm_unmap_hva_range+0x5c/0xd0 > [35380.999833] [] > kvm_mmu_notifier_invalidate_range_start+0x60/0xb0 > [35381.007387] [] > __mmu_notifier_invalidate_range_start+0x64/0x8c > [35381.014765] [] try_to_unmap_one+0x78c/0x7a4 > [35381.020493] [] rmap_walk_ksm+0x124/0x1a0 > [35381.025961] [] rmap_walk+0x94/0x98 > [35381.030909] [] try_to_unmap+0x100/0x124 > [35381.036293] [] unmap_and_move+0x480/0x6fc > [35381.041847] [] migrate_pages+0x10c/0x288 > [35381.047318] [] compact_zone+0x238/0x954 > [35381.052697] [] compact_zone_order+0xc4/0xe8 > [35381.058427] [] try_to_compact_pages+0x160/0x294 > [35381.064503] [] > __alloc_pages_direct_compact+0x68/0x194 > [35381.071187] [] __alloc_pages_nodemask+0xc20/0xf7c > [35381.077437] [] alloc_pages_vma+0x1a4/0x1c0 > [35381.083080] [] > do_huge_pmd_anonymous_page+0x128/0x324 > [35381.089677] [] __handle_mm_fault+0x71c/0x7e8 > [35381.095492] [] handle_mm_fault+0xf8/0x194 > [35381.101049] [] __get_user_pages+0x124/0x34c > [35381.106777] [] populate_vma_page_range+0x90/0x9c > [35381.112941] [] __mm_populate+0xc4/0x15c > [35381.118322] [] SyS_mlockall+0x100/0x164 > [35381.123705] Exception stack(0x800dce5f3ec0 to 0x800dce5f4000) > [35381.130128] 3ec0: 0003 d6e6024cc9b87e00 be94f000 > > [35381.137940] 3ee0: 0002 > cf6fc3c0 > [35381.145753] 3f00: 00e6 cf6fc490 eeeab0f0 > d6e6024cc9b87e00 > [35381.153565] 3f20: be81b3c0 0020 > 9e53eff806b5 > [35381.161379] 3f40: be94de48 a7c269b0 0011 > eeeabf68 > [35381.169190] 3f60: ceacfe60 be94f000 be9ba358 > be7ffb80 > [35381.177003] 3f80: be9ba000 be959f64 > be94f000 > [35381.184815] 3fa0: eeeabdb0 be5f3bf8 > eeeabdb0 > [35381.192628] 3fc0: a7c269b8 6000 0003 > 00e6 > [35381.200440] 3fe0: > > [35381.208254] [] __sys_trace_return+0x0/0x4 > [35381.213809] Disabling lock debugging due to kernel taint > end-- > > The root cause might be what I fixed at [1]. But from arm kvm points of > view, it would be better we caught the exception
[PATCH v2 1/2] KVM: arm/arm64: add WARN_ON if size is not PAGE_SIZE aligned in unmap_stage2_range
There is a panic in armv8a server(QDF2400) under memory pressure tests (start 20 guests and run memhog in the host). -begin [35380.800950] BUG: Bad page state in process qemu-kvm pfn:dd0b6 [35380.805825] page:7fe003742d80 count:-4871 mapcount:-2126053375 mapping: (null) index:0x0 [35380.815024] flags: 0x1fffc000() [35380.818845] raw: 1fffc000 ecf98147 [35380.826569] raw: dead0100 dead0200 8017c001c000 [35380.805825] page:7fe003742d80 count:-4871 mapcount:-2126053375 mapping: (null) index:0x0 [35380.815024] flags: 0x1fffc000() [35380.818845] raw: 1fffc000 ecf98147 [35380.826569] raw: dead0100 dead0200 8017c001c000 [35380.834294] page dumped because: nonzero _refcount [35380.839069] Modules linked in: vhost_net vhost tap ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter fcoe libfcoe libfc 8021q garp mrp stp llc scsi_transport_fc openvswitch nf_conntrack_ipv6 nf_nat_ipv6 nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_defrag_ipv6 nf_nat nf_conntrack vfat fat rpcrdma ib_isert iscsi_target_mod ib_iser libiscsi scsi_transport_iscsi ib_srpt target_core_mod ib_srp scsi_transport_srp ib_ipoib rdma_ucm ib_ucm ib_uverbs ib_umad rdma_cm ib_cm iw_cm mlx5_ib ib_core crc32_ce ipmi_ssif tpm_tis tpm_tis_core sg nfsd auth_rpcgss nfs_acl lockd grace sunrpc dm_multipath ip_tables xfs libcrc32c mlx5_core mlxfw devlink ahci_platform libahci_platform libahci qcom_emac sdhci_acpi sdhci hdma mmc_core hdma_mgmt i2c_qup dm_mirror dm_region_hash dm_log dm_mod [35380.908341] CPU: 29 PID: 18323 Comm: qemu-kvm Tainted: G W 4.14.15-5.hxt.aarch64 #1 [35380.917107] Hardware name: [35380.930909] Call trace: [35380.933345] [] dump_backtrace+0x0/0x22c [35380.938723] [] show_stack+0x24/0x2c [35380.943759] [] dump_stack+0x8c/0xb0 [35380.948794] [] bad_page+0xf4/0x154 [35380.953740] [] free_pages_check_bad+0x90/0x9c [35380.959642] [] free_pcppages_bulk+0x464/0x518 [35380.965545] [] free_hot_cold_page+0x22c/0x300 [35380.971448] [] __put_page+0x54/0x60 [35380.976484] [] unmap_stage2_range+0x170/0x2b4 [35380.982385] [] kvm_unmap_hva_handler+0x30/0x40 [35380.988375] [] handle_hva_to_gpa+0xb0/0xec [35380.994016] [] kvm_unmap_hva_range+0x5c/0xd0 [35380.999833] [] kvm_mmu_notifier_invalidate_range_start+0x60/0xb0 [35381.007387] [] __mmu_notifier_invalidate_range_start+0x64/0x8c [35381.014765] [] try_to_unmap_one+0x78c/0x7a4 [35381.020493] [] rmap_walk_ksm+0x124/0x1a0 [35381.025961] [] rmap_walk+0x94/0x98 [35381.030909] [] try_to_unmap+0x100/0x124 [35381.036293] [] unmap_and_move+0x480/0x6fc [35381.041847] [] migrate_pages+0x10c/0x288 [35381.047318] [] compact_zone+0x238/0x954 [35381.052697] [] compact_zone_order+0xc4/0xe8 [35381.058427] [] try_to_compact_pages+0x160/0x294 [35381.064503] [] __alloc_pages_direct_compact+0x68/0x194 [35381.071187] [] __alloc_pages_nodemask+0xc20/0xf7c [35381.077437] [] alloc_pages_vma+0x1a4/0x1c0 [35381.083080] [] do_huge_pmd_anonymous_page+0x128/0x324 [35381.089677] [] __handle_mm_fault+0x71c/0x7e8 [35381.095492] [] handle_mm_fault+0xf8/0x194 [35381.101049] [] __get_user_pages+0x124/0x34c [35381.106777] [] populate_vma_page_range+0x90/0x9c [35381.112941] [] __mm_populate+0xc4/0x15c [35381.118322] [] SyS_mlockall+0x100/0x164 [35381.123705] Exception stack(0x800dce5f3ec0 to 0x800dce5f4000) [35381.130128] 3ec0: 0003 d6e6024cc9b87e00 be94f000 [35381.137940] 3ee0: 0002 cf6fc3c0 [35381.145753] 3f00: 00e6 cf6fc490 eeeab0f0 d6e6024cc9b87e00 [35381.153565] 3f20: be81b3c0 0020 9e53eff806b5 [35381.161379] 3f40: be94de48 a7c269b0 0011 eeeabf68 [35381.169190] 3f60: ceacfe60 be94f000 be9ba358 be7ffb80 [35381.177003] 3f80: be9ba000 be959f64 be94f000 [35381.184815] 3fa0: eeeabdb0 be5f3bf8 eeeabdb0 [35381.192628] 3fc0: a7c269b8 6000 0003 00e6 [35381.200440] 3fe0: [35381.208254] [] __sys_trace_return+0x0/0x4 [35381.213809] Disabling lock debugging due to kernel taint end-- The root cause might be what I fixed at [1]. But from arm kvm points of view, it would be better we caught the exception earlier and clearer. If the size is not PAGE_SIZE aligned, unmap_stage2_range might unmap the wrong(more or less) page range. Hence it caused the "BUG: Bad page state" [1] https://lkml.org/lkml/2018/5/3/1042 Signed-off-by: jia...@hxt-semitech.com Reviewed-by: Suzuki