Loading drivers/firmware/efi/efi.c +26 −10 Original line number Diff line number Diff line Loading @@ -969,13 +969,33 @@ bool efi_is_table_address(unsigned long phys_addr) static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init; int efi_mem_reserve_persistent(phys_addr_t addr, u64 size) static int __init efi_memreserve_map_root(void) { if (efi.mem_reserve == EFI_INVALID_TABLE_ADDR) return -ENODEV; efi_memreserve_root = memremap(efi.mem_reserve, sizeof(*efi_memreserve_root), MEMREMAP_WB); if (WARN_ON_ONCE(!efi_memreserve_root)) return -ENOMEM; return 0; } int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) { struct linux_efi_memreserve *rsv; int rc; if (!efi_memreserve_root) if (efi_memreserve_root == (void *)ULONG_MAX) return -ENODEV; if (!efi_memreserve_root) { rc = efi_memreserve_map_root(); if (rc) return rc; } rsv = kmalloc(sizeof(*rsv), GFP_ATOMIC); if (!rsv) return -ENOMEM; Loading @@ -993,14 +1013,10 @@ int efi_mem_reserve_persistent(phys_addr_t addr, u64 size) static int __init efi_memreserve_root_init(void) { if (efi.mem_reserve == EFI_INVALID_TABLE_ADDR) return -ENODEV; efi_memreserve_root = memremap(efi.mem_reserve, sizeof(*efi_memreserve_root), MEMREMAP_WB); if (!efi_memreserve_root) return -ENOMEM; if (efi_memreserve_root) return 0; if (efi_memreserve_map_root()) efi_memreserve_root = (void *)ULONG_MAX; return 0; } early_initcall(efi_memreserve_root_init); Loading Loading
drivers/firmware/efi/efi.c +26 −10 Original line number Diff line number Diff line Loading @@ -969,13 +969,33 @@ bool efi_is_table_address(unsigned long phys_addr) static DEFINE_SPINLOCK(efi_mem_reserve_persistent_lock); static struct linux_efi_memreserve *efi_memreserve_root __ro_after_init; int efi_mem_reserve_persistent(phys_addr_t addr, u64 size) static int __init efi_memreserve_map_root(void) { if (efi.mem_reserve == EFI_INVALID_TABLE_ADDR) return -ENODEV; efi_memreserve_root = memremap(efi.mem_reserve, sizeof(*efi_memreserve_root), MEMREMAP_WB); if (WARN_ON_ONCE(!efi_memreserve_root)) return -ENOMEM; return 0; } int __ref efi_mem_reserve_persistent(phys_addr_t addr, u64 size) { struct linux_efi_memreserve *rsv; int rc; if (!efi_memreserve_root) if (efi_memreserve_root == (void *)ULONG_MAX) return -ENODEV; if (!efi_memreserve_root) { rc = efi_memreserve_map_root(); if (rc) return rc; } rsv = kmalloc(sizeof(*rsv), GFP_ATOMIC); if (!rsv) return -ENOMEM; Loading @@ -993,14 +1013,10 @@ int efi_mem_reserve_persistent(phys_addr_t addr, u64 size) static int __init efi_memreserve_root_init(void) { if (efi.mem_reserve == EFI_INVALID_TABLE_ADDR) return -ENODEV; efi_memreserve_root = memremap(efi.mem_reserve, sizeof(*efi_memreserve_root), MEMREMAP_WB); if (!efi_memreserve_root) return -ENOMEM; if (efi_memreserve_root) return 0; if (efi_memreserve_map_root()) efi_memreserve_root = (void *)ULONG_MAX; return 0; } early_initcall(efi_memreserve_root_init); Loading