LGTM
Reviewed-by: Leo Sandoval <lsand...@redhat.com>

On Mon, Feb 17, 2025 at 12:44 PM Mukesh Kumar Chaurasiya <
mchau...@linux.ibm.com> wrote:

> 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,
> > 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
> > 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
> > 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
> > 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.
> > 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 */
> > +  ibm_ca_support_reboot = 0;
> > +  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.
> > +       */
> > +      if (!ibm_ca_support_reboot && err == GRUB_ERR_NONE
> > +          && rmo_top < (512 * 1024 * 1024))
> > +        grub_ieee1275_ibm_cas ();
> >      }
> >  #endif
> >
> > --
> > 2.39.3
> >
> >
> LGTM
> Reviewed-by: Mukesh Kumar Chaurasiya <mchau...@linux.ibm.com>
> > _______________________________________________
> > Grub-devel mailing list
> > Grub-devel@gnu.org
> > https://lists.gnu.org/mailman/listinfo/grub-devel
>
> _______________________________________________
> Grub-devel mailing list
> Grub-devel@gnu.org
> https://lists.gnu.org/mailman/listinfo/grub-devel
>
_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to