efi/esrt: Use efi_mem_reserve() and avoid a kmalloc()
[cascardo/linux.git] / drivers / firmware / efi / esrt.c
index 75feb3f..b93cd11 100644 (file)
@@ -235,7 +235,7 @@ static struct attribute_group esrt_attr_group = {
 };
 
 /*
- * remap the table, copy it to kmalloced pages, and unmap it.
+ * remap the table, validate it, mark it reserved and unmap it.
  */
 void __init efi_esrt_init(void)
 {
@@ -335,7 +335,7 @@ void __init efi_esrt_init(void)
 
        end = esrt_data + size;
        pr_info("Reserving ESRT space from %pa to %pa.\n", &esrt_data, &end);
-       memblock_reserve(esrt_data, esrt_data_size);
+       efi_mem_reserve(esrt_data, esrt_data_size);
 
        pr_debug("esrt-init: loaded.\n");
 err_memunmap:
@@ -382,28 +382,18 @@ static void cleanup_entry_list(void)
 static int __init esrt_sysfs_init(void)
 {
        int error;
-       struct efi_system_resource_table __iomem *ioesrt;
 
        pr_debug("esrt-sysfs: loading.\n");
        if (!esrt_data || !esrt_data_size)
                return -ENOSYS;
 
-       ioesrt = ioremap(esrt_data, esrt_data_size);
-       if (!ioesrt) {
+       esrt = ioremap(esrt_data, esrt_data_size);
+       if (!esrt) {
                pr_err("ioremap(%pa, %zu) failed.\n", &esrt_data,
                       esrt_data_size);
                return -ENOMEM;
        }
 
-       esrt = kmalloc(esrt_data_size, GFP_KERNEL);
-       if (!esrt) {
-               pr_err("kmalloc failed. (wanted %zu bytes)\n", esrt_data_size);
-               iounmap(ioesrt);
-               return -ENOMEM;
-       }
-
-       memcpy_fromio(esrt, ioesrt, esrt_data_size);
-
        esrt_kobj = kobject_create_and_add("esrt", efi_kobj);
        if (!esrt_kobj) {
                pr_err("Firmware table registration failed.\n");
@@ -429,8 +419,6 @@ static int __init esrt_sysfs_init(void)
        if (error)
                goto err_cleanup_list;
 
-       memblock_remove(esrt_data, esrt_data_size);
-
        pr_debug("esrt-sysfs: loaded.\n");
 
        return 0;