Re: [PATCH v2 1/2] KVM: arm/arm64: add WARN_ON if size is not PAGE_SIZE aligned in unmap_stage2_range

2018-06-07 Thread Jia He
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

2018-05-18 Thread Jia He
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