Patchwork [2/2] grub-efi: allow compilation without large model support

login
register
mail settings
Submitter jackie huang
Date Nov. 20, 2013, 1:40 a.m.
Message ID <60e1553243c2b4d99fcb18246b516c1b4e03e2e9.1384854113.git.jackie.huang@windriver.com>
Download mbox | patch
Permalink /patch/62015/
State New
Headers show

Comments

jackie huang - Nov. 20, 2013, 1:40 a.m.
From: Jackie Huang <jackie.huang@windriver.com>

-mcmodel=large is not supported by gcc with version lower
than 4.4, but we don't need to use memory over 4GiB, so add
a patch to allow compilation without large model support.

Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
---
 ...allow-a-compilation-without-mcmodel-large.patch | 69 ++++++++++++++++++++++
 meta/recipes-bsp/grub/grub-efi_2.00.bb             |  1 +
 2 files changed, 70 insertions(+)
 create mode 100644 meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
Darren Hart - Nov. 22, 2013, 2:49 a.m.
On Wed, 2013-11-20 at 09:40 +0800, jackie.huang@windriver.com wrote:
> From: Jackie Huang <jackie.huang@windriver.com>
> 
> -mcmodel=large is not supported by gcc with version lower
> than 4.4, but we don't need to use memory over 4GiB, so add
> a patch to allow compilation without large model support.
> 
> Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
> ---
>  ...allow-a-compilation-without-mcmodel-large.patch | 69 ++++++++++++++++++++++
>  meta/recipes-bsp/grub/grub-efi_2.00.bb             |  1 +
>  2 files changed, 70 insertions(+)
>  create mode 100644 meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> 
> diff --git a/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> new file mode 100644
> index 0000000..b2be74a
> --- /dev/null
> +++ b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> @@ -0,0 +1,69 @@
> +From 0cea0e4266214da1f11e812834f5d5c47a6e04e6 Mon Sep 17 00:00:00 2001
> +From: Jackie Huang <jackie.huang@windriver.com>
> +Date: Tue, 5 Nov 2013 07:23:32 -0500
> +Subject: [PATCH] Allow a compilation without -mcmodel=large
> +
> +* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
> +  when compiled without -mcmodel=large
> +  (filter_memory_map): remove memory post 4 GiB when compiled
> +  without -mcmodel=large
> +* configure.ac: add -DMCMODEL_SMALL=1 to TARGET_CFLAGS when
> +  -mcmodel=large isn't supported
> +
> +Upstream-Status: Inappropriate [configuration]

Nice try ;-) This is compatibility, not configuration. If grub-efi
maintainers refuse to accept the patch that's up to them, but we need to
work upstream first. Please prepare a patch for upstream and submit it
for review.

--
Darren

> +
> +Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
> +---
> + configure.ac            |    4 +++-
> + grub-core/kern/efi/mm.c |    6 +++---
> + 2 files changed, 6 insertions(+), 4 deletions(-)
> +
> +diff --git a/configure.ac b/configure.ac
> +index 319d063..ee72fee 100644
> +--- a/configure.ac
> ++++ b/configure.ac
> +@@ -567,7 +567,9 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
> + 		      [grub_cv_cc_mcmodel=no])
> +   ])
> +   if test "x$grub_cv_cc_mcmodel" = xno; then
> +-    AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.])
> ++    CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
> ++    TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"
> ++    AC_MSG_WARN([-mcmodel=large not supported. You won't be able to use the memory over 4GiB. Upgrade your gcc.])
> +   else
> +     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
> +   fi
> +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
> +index a2edc84..c67dd13 100644
> +--- a/grub-core/kern/efi/mm.c
> ++++ b/grub-core/kern/efi/mm.c
> +@@ -62,7 +62,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
> +     return 0;
> + #endif
> +
> +-#if 1
> ++#if defined (MCMODEL_SMALL)
> +   if (address == 0)
> +     {
> +       type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
> +@@ -305,7 +305,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
> +        desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
> +     {
> +       if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
> +-#if 1
> ++#if defined (MCMODEL_SMALL)
> + 	  && desc->physical_start <= 0xffffffff
> + #endif
> + 	  && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
> +@@ -321,7 +321,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
> + 	      desc->physical_start = 0x100000;
> + 	    }
> +
> +-#if 1
> ++#if defined (MCMODEL_SMALL)
> + 	  if (BYTES_TO_PAGES (filtered_desc->physical_start)
> + 	      + filtered_desc->num_pages
> + 	      > BYTES_TO_PAGES (0x100000000LL))
> +--
> +1.7.1
> +
> diff --git a/meta/recipes-bsp/grub/grub-efi_2.00.bb b/meta/recipes-bsp/grub/grub-efi_2.00.bb
> index 2fe688c..deb9514 100644
> --- a/meta/recipes-bsp/grub/grub-efi_2.00.bb
> +++ b/meta/recipes-bsp/grub/grub-efi_2.00.bb
> @@ -27,6 +27,7 @@ SRC_URI = "ftp://ftp.gnu.org/gnu/grub/grub-${PV}.tar.gz \
>             file://grub-no-unused-result.patch \
>             file://grub-2.00-ignore-gnulib-gets-stupidity.patch \
>             file://fix-issue-with-flex-2.5.37.patch \
> +           file://grub-efi-allow-a-compilation-without-mcmodel-large.patch \
>            "
>  SRC_URI[md5sum] = "e927540b6eda8b024fb0391eeaa4091c"
>  SRC_URI[sha256sum] = "65b39a0558f8c802209c574f4d02ca263a804e8a564bc6caf1cd0fd3b3cc11e3"
jackie huang - Nov. 22, 2013, 3:37 a.m.
On 11/22/2013 10:49 AM, Darren Hart wrote:
> On Wed, 2013-11-20 at 09:40 +0800, jackie.huang@windriver.com wrote:
>> From: Jackie Huang <jackie.huang@windriver.com>
>>
>> -mcmodel=large is not supported by gcc with version lower
>> than 4.4, but we don't need to use memory over 4GiB, so add
>> a patch to allow compilation without large model support.
>>
>> Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
>> ---
>>   ...allow-a-compilation-without-mcmodel-large.patch | 69 ++++++++++++++++++++++
>>   meta/recipes-bsp/grub/grub-efi_2.00.bb             |  1 +
>>   2 files changed, 70 insertions(+)
>>   create mode 100644 meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>>
>> diff --git a/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>> new file mode 100644
>> index 0000000..b2be74a
>> --- /dev/null
>> +++ b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>> @@ -0,0 +1,69 @@
>> +From 0cea0e4266214da1f11e812834f5d5c47a6e04e6 Mon Sep 17 00:00:00 2001
>> +From: Jackie Huang <jackie.huang@windriver.com>
>> +Date: Tue, 5 Nov 2013 07:23:32 -0500
>> +Subject: [PATCH] Allow a compilation without -mcmodel=large
>> +
>> +* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
>> +  when compiled without -mcmodel=large
>> +  (filter_memory_map): remove memory post 4 GiB when compiled
>> +  without -mcmodel=large
>> +* configure.ac: add -DMCMODEL_SMALL=1 to TARGET_CFLAGS when
>> +  -mcmodel=large isn't supported
>> +
>> +Upstream-Status: Inappropriate [configuration]
>
> Nice try ;-) This is compatibility, not configuration. If grub-efi
> maintainers refuse to accept the patch that's up to them, but we need to

Actually it's ported from old version of grub which means that they 
allowed the comilation without large model support before, but not now. 
 From the Changelog, it was added in 2009:

2009-06-04  Vladimir Serbinenko  <phcoder@gmail.com>

         Allow a compilation without -mcmodel=large

         * kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
         when compiled without -mcmodel=large
         (filter_memory_map): remove memory post 4 GiB when compiled
         without -mcmodel=large
         * configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to
         TARGET_CFLAGS when -mcmodel=large isn't supported

but it was removed in 2010:
2010-04-21  Vladimir Serbinenko  <phcoder@gmail.com>

         * configure.ac: Refuse to compile for x86_64-efi is mcmodel=large
         is not supported.

So I think they may not accept this patch again.

Thanks,
Jackie

> work upstream first. Please prepare a patch for upstream and submit it
> for review.
>
> --
> Darren
>
>> +
>> +Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
>> +---
>> + configure.ac            |    4 +++-
>> + grub-core/kern/efi/mm.c |    6 +++---
>> + 2 files changed, 6 insertions(+), 4 deletions(-)
>> +
>> +diff --git a/configure.ac b/configure.ac
>> +index 319d063..ee72fee 100644
>> +--- a/configure.ac
>> ++++ b/configure.ac
>> +@@ -567,7 +567,9 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
>> + 		      [grub_cv_cc_mcmodel=no])
>> +   ])
>> +   if test "x$grub_cv_cc_mcmodel" = xno; then
>> +-    AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.])
>> ++    CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
>> ++    TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"
>> ++    AC_MSG_WARN([-mcmodel=large not supported. You won't be able to use the memory over 4GiB. Upgrade your gcc.])
>> +   else
>> +     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
>> +   fi
>> +diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
>> +index a2edc84..c67dd13 100644
>> +--- a/grub-core/kern/efi/mm.c
>> ++++ b/grub-core/kern/efi/mm.c
>> +@@ -62,7 +62,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
>> +     return 0;
>> + #endif
>> +
>> +-#if 1
>> ++#if defined (MCMODEL_SMALL)
>> +   if (address == 0)
>> +     {
>> +       type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
>> +@@ -305,7 +305,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
>> +        desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
>> +     {
>> +       if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
>> +-#if 1
>> ++#if defined (MCMODEL_SMALL)
>> + 	  && desc->physical_start <= 0xffffffff
>> + #endif
>> + 	  && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
>> +@@ -321,7 +321,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
>> + 	      desc->physical_start = 0x100000;
>> + 	    }
>> +
>> +-#if 1
>> ++#if defined (MCMODEL_SMALL)
>> + 	  if (BYTES_TO_PAGES (filtered_desc->physical_start)
>> + 	      + filtered_desc->num_pages
>> + 	      > BYTES_TO_PAGES (0x100000000LL))
>> +--
>> +1.7.1
>> +
>> diff --git a/meta/recipes-bsp/grub/grub-efi_2.00.bb b/meta/recipes-bsp/grub/grub-efi_2.00.bb
>> index 2fe688c..deb9514 100644
>> --- a/meta/recipes-bsp/grub/grub-efi_2.00.bb
>> +++ b/meta/recipes-bsp/grub/grub-efi_2.00.bb
>> @@ -27,6 +27,7 @@ SRC_URI = "ftp://ftp.gnu.org/gnu/grub/grub-${PV}.tar.gz \
>>              file://grub-no-unused-result.patch \
>>              file://grub-2.00-ignore-gnulib-gets-stupidity.patch \
>>              file://fix-issue-with-flex-2.5.37.patch \
>> +           file://grub-efi-allow-a-compilation-without-mcmodel-large.patch \
>>             "
>>   SRC_URI[md5sum] = "e927540b6eda8b024fb0391eeaa4091c"
>>   SRC_URI[sha256sum] = "65b39a0558f8c802209c574f4d02ca263a804e8a564bc6caf1cd0fd3b3cc11e3"
>
Darren Hart - Nov. 22, 2013, 5:04 a.m.
On Fri, 2013-11-22 at 11:37 +0800, jhuang0 wrote:
> 
> On 11/22/2013 10:49 AM, Darren Hart wrote:
> > On Wed, 2013-11-20 at 09:40 +0800, jackie.huang@windriver.com wrote:
> >> From: Jackie Huang <jackie.huang@windriver.com>
> >>
> >> -mcmodel=large is not supported by gcc with version lower
> >> than 4.4, but we don't need to use memory over 4GiB, so add
> >> a patch to allow compilation without large model support.
> >>
> >> Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
> >> ---
> >>   ...allow-a-compilation-without-mcmodel-large.patch | 69 ++++++++++++++++++++++
> >>   meta/recipes-bsp/grub/grub-efi_2.00.bb             |  1 +
> >>   2 files changed, 70 insertions(+)
> >>   create mode 100644 meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> >>
> >> diff --git a/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> >> new file mode 100644
> >> index 0000000..b2be74a
> >> --- /dev/null
> >> +++ b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
> >> @@ -0,0 +1,69 @@
> >> +From 0cea0e4266214da1f11e812834f5d5c47a6e04e6 Mon Sep 17 00:00:00 2001
> >> +From: Jackie Huang <jackie.huang@windriver.com>
> >> +Date: Tue, 5 Nov 2013 07:23:32 -0500
> >> +Subject: [PATCH] Allow a compilation without -mcmodel=large
> >> +
> >> +* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
> >> +  when compiled without -mcmodel=large
> >> +  (filter_memory_map): remove memory post 4 GiB when compiled
> >> +  without -mcmodel=large
> >> +* configure.ac: add -DMCMODEL_SMALL=1 to TARGET_CFLAGS when
> >> +  -mcmodel=large isn't supported
> >> +
> >> +Upstream-Status: Inappropriate [configuration]
> >
> > Nice try ;-) This is compatibility, not configuration. If grub-efi
> > maintainers refuse to accept the patch that's up to them, but we need to
> 
> Actually it's ported from old version of grub which means that they 
> allowed the comilation without large model support before, but not now. 
>  From the Changelog, it was added in 2009:
> 
> 2009-06-04  Vladimir Serbinenko  <phcoder@gmail.com>
> 
>          Allow a compilation without -mcmodel=large
> 
>          * kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
>          when compiled without -mcmodel=large
>          (filter_memory_map): remove memory post 4 GiB when compiled
>          without -mcmodel=large
>          * configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to
>          TARGET_CFLAGS when -mcmodel=large isn't supported
> 
> but it was removed in 2010:
> 2010-04-21  Vladimir Serbinenko  <phcoder@gmail.com>
> 
>          * configure.ac: Refuse to compile for x86_64-efi is mcmodel=large
>          is not supported.
> 
> So I think they may not accept this patch again.

It does appear to be a deliverate removale, fortunatley, you know
exactly who to Cc on the list now :-) It's worth shooting it off to the
list to see what they say. Either way, it is definitely not a
configuration patch.

--
Darren Hart
Intel Open Source Technology Center
Yocto Project - Linux Kernel
jackie huang - Nov. 22, 2013, 6:18 a.m.
On 11/22/2013 1:04 PM, Darren Hart wrote:
> On Fri, 2013-11-22 at 11:37 +0800, jhuang0 wrote:
>>
>> On 11/22/2013 10:49 AM, Darren Hart wrote:
>>> On Wed, 2013-11-20 at 09:40 +0800, jackie.huang@windriver.com wrote:
>>>> From: Jackie Huang <jackie.huang@windriver.com>
>>>>
>>>> -mcmodel=large is not supported by gcc with version lower
>>>> than 4.4, but we don't need to use memory over 4GiB, so add
>>>> a patch to allow compilation without large model support.
>>>>
>>>> Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
>>>> ---
>>>>    ...allow-a-compilation-without-mcmodel-large.patch | 69 ++++++++++++++++++++++
>>>>    meta/recipes-bsp/grub/grub-efi_2.00.bb             |  1 +
>>>>    2 files changed, 70 insertions(+)
>>>>    create mode 100644 meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>>>>
>>>> diff --git a/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>>>> new file mode 100644
>>>> index 0000000..b2be74a
>>>> --- /dev/null
>>>> +++ b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
>>>> @@ -0,0 +1,69 @@
>>>> +From 0cea0e4266214da1f11e812834f5d5c47a6e04e6 Mon Sep 17 00:00:00 2001
>>>> +From: Jackie Huang <jackie.huang@windriver.com>
>>>> +Date: Tue, 5 Nov 2013 07:23:32 -0500
>>>> +Subject: [PATCH] Allow a compilation without -mcmodel=large
>>>> +
>>>> +* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
>>>> +  when compiled without -mcmodel=large
>>>> +  (filter_memory_map): remove memory post 4 GiB when compiled
>>>> +  without -mcmodel=large
>>>> +* configure.ac: add -DMCMODEL_SMALL=1 to TARGET_CFLAGS when
>>>> +  -mcmodel=large isn't supported
>>>> +
>>>> +Upstream-Status: Inappropriate [configuration]
>>>
>>> Nice try ;-) This is compatibility, not configuration. If grub-efi
>>> maintainers refuse to accept the patch that's up to them, but we need to
>>
>> Actually it's ported from old version of grub which means that they
>> allowed the comilation without large model support before, but not now.
>>   From the Changelog, it was added in 2009:
>>
>> 2009-06-04  Vladimir Serbinenko  <phcoder@gmail.com>
>>
>>           Allow a compilation without -mcmodel=large
>>
>>           * kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
>>           when compiled without -mcmodel=large
>>           (filter_memory_map): remove memory post 4 GiB when compiled
>>           without -mcmodel=large
>>           * configure.ac: fail gracefully and add -DMCMODEL_SMALL=1 to
>>           TARGET_CFLAGS when -mcmodel=large isn't supported
>>
>> but it was removed in 2010:
>> 2010-04-21  Vladimir Serbinenko  <phcoder@gmail.com>
>>
>>           * configure.ac: Refuse to compile for x86_64-efi is mcmodel=large
>>           is not supported.
>>
>> So I think they may not accept this patch again.
>
> It does appear to be a deliverate removale, fortunatley, you know
> exactly who to Cc on the list now :-) It's worth shooting it off to the
> list to see what they say. Either way, it is definitely not a
> configuration patch.

Yes, I will change to compatibility in v4 and add Vladimir in cc list.

Thanks,
Jackie

>
> --
> Darren Hart
> Intel Open Source Technology Center
> Yocto Project - Linux Kernel
>
>
>
>

Patch

diff --git a/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
new file mode 100644
index 0000000..b2be74a
--- /dev/null
+++ b/meta/recipes-bsp/grub/files/grub-efi-allow-a-compilation-without-mcmodel-large.patch
@@ -0,0 +1,69 @@ 
+From 0cea0e4266214da1f11e812834f5d5c47a6e04e6 Mon Sep 17 00:00:00 2001
+From: Jackie Huang <jackie.huang@windriver.com>
+Date: Tue, 5 Nov 2013 07:23:32 -0500
+Subject: [PATCH] Allow a compilation without -mcmodel=large
+
+* kern/efi/mm.c (grub_efi_allocate_pages): don't allocate >4GiB
+  when compiled without -mcmodel=large
+  (filter_memory_map): remove memory post 4 GiB when compiled
+  without -mcmodel=large
+* configure.ac: add -DMCMODEL_SMALL=1 to TARGET_CFLAGS when
+  -mcmodel=large isn't supported
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ configure.ac            |    4 +++-
+ grub-core/kern/efi/mm.c |    6 +++---
+ 2 files changed, 6 insertions(+), 4 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 319d063..ee72fee 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -567,7 +567,9 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
+ 		      [grub_cv_cc_mcmodel=no])
+   ])
+   if test "x$grub_cv_cc_mcmodel" = xno; then
+-    AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.])
++    CFLAGS="$SAVED_CFLAGS -m64 -DMCMODEL_SMALL=1"
++    TARGET_CFLAGS="$TARGET_CFLAGS -DMCMODEL_SMALL=1"
++    AC_MSG_WARN([-mcmodel=large not supported. You won't be able to use the memory over 4GiB. Upgrade your gcc.])
+   else
+     TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
+   fi
+diff --git a/grub-core/kern/efi/mm.c b/grub-core/kern/efi/mm.c
+index a2edc84..c67dd13 100644
+--- a/grub-core/kern/efi/mm.c
++++ b/grub-core/kern/efi/mm.c
+@@ -62,7 +62,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
+     return 0;
+ #endif
+
+-#if 1
++#if defined (MCMODEL_SMALL)
+   if (address == 0)
+     {
+       type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
+@@ -305,7 +305,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
+        desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size))
+     {
+       if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
+-#if 1
++#if defined (MCMODEL_SMALL)
+ 	  && desc->physical_start <= 0xffffffff
+ #endif
+ 	  && desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
+@@ -321,7 +321,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
+ 	      desc->physical_start = 0x100000;
+ 	    }
+
+-#if 1
++#if defined (MCMODEL_SMALL)
+ 	  if (BYTES_TO_PAGES (filtered_desc->physical_start)
+ 	      + filtered_desc->num_pages
+ 	      > BYTES_TO_PAGES (0x100000000LL))
+--
+1.7.1
+
diff --git a/meta/recipes-bsp/grub/grub-efi_2.00.bb b/meta/recipes-bsp/grub/grub-efi_2.00.bb
index 2fe688c..deb9514 100644
--- a/meta/recipes-bsp/grub/grub-efi_2.00.bb
+++ b/meta/recipes-bsp/grub/grub-efi_2.00.bb
@@ -27,6 +27,7 @@  SRC_URI = "ftp://ftp.gnu.org/gnu/grub/grub-${PV}.tar.gz \
            file://grub-no-unused-result.patch \
            file://grub-2.00-ignore-gnulib-gets-stupidity.patch \
            file://fix-issue-with-flex-2.5.37.patch \
+           file://grub-efi-allow-a-compilation-without-mcmodel-large.patch \
           "
 SRC_URI[md5sum] = "e927540b6eda8b024fb0391eeaa4091c"
 SRC_URI[sha256sum] = "65b39a0558f8c802209c574f4d02ca263a804e8a564bc6caf1cd0fd3b3cc11e3"