• Baoquan He's avatar
    arm64: kdump : take off the protection on crashkernel memory region · 0d124e96
    Baoquan He authored
    Problem:
    =======
    On arm64, block and section mapping is supported to build page tables.
    However, currently it enforces to take base page mapping for the whole
    linear mapping if CONFIG_ZONE_DMA or CONFIG_ZONE_DMA32 is enabled and
    crashkernel kernel parameter is set. This will cause longer time of the
    linear mapping process during bootup and severe performance degradation
    during running time.
    
    Root cause:
    ==========
    On arm64, crashkernel reservation relies on knowing the upper limit of
    low memory zone because it needs to reserve memory in the zone so that
    devices' DMA addressing in kdump kernel can be satisfied. However, the
    upper limit of low memory on arm64 is variant. And the upper limit can
    only be decided late till bootmem_init() is called [1].
    
    And we need to map the crashkernel region with base page granularity when
    doing linear mapping, because kdump needs to protect the crashkernel region
    via set_memory_valid(,0) after kdump kernel loading. However, arm64 doesn't
    support well on splitting the built block or section mapping due to some
    cpu reststriction [2]. And unfortunately, the linear mapping is done before
    bootmem_init().
    
    To resolve the above conflict on arm64, the compromise is enforcing to
    take base page mapping for the entire linear mapping if crashkernel is
    set, and CONFIG_ZONE_DMA or CONFIG_ZONE_DMA32 is enabed. Hence
    performance is sacrificed.
    
    Solution:
    =========
    Comparing with the base page mapping for the whole linear region, it's
    better to take off the protection on crashkernel memory region for the
    time being because the anticipated stamping on crashkernel memory region
    could only happen in a chance in one million, while the base page mapping
    for the whole linear region is mitigating arm64 systems with crashkernel
    set always.
    
    [1]
    https://lore.kernel.org/all/YrIIJkhKWSuAqkCx@arm.com/T/#u
    
    [2]
    https://lore.kernel.org/linux-arm-kernel/20190911182546.17094-1-nsaenzjulienne@suse.de/T/Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Acked-by: default avatarMike Rapoport (IBM) <rppt@kernel.org>
    Reviewed-by: default avatarZhen Lei <thunder.leizhen@huawei.com>
    Link: https://lore.kernel.org/r/20230407011507.17572-2-bhe@redhat.comSigned-off-by: default avatarWill Deacon <will@kernel.org>
    0d124e96
kexec.h 3.37 KB