* [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.