On Tue, Mar 11, 2025 at 02:59:35PM +0530, Avnish Chouhan wrote:
> Hi Daniel,
> Thank you for your response!
>
> --------------
> Condition before the patch:
>
> if (err == GRUB_ERR_NONE && rmo_top < (512 * 1024 * 1024))
>   grub_ieee1275_ibm_cas ();
>
> Condition after the patch:
>
> if (!ibm_ca_support_reboot && err == GRUB_ERR_NONE && rmo_top < (512 * 1024 * 
> 1024))
>   grub_ieee1275_ibm_cas ();

Avnish, I understand the code. The problem is the commit message and
comment are partially unreadable/incomprehensible. So, that is why
I am asking you to rephrase them. Now they are better but still...

> --------------
>
> We have added just one extra check in the code "!ibm_ca_support_reboot" to
> check whether the reboot is a CAS reboot or not!
>
> And these are below comments in the patch which are in question:
>
> +      /*
> +       * 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.
> +       * If we call CAS where rmo_top is less then 768 MB, this will result 
> in an issue
> +       * due to IBM CAS reboot feature and we won't be able to boot the 
> newer kernel.
> +       * The machine will boot with the last booted kernel which has rmo_top 
> as 512 MB.
> +       */
>
> I'm tried to explain in the comment on when the CAS will be called. And why
> we need to use this old condition "rmo_top < 512 MB" and not "rmo_top < 768
> MB".
>
> +      if (!ibm_ca_support_reboot && err == GRUB_ERR_NONE && rmo_top < (512
> * 1024 * 1024))
> +        grub_ieee1275_ibm_cas ();
>      }
>
>
> Condition 1: (!ibm_ca_support_reboot)
>
> This condition checks whether the last reboot is caused by CAS. If the
> reboot is detected as a CAS reboot, the GRUB will skip the CAS call. As the
> CAS has already been called earlier and it's not required to call even if
> the other conditions are met!
>
> Condition 2: (rmo_top < (512 * 1024 * 1024))
>
> If the machine detects rmo_top as less than 512 MB, the CAS will be called.
>
> Why we need this condition:
>
> Logically as we are changing MIN_RMA as 768 MB in GRUB Options_vector2. We
> should check "rmo_top < (768 * 1024 * 1024)" and not "rmo_top < (512 * 1024
> * 1024)".
>
> In the patch, whenever we are calling CAS. We set MIN_RMA as 768 MB. But we
> decide when to call CAS is based on old condition rmo_top < 512 MB.
> Logically it should be 768 MB. But we can't do this right now due to the
> below scenarios. We will change this condition to "rmo_top < (768 * 1024 *
> 1024)" in the future.
>
> *****
> Scenario 1:
> In kernel prom_init.c file. The Options_vector2 is using 512 MB as MIN_RMA.
> And GRUB is using "rmo_top < (768 * 1024 * 1024)" to call CAS.
>
> 1. Machine boots, GRUB detects rmo_top as less than 512 MB.
>    GRUB calls CAS and sets MIN_RMA as 768MB.
>    The machine reboots after the CAS call. (Every CAS call will result in a 
> reboot)
> 2. Machine boots, GRUB detects rmo_top is not as less than 512 MB.
>    GRUB skips CAS call.
> 3. After this kernel boots and detects MIN_RMA as other than its 512 MB 
> required value.
>    It calls CAS and makes the MIN_RMA again to 512 MB.
>    As the CAS is called, the machine will go for a reboot again.
>
> 4. Now GRUB will again detects rmo_top as less than 512 MB (changed by 
> kernel).
>    And then we will again go back to step 1.
>
> And machine will keep doing the CAS calls and change MIN_RMA from 512 to 768
> to 512 to 768 and so on. With this, the machine will stuck in this stage
> forever!
> *****
>
> In the above scenario 1, with (!ibm_ca_support_reboot) condition in place.
> We will avoid this CAS reboot loop. But if we use "rmo_top < (768 * 1024 *
> 1024)". The machine will never get stuck in reboot loop, but as the CAS is
> called from GRUB (currently all the powerpc machines has rmo_top is 512 MB).
> The IBM CAS reboot feature will not allow us to boot with the newer kernel!
>
> IBM CAS reboot feature:
>
> Whenever a reboot is detected as the CAS reboot by GRUB. It will boot the
> machine with the last booted kernel by reading the variable
> "boot-last-label" that has the info related to the last boot. This is
> specific to IBM powerpc and no other architecture  has this.
>
> *****
> Scenario 2:
> In kernel prom_init.c file. The Options_vector2 is using 768 MB as MIN_RMA.
> And GRUB is using "rmo_top < (768 * 1024 * 1024)" to call CAS.
>
> 1. Machine boots, GRUB detects rmo_top as less than 512 MB.
>    GRUB calls CAS and sets MIN_RMA as 768MB.
>    The machine reboots after the CAS call. (Every CAS call will result in a 
> reboot)
> 2. Machine boots, GRUB detects rmo_top is not as less than 512 MB.
>    GRUB skips CAS call.
> 3. But as the last boot was a CAS reboot, the machine will boot with the
> last booted kernel having MIN_RMA as 512 MB. We will not see an option to
> choose which kernel a user like to boot to.
> *****
>
> _________________
>
> Please let me know if you feel I need to change or add any content in my
> "comment" in the patch. I have tried my best to explain and cover these
> above scenarios in simple and short message.
> And let me know if you have any queries on this!

I think something like that, maybe a bit shortened by dropping some
obvious things, should land in the comment...

Daniel

_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to