lkml.org 
[lkml]   [2022]   [Jun]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/6] efi: Make efi_find_mirror() public
    Date
    From: Ma Wupeng <mawupeng1@huawei.com>

    Commit b05b9f5f9dcf ("x86, mirror: x86 enabling - find mirrored memory
    ranges") introduce the efi_find_mirror function on x86. In order to reuse
    the API we make it public in preparation for arm64 to support mirrord
    memory.

    Signed-off-by: Ma Wupeng <mawupeng1@huawei.com>
    Reviewed-by: Kefeng Wang <wangkefeng.wang@huawei.com>
    ---
    arch/x86/include/asm/efi.h | 4 ----
    arch/x86/platform/efi/efi.c | 23 -----------------------
    drivers/firmware/efi/efi.c | 23 +++++++++++++++++++++++
    include/linux/efi.h | 3 +++
    4 files changed, 26 insertions(+), 27 deletions(-)

    diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
    index 71943dce691e..eb90206eae80 100644
    --- a/arch/x86/include/asm/efi.h
    +++ b/arch/x86/include/asm/efi.h
    @@ -383,7 +383,6 @@ static inline bool efi_is_64bit(void)
    extern bool efi_reboot_required(void);
    extern bool efi_is_table_address(unsigned long phys_addr);

    -extern void efi_find_mirror(void);
    extern void efi_reserve_boot_services(void);
    #else
    static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {}
    @@ -395,9 +394,6 @@ static inline bool efi_is_table_address(unsigned long phys_addr)
    {
    return false;
    }
    -static inline void efi_find_mirror(void)
    -{
    -}
    static inline void efi_reserve_boot_services(void)
    {
    }
    diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
    index 1591d67e0bcd..6e598bd78eef 100644
    --- a/arch/x86/platform/efi/efi.c
    +++ b/arch/x86/platform/efi/efi.c
    @@ -108,29 +108,6 @@ static int __init setup_add_efi_memmap(char *arg)
    }
    early_param("add_efi_memmap", setup_add_efi_memmap);

    -void __init efi_find_mirror(void)
    -{
    - efi_memory_desc_t *md;
    - u64 mirror_size = 0, total_size = 0;
    -
    - if (!efi_enabled(EFI_MEMMAP))
    - return;
    -
    - for_each_efi_memory_desc(md) {
    - unsigned long long start = md->phys_addr;
    - unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
    -
    - total_size += size;
    - if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
    - memblock_mark_mirror(start, size);
    - mirror_size += size;
    - }
    - }
    - if (mirror_size)
    - pr_info("Memory: %lldM/%lldM mirrored memory\n",
    - mirror_size>>20, total_size>>20);
    -}
    -
    /*
    * Tell the kernel about the EFI memory map. This might include
    * more than the max 128 entries that can fit in the passed in e820
    diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
    index 860534bcfdac..79c232e07de7 100644
    --- a/drivers/firmware/efi/efi.c
    +++ b/drivers/firmware/efi/efi.c
    @@ -446,6 +446,29 @@ static int __init efisubsys_init(void)

    subsys_initcall(efisubsys_init);

    +void __init efi_find_mirror(void)
    +{
    + efi_memory_desc_t *md;
    + u64 mirror_size = 0, total_size = 0;
    +
    + if (!efi_enabled(EFI_MEMMAP))
    + return;
    +
    + for_each_efi_memory_desc(md) {
    + unsigned long long start = md->phys_addr;
    + unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
    +
    + total_size += size;
    + if (md->attribute & EFI_MEMORY_MORE_RELIABLE) {
    + memblock_mark_mirror(start, size);
    + mirror_size += size;
    + }
    + }
    + if (mirror_size)
    + pr_info("Memory: %lldM/%lldM mirrored memory\n",
    + mirror_size>>20, total_size>>20);
    +}
    +
    /*
    * Find the efi memory descriptor for a given physical address. Given a
    * physical address, determine if it exists within an EFI Memory Map entry,
    diff --git a/include/linux/efi.h b/include/linux/efi.h
    index 7d9b0bb47eb3..53f64c14a525 100644
    --- a/include/linux/efi.h
    +++ b/include/linux/efi.h
    @@ -872,6 +872,7 @@ static inline bool efi_rt_services_supported(unsigned int mask)
    {
    return (efi.runtime_supported_mask & mask) == mask;
    }
    +extern void efi_find_mirror(void);
    #else
    static inline bool efi_enabled(int feature)
    {
    @@ -889,6 +890,8 @@ static inline bool efi_rt_services_supported(unsigned int mask)
    {
    return false;
    }
    +
    +static inline void efi_find_mirror(void) {}
    #endif

    extern int efi_status_to_err(efi_status_t status);
    --
    2.25.1
    \
     
     \ /
      Last update: 2022-06-13 10:01    [W:3.256 / U:0.284 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site