On Mon, Dec 09, 2013 at 10:17:20PM +0100, Leif Lindholm wrote:
> On Mon, Dec 09, 2013 at 08:08:39PM +0100, Vladimir 'φ-coder/phcoder' 
> Serbinenko wrote:
> > > A simple fix would be to just stack the ifdefs, but a better one might
> > > be to move the define to one of <cpu/efi/memory.h> (which is currently
> > > a dummy for all platforms, simply including <efi/memory.h>) or types.h.
> > > 
> > cpu/efi/memory.h is a possibility. cpu/types.h isn't because it's, at
> > least partially, EFI limitation (due to EFI bugs), not CPU.
> 
> Ah, ok - that makes sense then.

How about the attached?

Compile tested for arm/arm64/i386/x86_64, runtime tested on arm64.

/
    Leif
>From 85e5e8576e944c2c7fb5d910f1b739e37f90d9ec Mon Sep 17 00:00:00 2001
From: Leif Lindholm <leif.lindh...@linaro.org>
Date: Tue, 10 Dec 2013 12:24:57 +0000
Subject: [PATCH] efi: mm: make MAX_USABLE_ADDRESS platform-specific

---
 ChangeLog                        |    5 +++++
 grub-core/kern/efi/mm.c          |   12 ++++--------
 include/grub/arm/efi/memory.h    |    5 +++++
 include/grub/arm64/efi/memory.h  |    5 +++++
 include/grub/i386/efi/memory.h   |    5 +++++
 include/grub/ia64/efi/memory.h   |    5 +++++
 include/grub/x86_64/efi/memory.h |    9 +++++++++
 7 files changed, 38 insertions(+), 8 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index aa4c05c..fef366a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2013-12-10  Leif Lindholm <leif.lindh...@linaro.org>
+
+	* make MAX_USABLE_ADDRESS platform-specific
+	* grub-core/kern/efi/mm.c: add Vladimir's new BYTES_TO_PAGES_DOWN macro.
+
 2013-12-09  Jon McCune <jonmcc...@google.com>
 
 	* Add --no-rs-codes flag to optionally disable reed-solomon codes
diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
index 6e9dace..3ba69f8 100644
--- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c
@@ -21,6 +21,7 @@
 #include <grub/mm.h>
 #include <grub/efi/api.h>
 #include <grub/efi/efi.h>
+#include <grub/cpu/efi/memory.h>
 
 #if defined (__i386__) || defined (__x86_64__)
 #include <grub/pci.h>
@@ -30,14 +31,9 @@
   ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size)))
 
 #define BYTES_TO_PAGES(bytes)	(((bytes) + 0xfff) >> 12)
+#define BYTES_TO_PAGES_DOWN(bytes)	((bytes) >> 12)
 #define PAGES_TO_BYTES(pages)	((pages) << 12)
 
-#if defined (__code_model_large__) || !defined (__x86_64__)
-#define MAX_USABLE_ADDRESS 0xffffffff
-#else
-#define MAX_USABLE_ADDRESS 0x7fffffff
-#endif
-
 /* The size of a memory map obtained from the firmware. This must be
    a multiplier of 4KB.  */
 #define MEMORY_MAP_SIZE	0x3000
@@ -343,9 +339,9 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
 #if 1
 	  if (BYTES_TO_PAGES (filtered_desc->physical_start)
 	      + filtered_desc->num_pages
-	      > BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL))
+	      > BYTES_TO_PAGES_DOWN (MAX_USABLE_ADDRESS))
 	    filtered_desc->num_pages
-	      = (BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL)
+	      = (BYTES_TO_PAGES_DOWN (MAX_USABLE_ADDRESS)
 		 - BYTES_TO_PAGES (filtered_desc->physical_start));
 #endif
 
diff --git a/include/grub/arm/efi/memory.h b/include/grub/arm/efi/memory.h
index c9a61bb..1968b3b 100644
--- a/include/grub/arm/efi/memory.h
+++ b/include/grub/arm/efi/memory.h
@@ -1 +1,6 @@
+#ifndef GRUB_MEMORY_CPU_HEADER
 #include <grub/efi/memory.h>
+
+#define MAX_USABLE_ADDRESS 0xffffffff
+
+#endif /* ! GRUB_MEMORY_CPU_HEADER */
diff --git a/include/grub/arm64/efi/memory.h b/include/grub/arm64/efi/memory.h
index c9a61bb..8340083 100644
--- a/include/grub/arm64/efi/memory.h
+++ b/include/grub/arm64/efi/memory.h
@@ -1 +1,6 @@
+#ifndef GRUB_MEMORY_CPU_HEADER
 #include <grub/efi/memory.h>
+
+#define MAX_USABLE_ADDRESS 0xffffffffffffULL
+
+#endif /* ! GRUB_MEMORY_CPU_HEADER */
diff --git a/include/grub/i386/efi/memory.h b/include/grub/i386/efi/memory.h
index c9a61bb..1968b3b 100644
--- a/include/grub/i386/efi/memory.h
+++ b/include/grub/i386/efi/memory.h
@@ -1 +1,6 @@
+#ifndef GRUB_MEMORY_CPU_HEADER
 #include <grub/efi/memory.h>
+
+#define MAX_USABLE_ADDRESS 0xffffffff
+
+#endif /* ! GRUB_MEMORY_CPU_HEADER */
diff --git a/include/grub/ia64/efi/memory.h b/include/grub/ia64/efi/memory.h
index c9a61bb..1968b3b 100644
--- a/include/grub/ia64/efi/memory.h
+++ b/include/grub/ia64/efi/memory.h
@@ -1 +1,6 @@
+#ifndef GRUB_MEMORY_CPU_HEADER
 #include <grub/efi/memory.h>
+
+#define MAX_USABLE_ADDRESS 0xffffffff
+
+#endif /* ! GRUB_MEMORY_CPU_HEADER */
diff --git a/include/grub/x86_64/efi/memory.h b/include/grub/x86_64/efi/memory.h
index c9a61bb..ed1e640 100644
--- a/include/grub/x86_64/efi/memory.h
+++ b/include/grub/x86_64/efi/memory.h
@@ -1 +1,10 @@
+#ifndef GRUB_MEMORY_CPU_HEADER
 #include <grub/efi/memory.h>
+
+#if defined (__code_model_large__)
+#define MAX_USABLE_ADDRESS 0xffffffff
+#else
+#define MAX_USABLE_ADDRESS 0x7fffffff
+#endif
+
+#endif /* ! GRUB_MEMORY_CPU_HEADER */
-- 
1.7.10.4

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to