All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Unable to boot very old Linux kernels
@ 2014-03-17 22:15 Piotr Krysiuk
  2014-03-23 19:09 ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 1 reply; 5+ messages in thread
From: Piotr Krysiuk @ 2014-03-17 22:15 UTC (permalink / raw)
  To: grub-devel; +Cc: Piotr Krysiuk

Hi,

I occasionally need to boot a very old Linux kernel.

This works fine with old versions of GRUB, from before relocator was
introduced. However the kernel cannot be started by recent versions
of GRUB - machine simply restarts as soon as GRUB passes control to
Linux. As mentioned above this affects very old Linux only, so very
few users (if any) would care. But as I have a patch, here it is.

I tracked the issues to code initializing BSS that is used by old
Linux kernels. See code following "Clear BSS" on
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/x86_64/boot/compressed/head.S?h=linux-2.6.17.y#n57

AFAIK old Linux kernels do not provide information allowing boot
loader to determine end of BSS. As the consequence, current GRUB
may place GPT in the area overlapping with BSS sections of old
Linux kernels. The location of GPT was changed at the same time
when relocator was added, introducing regression.

In order to improve compatibility with these old kernels, we could
switch back to old strategy and simply place GPT close to end of
physical memory.

Best regards,

Piotr Krysiuk
---
 ChangeLog                      |    5 +++++
 grub-core/lib/i386/relocator.c |    2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/ChangeLog b/ChangeLog
index 770269c..5a91e5e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2014-03-17  Piotr Krysiuk  <piotras@gmail.com>
+
+	* grub-core/lib/i386/relocator.c: Moved GDT to end of physical memory
+	to avoid collision with old Linux BSS.
+
 2014-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
 
 	* include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
index d2a1b27..523f669 100644
--- a/grub-core/lib/i386/relocator.c
+++ b/grub-core/lib/i386/relocator.c
@@ -84,7 +84,7 @@ grub_relocator32_boot (struct grub_relocator *rel,
   err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
 					  (0xffffffff - RELOCATOR_SIZEOF (32))
 					  + 1, RELOCATOR_SIZEOF (32), 16,
-					  GRUB_RELOCATOR_PREFERENCE_NONE,
+					  GRUB_RELOCATOR_PREFERENCE_HIGH,
 					  avoid_efi_bootservices);
   if (err)
     return err;
-- 
1.7.9.5



^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] Unable to boot very old Linux kernels
  2014-03-17 22:15 [PATCH] Unable to boot very old Linux kernels Piotr Krysiuk
@ 2014-03-23 19:09 ` Vladimir 'φ-coder/phcoder' Serbinenko
  2014-03-23 22:50   ` Piotras
  0 siblings, 1 reply; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2014-03-23 19:09 UTC (permalink / raw)
  To: grub-devel

[-- Attachment #1: Type: text/plain, Size: 2651 bytes --]

On 17.03.2014 23:15, Piotr Krysiuk wrote:
> Hi,
> 
> I occasionally need to boot a very old Linux kernel.
> 
> This works fine with old versions of GRUB, from before relocator was
> introduced. However the kernel cannot be started by recent versions
> of GRUB - machine simply restarts as soon as GRUB passes control to
> Linux. As mentioned above this affects very old Linux only, so very
> few users (if any) would care. But as I have a patch, here it is.
> 
> I tracked the issues to code initializing BSS that is used by old
> Linux kernels. See code following "Clear BSS" on
> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/x86_64/boot/compressed/head.S?h=linux-2.6.17.y#n57
> 
> AFAIK old Linux kernels do not provide information allowing boot
> loader to determine end of BSS. As the consequence, current GRUB
> may place GPT in the area overlapping with BSS sections of old
> Linux kernels. The location of GPT was changed at the same time
> when relocator was added, introducing regression.
> 
Top of memory doesn't sound like a right place. Could you try with

>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>  					  (0xa0000 - RELOCATOR_SIZEOF (32)), ...
This will put GDT in low memory

> In order to improve compatibility with these old kernels, we could
> switch back to old strategy and simply place GPT close to end of
> physical memory.
> 
> Best regards,
> 
> Piotr Krysiuk
> ---
>  ChangeLog                      |    5 +++++
>  grub-core/lib/i386/relocator.c |    2 +-
>  2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/ChangeLog b/ChangeLog
> index 770269c..5a91e5e 100644
> --- a/ChangeLog
> +++ b/ChangeLog
> @@ -1,3 +1,8 @@
> +2014-03-17  Piotr Krysiuk  <piotras@gmail.com>
> +
> +	* grub-core/lib/i386/relocator.c: Moved GDT to end of physical memory
> +	to avoid collision with old Linux BSS.
> +
>  2014-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
>  
>  	* include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
> diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
> index d2a1b27..523f669 100644
> --- a/grub-core/lib/i386/relocator.c
> +++ b/grub-core/lib/i386/relocator.c
> @@ -84,7 +84,7 @@ grub_relocator32_boot (struct grub_relocator *rel,
>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>  					  (0xffffffff - RELOCATOR_SIZEOF (32))
>  					  + 1, RELOCATOR_SIZEOF (32), 16,
> -					  GRUB_RELOCATOR_PREFERENCE_NONE,
> +					  GRUB_RELOCATOR_PREFERENCE_HIGH,
>  					  avoid_efi_bootservices);
>    if (err)
>      return err;
> 



[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 274 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] Unable to boot very old Linux kernels
  2014-03-23 19:09 ` Vladimir 'φ-coder/phcoder' Serbinenko
@ 2014-03-23 22:50   ` Piotras
  2014-03-23 23:16     ` Fwd: " Piotras
  2014-03-24  6:45     ` Vladimir 'φ-coder/phcoder' Serbinenko
  0 siblings, 2 replies; 5+ messages in thread
From: Piotras @ 2014-03-23 22:50 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 5094 bytes --]

Hi,

Tested suggested parameters under Qemu, so calling
grub_relocator_alloc_chunk_align with following:
  max_addr = (0xa0000 - RELOCATOR_SIZEOF (32)) + 1
  preference = GRUB_RELOCATOR_PREFERENCE_LOW

This fails to allocate from low memory and falls back to top of
physical memory, ignoring preference. Relevant part of debug log for
relocator (full log included as attachment):
  lib/relocator.c:434: trying to allocate in 0x1000-0x9ff31 aligned
0x10 size 0xd0
  lib/relocator.c:1411: Adjusted limits from 1000-9ff31 to 0-100000
  lib/relocator.c:434: trying to allocate in 0x0-0x100000 aligned 0x10 size 0xd0
  lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff
aligned 0x1 size 0xd0
  lib/relocator.c:1186: allocated: 0x3fff7c20+0xd0

See malloc_in_range calls in grub_relocator_alloc_chunk_align to see
why preference is ignored after first failure. Looking at
malloc_in_range, I don't see any events to explain why allocation in
range 0x1000..0x9ff31 fails. I can try to debug this later this week.


Regards,

Piotr


My code for reference:

diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
index d2a1b27..e9ab529 100644
--- a/grub-core/lib/i386/relocator.c
+++ b/grub-core/lib/i386/relocator.c
@@ -82,9 +82,9 @@ grub_relocator32_boot (struct grub_relocator *rel,
   grub_relocator_chunk_t ch;

   err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
-                                         (0xffffffff - RELOCATOR_SIZEOF (32))
+                                         (0xa0000 - RELOCATOR_SIZEOF (32))
                                          + 1, RELOCATOR_SIZEOF (32), 16,
-                                         GRUB_RELOCATOR_PREFERENCE_NONE,
+                                         GRUB_RELOCATOR_PREFERENCE_LOW,
                                          avoid_efi_bootservices);
   if (err)
     return err;

On Sun, Mar 23, 2014 at 7:09 PM, Vladimir 'φ-coder/phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> On 17.03.2014 23:15, Piotr Krysiuk wrote:
>> Hi,
>>
>> I occasionally need to boot a very old Linux kernel.
>>
>> This works fine with old versions of GRUB, from before relocator was
>> introduced. However the kernel cannot be started by recent versions
>> of GRUB - machine simply restarts as soon as GRUB passes control to
>> Linux. As mentioned above this affects very old Linux only, so very
>> few users (if any) would care. But as I have a patch, here it is.
>>
>> I tracked the issues to code initializing BSS that is used by old
>> Linux kernels. See code following "Clear BSS" on
>> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/x86_64/boot/compressed/head.S?h=linux-2.6.17.y#n57
>>
>> AFAIK old Linux kernels do not provide information allowing boot
>> loader to determine end of BSS. As the consequence, current GRUB
>> may place GPT in the area overlapping with BSS sections of old
>> Linux kernels. The location of GPT was changed at the same time
>> when relocator was added, introducing regression.
>>
> Top of memory doesn't sound like a right place. Could you try with
>
>>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>>                                         (0xa0000 - RELOCATOR_SIZEOF (32)), ...
> This will put GDT in low memory
>
>> In order to improve compatibility with these old kernels, we could
>> switch back to old strategy and simply place GPT close to end of
>> physical memory.
>>
>> Best regards,
>>
>> Piotr Krysiuk
>> ---
>>  ChangeLog                      |    5 +++++
>>  grub-core/lib/i386/relocator.c |    2 +-
>>  2 files changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/ChangeLog b/ChangeLog
>> index 770269c..5a91e5e 100644
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,3 +1,8 @@
>> +2014-03-17  Piotr Krysiuk  <piotras@gmail.com>
>> +
>> +     * grub-core/lib/i386/relocator.c: Moved GDT to end of physical memory
>> +     to avoid collision with old Linux BSS.
>> +
>>  2014-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
>>
>>       * include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
>> diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
>> index d2a1b27..523f669 100644
>> --- a/grub-core/lib/i386/relocator.c
>> +++ b/grub-core/lib/i386/relocator.c
>> @@ -84,7 +84,7 @@ grub_relocator32_boot (struct grub_relocator *rel,
>>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>>                                         (0xffffffff - RELOCATOR_SIZEOF (32))
>>                                         + 1, RELOCATOR_SIZEOF (32), 16,
>> -                                       GRUB_RELOCATOR_PREFERENCE_NONE,
>> +                                       GRUB_RELOCATOR_PREFERENCE_HIGH,
>>                                         avoid_efi_bootservices);
>>    if (err)
>>      return err;
>>
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: relocator.log --]
[-- Type: text/x-log, Size: 3571 bytes --]

^[[H^[[J^[[1;1Hscript/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
script/lexer.c:321: token 288 text [linux]
script/lexer.c:321: token 289 text [(hd0)/vmlinuz]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
lib/relocator.c:115: relocators_size=7
lib/relocator.c:1239: min_addr = 0x0, max_addr = 0xffffffff, target = 0x100000
lib/relocator.c:434: trying to allocate in 0x100000-0xffffffff aligned 0x1 size 0x1a9000
lib/relocator.c:1186: allocated: 0x100000+0x1a9000
lib/relocator.c:1275: allocated 0x100000/0x100000
lib/relocator.c:1293: relocators_size=7
lib/relocator.c:1301: relocators_size=7
lib/relocator.c:1308: cur = 0x3ff725c0, next = 0x0
loader/i386/linux.c:254: prot_mode_mem = 0x100000, prot_mode_target = 100000, prot_size = 1a9000
loader/i386/linux.c:878: bzImage, setup=0x1c00, size=0x1a8615
script/lexer.c:321: token 288 text [initrd]
script/lexer.c:321: token 289 text [(hd0)/initrd.gz]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
lib/relocator.c:1385: chunks = 0x3ff725c0
lib/relocator.c:434: trying to allocate in 0x5fb000-0x37b75000 aligned 0x1000 size 0x47a430
lib/relocator.c:1186: allocated: 0x376fa000+0x47a430
lib/relocator.c:1397: allocated 0x376fa000/0x376fa000
lib/relocator.c:1398: chunks = 0x3ff725c0
loader/i386/linux.c:1124: Initrd, addr=0x37b75000, size=0x47a430
script/lexer.c:321: token 288 text [boot]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
loader/i386/linux.c:570: real_size = 4000, mmap_size = 2000
loader/i386/linux.c:424: addr = 10000, size = 80000, need_size = 4000
loader/i386/linux.c:582: real_mode_target = 8c000, real_size = 4000, efi_mmap_size = 0
lib/relocator.c:1239: min_addr = 0x0, max_addr = 0x100000, target = 0x8c000
lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff aligned 0x1 size 0x4000
lib/relocator.c:1186: allocated: 0x3f8559c0+0x4000
lib/relocator.c:1275: allocated 0x3f8559c0/0x8c000
lib/relocator.c:1293: relocators_size=7
lib/relocator.c:1301: relocators_size=29
lib/relocator.c:1308: cur = 0x3ff72af0, next = 0x3ff72700
loader/i386/linux.c:599: real_mode_mem = 0x3f8559c0
loader/i386/linux.c:609: code32_start = 100000
lib/relocator.c:1385: chunks = 0x3ff72af0
lib/relocator.c:434: trying to allocate in 0x1000-0x9ff31 aligned 0x10 size 0xd0
lib/relocator.c:1411: Adjusted limits from 1000-9ff31 to 0-100000
lib/relocator.c:434: trying to allocate in 0x0-0x100000 aligned 0x10 size 0xd0
lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff aligned 0x1 size 0xd0
lib/relocator.c:1186: allocated: 0x3fff7c20+0xd0
lib/relocator.c:1466: relocators_size=29
lib/relocator.c:1474: relocators_size=51
lib/relocator.c:1480: cur = 0x3ff64750, next = 0x3ff72af0
grub_relocator32_boot: grub_relocator_alloc_chunk_align(..., GRUB_RELOCATOR_PREFERENCE_LOW,...) returned 3fff7c20
lib/relocator.c:1521: Preparing relocs (size=51)
lib/relocator.c:434: trying to allocate in 0x0-0xffffffcd aligned 0x1 size 0x33
lib/relocator.c:1186: allocated: 0x2a9000+0x33
lib/relocator.c:1533: Relocs allocated at 0x2a9000
lib/relocator.c:1548: chunk 0x3fff7c20->0x0, 0xd0
lib/relocator.c:1548: chunk 0x3f8559c0->0x8c000, 0x4000
lib/relocator.c:1548: chunk 0x376fa000->0x376fa000, 0x47a430
lib/relocator.c:1548: chunk 0x100000->0x100000, 0x1a9000
lib/relocator.c:1592: sorted chunk 0x100000->0x100000, 0x1a9000
lib/relocator.c:1592: sorted chunk 0x376fa000->0x376fa000, 0x47a430
lib/relocator.c:1592: sorted chunk 0x3f8559c0->0x8c000, 0x4000
lib/relocator.c:1592: sorted chunk 0x3fff7c20->0x0, 0xd0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Fwd: [PATCH] Unable to boot very old Linux kernels
  2014-03-23 22:50   ` Piotras
@ 2014-03-23 23:16     ` Piotras
  2014-03-24  6:45     ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 0 replies; 5+ messages in thread
From: Piotras @ 2014-03-23 23:16 UTC (permalink / raw)
  To: The development of GNU GRUB

[-- Attachment #1: Type: text/plain, Size: 5547 bytes --]

Scratch that.

With GRUB_RELOCATOR_PREFERENCE_HIGH, Global Descriptor Table is
located just before 0xa0000 like we want. I'll test it on live machine
before sending updated patch.


Sorry for confusion,

Piotr

---------- Forwarded message ----------
From: Piotras <piotras@gmail.com>
Date: Sun, Mar 23, 2014 at 10:50 PM
Subject: Re: [PATCH] Unable to boot very old Linux kernels
To: The development of GNU GRUB <grub-devel@gnu.org>


Hi,

Tested suggested parameters under Qemu, so calling
grub_relocator_alloc_chunk_align with following:
  max_addr = (0xa0000 - RELOCATOR_SIZEOF (32)) + 1
  preference = GRUB_RELOCATOR_PREFERENCE_LOW

This fails to allocate from low memory and falls back to top of
physical memory, ignoring preference. Relevant part of debug log for
relocator (full log included as attachment):
  lib/relocator.c:434: trying to allocate in 0x1000-0x9ff31 aligned
0x10 size 0xd0
  lib/relocator.c:1411: Adjusted limits from 1000-9ff31 to 0-100000
  lib/relocator.c:434: trying to allocate in 0x0-0x100000 aligned 0x10 size 0xd0
  lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff
aligned 0x1 size 0xd0
  lib/relocator.c:1186: allocated: 0x3fff7c20+0xd0

See malloc_in_range calls in grub_relocator_alloc_chunk_align to see
why preference is ignored after first failure. Looking at
malloc_in_range, I don't see any events to explain why allocation in
range 0x1000..0x9ff31 fails. I can try to debug this later this week.


Regards,

Piotr


My code for reference:

diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
index d2a1b27..e9ab529 100644
--- a/grub-core/lib/i386/relocator.c
+++ b/grub-core/lib/i386/relocator.c
@@ -82,9 +82,9 @@ grub_relocator32_boot (struct grub_relocator *rel,
   grub_relocator_chunk_t ch;

   err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
-                                         (0xffffffff - RELOCATOR_SIZEOF (32))
+                                         (0xa0000 - RELOCATOR_SIZEOF (32))
                                          + 1, RELOCATOR_SIZEOF (32), 16,
-                                         GRUB_RELOCATOR_PREFERENCE_NONE,
+                                         GRUB_RELOCATOR_PREFERENCE_LOW,
                                          avoid_efi_bootservices);
   if (err)
     return err;

On Sun, Mar 23, 2014 at 7:09 PM, Vladimir 'φ-coder/phcoder' Serbinenko
<phcoder@gmail.com> wrote:
> On 17.03.2014 23:15, Piotr Krysiuk wrote:
>> Hi,
>>
>> I occasionally need to boot a very old Linux kernel.
>>
>> This works fine with old versions of GRUB, from before relocator was
>> introduced. However the kernel cannot be started by recent versions
>> of GRUB - machine simply restarts as soon as GRUB passes control to
>> Linux. As mentioned above this affects very old Linux only, so very
>> few users (if any) would care. But as I have a patch, here it is.
>>
>> I tracked the issues to code initializing BSS that is used by old
>> Linux kernels. See code following "Clear BSS" on
>> https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/arch/x86_64/boot/compressed/head.S?h=linux-2.6.17.y#n57
>>
>> AFAIK old Linux kernels do not provide information allowing boot
>> loader to determine end of BSS. As the consequence, current GRUB
>> may place GPT in the area overlapping with BSS sections of old
>> Linux kernels. The location of GPT was changed at the same time
>> when relocator was added, introducing regression.
>>
> Top of memory doesn't sound like a right place. Could you try with
>
>>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>>                                         (0xa0000 - RELOCATOR_SIZEOF (32)), ...
> This will put GDT in low memory
>
>> In order to improve compatibility with these old kernels, we could
>> switch back to old strategy and simply place GPT close to end of
>> physical memory.
>>
>> Best regards,
>>
>> Piotr Krysiuk
>> ---
>>  ChangeLog                      |    5 +++++
>>  grub-core/lib/i386/relocator.c |    2 +-
>>  2 files changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/ChangeLog b/ChangeLog
>> index 770269c..5a91e5e 100644
>> --- a/ChangeLog
>> +++ b/ChangeLog
>> @@ -1,3 +1,8 @@
>> +2014-03-17  Piotr Krysiuk  <piotras@gmail.com>
>> +
>> +     * grub-core/lib/i386/relocator.c: Moved GDT to end of physical memory
>> +     to avoid collision with old Linux BSS.
>> +
>>  2014-02-28  Vladimir Serbinenko  <phcoder@gmail.com>
>>
>>       * include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
>> diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
>> index d2a1b27..523f669 100644
>> --- a/grub-core/lib/i386/relocator.c
>> +++ b/grub-core/lib/i386/relocator.c
>> @@ -84,7 +84,7 @@ grub_relocator32_boot (struct grub_relocator *rel,
>>    err = grub_relocator_alloc_chunk_align (rel, &ch, 0,
>>                                         (0xffffffff - RELOCATOR_SIZEOF (32))
>>                                         + 1, RELOCATOR_SIZEOF (32), 16,
>> -                                       GRUB_RELOCATOR_PREFERENCE_NONE,
>> +                                       GRUB_RELOCATOR_PREFERENCE_HIGH,
>>                                         avoid_efi_bootservices);
>>    if (err)
>>      return err;
>>
>
>
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>

[-- Attachment #2: relocator.log --]
[-- Type: text/x-log, Size: 3571 bytes --]

^[[H^[[J^[[1;1Hscript/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
script/lexer.c:321: token 288 text [linux]
script/lexer.c:321: token 289 text [(hd0)/vmlinuz]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
lib/relocator.c:115: relocators_size=7
lib/relocator.c:1239: min_addr = 0x0, max_addr = 0xffffffff, target = 0x100000
lib/relocator.c:434: trying to allocate in 0x100000-0xffffffff aligned 0x1 size 0x1a9000
lib/relocator.c:1186: allocated: 0x100000+0x1a9000
lib/relocator.c:1275: allocated 0x100000/0x100000
lib/relocator.c:1293: relocators_size=7
lib/relocator.c:1301: relocators_size=7
lib/relocator.c:1308: cur = 0x3ff725c0, next = 0x0
loader/i386/linux.c:254: prot_mode_mem = 0x100000, prot_mode_target = 100000, prot_size = 1a9000
loader/i386/linux.c:878: bzImage, setup=0x1c00, size=0x1a8615
script/lexer.c:321: token 288 text [initrd]
script/lexer.c:321: token 289 text [(hd0)/initrd.gz]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
lib/relocator.c:1385: chunks = 0x3ff725c0
lib/relocator.c:434: trying to allocate in 0x5fb000-0x37b75000 aligned 0x1000 size 0x47a430
lib/relocator.c:1186: allocated: 0x376fa000+0x47a430
lib/relocator.c:1397: allocated 0x376fa000/0x376fa000
lib/relocator.c:1398: chunks = 0x3ff725c0
loader/i386/linux.c:1124: Initrd, addr=0x37b75000, size=0x47a430
script/lexer.c:321: token 288 text [boot]
script/lexer.c:321: token 259 text [
]
script/lexer.c:321: token 0 text []
loader/i386/linux.c:570: real_size = 4000, mmap_size = 2000
loader/i386/linux.c:424: addr = 10000, size = 80000, need_size = 4000
loader/i386/linux.c:582: real_mode_target = 8c000, real_size = 4000, efi_mmap_size = 0
lib/relocator.c:1239: min_addr = 0x0, max_addr = 0x100000, target = 0x8c000
lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff aligned 0x1 size 0x4000
lib/relocator.c:1186: allocated: 0x3f8559c0+0x4000
lib/relocator.c:1275: allocated 0x3f8559c0/0x8c000
lib/relocator.c:1293: relocators_size=7
lib/relocator.c:1301: relocators_size=29
lib/relocator.c:1308: cur = 0x3ff72af0, next = 0x3ff72700
loader/i386/linux.c:599: real_mode_mem = 0x3f8559c0
loader/i386/linux.c:609: code32_start = 100000
lib/relocator.c:1385: chunks = 0x3ff72af0
lib/relocator.c:434: trying to allocate in 0x1000-0x9ff31 aligned 0x10 size 0xd0
lib/relocator.c:1411: Adjusted limits from 1000-9ff31 to 0-100000
lib/relocator.c:434: trying to allocate in 0x0-0x100000 aligned 0x10 size 0xd0
lib/relocator.c:434: trying to allocate in 0x2a9000-0xffffffff aligned 0x1 size 0xd0
lib/relocator.c:1186: allocated: 0x3fff7c20+0xd0
lib/relocator.c:1466: relocators_size=29
lib/relocator.c:1474: relocators_size=51
lib/relocator.c:1480: cur = 0x3ff64750, next = 0x3ff72af0
grub_relocator32_boot: grub_relocator_alloc_chunk_align(..., GRUB_RELOCATOR_PREFERENCE_LOW,...) returned 3fff7c20
lib/relocator.c:1521: Preparing relocs (size=51)
lib/relocator.c:434: trying to allocate in 0x0-0xffffffcd aligned 0x1 size 0x33
lib/relocator.c:1186: allocated: 0x2a9000+0x33
lib/relocator.c:1533: Relocs allocated at 0x2a9000
lib/relocator.c:1548: chunk 0x3fff7c20->0x0, 0xd0
lib/relocator.c:1548: chunk 0x3f8559c0->0x8c000, 0x4000
lib/relocator.c:1548: chunk 0x376fa000->0x376fa000, 0x47a430
lib/relocator.c:1548: chunk 0x100000->0x100000, 0x1a9000
lib/relocator.c:1592: sorted chunk 0x100000->0x100000, 0x1a9000
lib/relocator.c:1592: sorted chunk 0x376fa000->0x376fa000, 0x47a430
lib/relocator.c:1592: sorted chunk 0x3f8559c0->0x8c000, 0x4000
lib/relocator.c:1592: sorted chunk 0x3fff7c20->0x0, 0xd0


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] Unable to boot very old Linux kernels
  2014-03-23 22:50   ` Piotras
  2014-03-23 23:16     ` Fwd: " Piotras
@ 2014-03-24  6:45     ` Vladimir 'φ-coder/phcoder' Serbinenko
  1 sibling, 0 replies; 5+ messages in thread
From: Vladimir 'φ-coder/phcoder' Serbinenko @ 2014-03-24  6:45 UTC (permalink / raw)
  To: grub-devel

[-- Attachment #1: Type: text/plain, Size: 257 bytes --]

On 23.03.2014 23:50, Piotras wrote:
> This fails to allocate from low memory and falls back to top of
> physical memory, ignoring preference. 
Likely you mistook temporary location of chunk with permanent address.
Chunks are moved right before boot.


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 274 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2014-03-24  6:46 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-03-17 22:15 [PATCH] Unable to boot very old Linux kernels Piotr Krysiuk
2014-03-23 19:09 ` Vladimir 'φ-coder/phcoder' Serbinenko
2014-03-23 22:50   ` Piotras
2014-03-23 23:16     ` Fwd: " Piotras
2014-03-24  6:45     ` Vladimir 'φ-coder/phcoder' Serbinenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.