On Wed, Jan 15, 2025 at 05:46:05PM +0530, Avnish Chouhan wrote: > Change RMA size from 512 MB to 768 MB which will result > in more memory at boot time for PowerPC. When PowerPC LPAR use/uses vTPM,
s#use/uses#uses#? > Secure Boot or FADump, the 512 MB RMA memory is not sufficient for > booting. With this 512 MB RMA, GRUB2 run out of memory and unable to > load the necessary. Sometimes even usage of CDROM which requires more "necessary" what? > memory for installation along with the options mentioned above troubles > the boot memory and result in boot failures. Increasing the RMA size > will resolves multiple out of memory issues observed in PowerPC. > > Failure details (GRUB2 debugs): > > kern/ieee1275/init.c:550: mm requested region of size 8513000, flags 1 > kern/ieee1275/init.c:563: Cannot satisfy allocation and retain minimum runtime > space Could you fix line wraps in this console dump, i.e., full message in one line should be in one line? And I suggest to add two space indention to this dump to make commit message more readable... > kern/ieee1275/init.c:550: mm requested region of size 8513000, flags 0 > kern/ieee1275/init.c:563: Cannot satisfy allocation and retain minimum runtime > space Ditto... > kern/file.c:215: Closing `/ppc/ppc64/initrd.img' ... > kern/disk.c:297: Closing > `ieee1275//vdevice/v-scsi > @30000067/disk@8300000000000000'... > kern/disk.c:311: Closing > `ieee1275//vdevice/v-scsi > @30000067/disk@8300000000000000' succeeded. And probably here... > kern/file.c:225: Closing `/ppc/ppc64/initrd.img' failed with 3. > kern/file.c:148: Opening `/ppc/ppc64/initrd.img' succeeded. > error: ../../grub-core/kern/mm.c:552:out of memory. > > Signed-off-by: Avnish Chouhan <avn...@linux.ibm.com> > --- > grub-core/kern/ieee1275/init.c | 33 +++++++++++++++++++++++++++++---- > 1 file changed, 29 insertions(+), 4 deletions(-) > > diff --git a/grub-core/kern/ieee1275/init.c b/grub-core/kern/ieee1275/init.c > index dfbd0b8..502ebf1 100644 > --- a/grub-core/kern/ieee1275/init.c > +++ b/grub-core/kern/ieee1275/init.c > @@ -852,7 +852,7 @@ grub_ieee1275_ibm_cas (void) > .vec1 = 0x80, /* ignore */ > .vec2_size = 1 + sizeof (struct option_vector2) - 2, > .vec2 = { > - 0, 0, -1, -1, -1, -1, -1, 512, -1, 0, 48 > + 0, 0, -1, -1, -1, -1, -1, 768, -1, 0, 48 > }, > .vec3_size = 2 - 1, > .vec3 = 0x00e0, /* ask for FP + VMX + DFP but don't halt if unsatisfied > */ > @@ -889,6 +889,10 @@ grub_claim_heap (void) > { > grub_err_t err; > grub_uint32_t total = HEAP_MAX_SIZE; > +#if defined(__powerpc__) > + grub_uint32_t ibm_ca_support_reboot; > + grub_ssize_t actual; > +#endif > > err = grub_ieee1275_total_mem (&rmo_top); > > @@ -901,11 +905,32 @@ grub_claim_heap (void) > grub_mm_add_region_fn = grub_ieee1275_mm_add_region; > > #if defined(__powerpc__) > + /* Check if it's a CAS reboot with below property. If so, we will skip CAS > call */ I suppose this comment should be before the "if" below... > + ibm_ca_support_reboot = 0; Initialize this at definition. > + if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, > + > "ibm,client-architecture-support-reboot", > + &ibm_ca_support_reboot, > + sizeof (ibm_ca_support_reboot), > + &actual) >= 0) > + grub_dprintf ("ieee1275", "ibm,client-architecture-support-reboot: %u\n", > + ibm_ca_support_reboot); > + > if (grub_ieee1275_test_flag > (GRUB_IEEE1275_FLAG_CAN_TRY_CAS_FOR_MORE_MEMORY)) > { > - /* if we have an error, don't call CAS, just hope for the best */ > - if (err == GRUB_ERR_NONE && rmo_top < (512 * 1024 * 1024)) > - grub_ieee1275_ibm_cas (); > + /* > + * If we have an error or the reboot is detected as CAS reboot, > + * don't call CAS, just hope for the best. > + * Along with the above, if the rmo_top is 512 MB or above. We > + * will skip the CAS call. Though if we call CAS, the rmo_top will > + * be set to 768 MB via CAS Vector2. This condition is required to > avoid the > + * issue where the older Linux kernels are still using rmo_top as 512 > MB. > + * Calling CAS when rmo_top is less then 768 MB will result in a issue > + * where we won't be able to boot to a newer kernel and continue to > + * boot with older kernel having rmo_top as 512 MB. The last sentence does not parse. Could you rephrase it? > + */ > + if (!ibm_ca_support_reboot && err == GRUB_ERR_NONE > + && rmo_top < (512 * 1024 * 1024)) Please do not wrap this line. > + grub_ieee1275_ibm_cas (); Daniel _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel