dcavalca / rpms / grub2

Forked from rpms/grub2 3 years ago
Clone

Blame SOURCES/0195-efiemu-Handle-persistent-RAM-and-unknown-possible-fu.patch

23d2ea
From 33f78043a7e610ed030dfa4a2d58f53df73d9117 Mon Sep 17 00:00:00 2001
23d2ea
From: Robert Elliott <elliott@hpe.com>
23d2ea
Date: Fri, 22 Jan 2016 13:32:30 +0100
23d2ea
Subject: [PATCH 195/198] efiemu: Handle persistent RAM and unknown possible
23d2ea
 future additions.
23d2ea
23d2ea
(cherry picked from commit ae3b83a4d4df75a01198a2fed7542391e7c449e0)
23d2ea
23d2ea
Resolves: rhbz#1288608
23d2ea
---
23d2ea
 grub-core/efiemu/mm.c | 25 ++++++++++++++++++++++---
23d2ea
 1 file changed, 22 insertions(+), 3 deletions(-)
23d2ea
23d2ea
diff --git a/grub-core/efiemu/mm.c b/grub-core/efiemu/mm.c
23d2ea
index d4a4f3a..13af4ad 100644
23d2ea
--- a/grub-core/efiemu/mm.c
23d2ea
+++ b/grub-core/efiemu/mm.c
23d2ea
@@ -99,7 +99,8 @@ grub_efiemu_request_memalign (grub_size_t align, grub_size_t size,
23d2ea
   grub_size_t align_overhead;
23d2ea
   struct grub_efiemu_memrequest *ret, *cur, *prev;
23d2ea
   /* Check that the request is correct */
23d2ea
-  if (type >= GRUB_EFI_MAX_MEMORY_TYPE || type <= GRUB_EFI_LOADER_CODE)
23d2ea
+  if (type <= GRUB_EFI_LOADER_CODE || type == GRUB_EFI_PERSISTENT_MEMORY ||
23d2ea
+	type >= GRUB_EFI_MAX_MEMORY_TYPE)
23d2ea
     return -2;
23d2ea
 
23d2ea
   /* Add new size to requested size */
23d2ea
@@ -166,6 +167,13 @@ efiemu_alloc_requests (void)
23d2ea
       GRUB_EFI_MEMORY_MAPPED_IO,
23d2ea
       GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
23d2ea
       GRUB_EFI_PAL_CODE
23d2ea
+
23d2ea
+      /*
23d2ea
+       * These are not allocatable:
23d2ea
+       * GRUB_EFI_RESERVED_MEMORY_TYPE
23d2ea
+       * GRUB_EFI_PERSISTENT_MEMORY
23d2ea
+       * >= GRUB_EFI_MAX_MEMORY_TYPE
23d2ea
+       */
23d2ea
     };
23d2ea
 
23d2ea
   /* Compute total memory needed */
23d2ea
@@ -402,6 +410,10 @@ fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type,
23d2ea
 	return grub_efiemu_add_to_mmap (addr, size,
23d2ea
 					GRUB_EFI_ACPI_MEMORY_NVS);
23d2ea
 
23d2ea
+      case GRUB_MEMORY_PRAM:
23d2ea
+      case GRUB_MEMORY_PMEM:
23d2ea
+	return grub_efiemu_add_to_mmap (addr, size,
23d2ea
+					GRUB_EFI_PERSISTENT_MEMORY);
23d2ea
       default:
23d2ea
 	grub_dprintf ("efiemu",
23d2ea
 		      "Unknown memory type %d. Assuming unusable\n", type);
23d2ea
@@ -445,7 +457,7 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
23d2ea
       case GRUB_EFI_MEMORY_MAPPED_IO:
23d2ea
       case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
23d2ea
       case GRUB_EFI_PAL_CODE:
23d2ea
-      case GRUB_EFI_MAX_MEMORY_TYPE:
23d2ea
+      default:
23d2ea
 	hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
23d2ea
 	      GRUB_MEMORY_RESERVED, hook_data);
23d2ea
 	break;
23d2ea
@@ -468,6 +480,12 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
23d2ea
 	hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
23d2ea
 	      GRUB_MEMORY_NVS, hook_data);
23d2ea
 	break;
23d2ea
+
23d2ea
+      case GRUB_EFI_PERSISTENT_MEMORY:
23d2ea
+	hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
23d2ea
+	      GRUB_MEMORY_PMEM, hook_data);
23d2ea
+	break;
23d2ea
+
23d2ea
       }
23d2ea
 
23d2ea
   return 0;
23d2ea
@@ -503,7 +521,8 @@ grub_efiemu_mmap_sort_and_uniq (void)
23d2ea
       [GRUB_EFI_ACPI_MEMORY_NVS] = 3,
23d2ea
       [GRUB_EFI_MEMORY_MAPPED_IO] = 4,
23d2ea
       [GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4,
23d2ea
-      [GRUB_EFI_PAL_CODE] = 4
23d2ea
+      [GRUB_EFI_PAL_CODE] = 4,
23d2ea
+      [GRUB_EFI_PERSISTENT_MEMORY] = 4
23d2ea
     };
23d2ea
 
23d2ea
   int i, j, k, done;
23d2ea
-- 
23d2ea
2.7.4
23d2ea