• Anshuman Khandual's avatar
    mm/memory_hotplug: prevalidate the address range being added with platform · bca3feaa
    Anshuman Khandual authored
    Patch series "mm/memory_hotplug: Pre-validate the address range with platform", v5.
    
    This series adds a mechanism allowing platforms to weigh in and
    prevalidate incoming address range before proceeding further with the
    memory hotplug.  This helps prevent potential platform errors for the
    given address range, down the hotplug call chain, which inevitably fails
    the hotplug itself.
    
    This mechanism was suggested by David Hildenbrand during another
    discussion with respect to a memory hotplug fix on arm64 platform.
    
    https://lore.kernel.org/linux-arm-kernel/1600332402-30123-1-git-send-email-anshuman.khandual@arm.com/
    
    This mechanism focuses on the addressibility aspect and not [sub] section
    alignment aspect.  Hence check_hotplug_memory_range() and check_pfn_span()
    have been left unchanged.
    
    This patch (of 4):
    
    This introduces mhp_range_allowed() which can be called in various memory
    hotplug paths to prevalidate the address range which is being added, with
    the platform.  Then mhp_range_allowed() calls mhp_get_pluggable_range()
    which provides applicable address range depending on whether linear
    mapping is required or not.  For ranges that require linear mapping, it
    calls a new arch callback arch_get_mappable_range() which the platform can
    override.  So the new callback, in turn provides the platform an
    opportunity to configure acceptable memory hotplug address ranges in case
    there are constraints.
    
    This mechanism will help prevent platform specific errors deep down during
    hotplug calls.  This drops now redundant
    check_hotplug_memory_addressable() check in __add_pages() but instead adds
    a VM_BUG_ON() check which would ensure that the range has been validated
    with mhp_range_allowed() earlier in the call chain.  Besides
    mhp_get_pluggable_range() also can be used by potential memory hotplug
    callers to avail the allowed physical range which would go through on a
    given platform.
    
    This does not really add any new range check in generic memory hotplug but
    instead compensates for lost checks in arch_add_memory() where applicable
    and check_hotplug_memory_addressable(), with unified mhp_range_allowed().
    
    [akpm@linux-foundation.org: make pagemap_range() return -EINVAL when mhp_range_allowed() fails]
    
    Link: https://lkml.kernel.org/r/1612149902-7867-1-git-send-email-anshuman.khandual@arm.com
    Link: https://lkml.kernel.org/r/1612149902-7867-2-git-send-email-anshuman.khandual@arm.comSigned-off-by: default avatarAnshuman Khandual <anshuman.khandual@arm.com>
    Suggested-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarDavid Hildenbrand <david@redhat.com>
    Reviewed-by: default avatarOscar Salvador <osalvador@suse.de>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Vasily Gorbik <gor@linux.ibm.com> # s390
    Cc: Will Deacon <will@kernel.org>
    Cc: Ard Biesheuvel <ardb@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Jason Wang <jasowang@redhat.com>
    Cc: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Cc: "Michael S. Tsirkin" <mst@redhat.com>
    Cc: Michal Hocko <mhocko@kernel.org>
    Cc: Pankaj Gupta <pankaj.gupta@cloud.ionos.com>
    Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
    Cc: teawater <teawaterz@linux.alibaba.com>
    Cc: Wei Yang <richard.weiyang@linux.alibaba.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    bca3feaa
memory_hotplug.c 53.8 KB