URL:
  <https://savannah.gnu.org/bugs/?66257>

                 Summary: grub menu gets stuck due to unreliable rdtsc
instruction
                   Group: GNU GRUB
               Submitter: will_duan
               Submitted: Thu 26 Sep 2024 07:42:55 AM UTC
                Category: Booting
                Severity: Major
                Priority: 5 - Normal
              Item Group: Software Error
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: Git master
                 Release: 
         Reproducibility: Intermittent
         Planned Release: None


    _______________________________________________________

Follow-up Comments:


-------------------------------------------------------
Date: Thu 26 Sep 2024 07:42:55 AM UTC By: Will Duan <will_duan>
"grub_tsc_init" function will init tsc by setting grub_tsc_rate, which call
stack is:
       grub_tsc_init -> grub_tsc_calibrate_from_pmtimer -> grub_divmod64
       Among, "grub_divmod64" function needs "tsc_diff" as the second
parameter. In "grub_pmtimer_wait_count_tsc", we will call "grub_get_tsc"
function to get time stamp counter value to assign to "start_tsc" variable,
and get into "while(1)" loop space to get "end_tsc" variable value with same
function, after 3580 ticks, return "end_tsc - start_tsc". Actually, "rdtsc"
instruction will be called in "grub_get_tsc", but "rdtsc" instruction is not
reliable(for the reason see the next question), which will cause "tsc_diff" to
be a very big number larger than (1UL << 32) or a negative number, so that
grub_tsc_rate will be zero. When "run_menu" function is startup, and calls
"grub_tsc_get_time_ms" function to get current time to check if timeout time
reach, at this time, "grub_tsc_get_time_ms" function will return zero due to
zero "grub_tsc_rate" variable, then grub menu gets stuck...






    _______________________________________________________
File Attachments:


-------------------------------------------------------
Name: 0001-BugFix-grub-menu-gets-stuck-due-to-unreliable-rdtsc-.patch  Size:
6KiB
<https://file.savannah.gnu.org/file/0001-BugFix-grub-menu-gets-stuck-due-to-unreliable-rdtsc-.patch?file_id=56456>
-------------------------------------------------------
Name: grub-menu.png  Size: 316KiB
<https://file.savannah.gnu.org/file/grub-menu.png?file_id=56457>

    AGPL NOTICE

These attachments are served by Savane. You can download the corresponding
source code of Savane at
https://git.savannah.nongnu.org/cgit/administration/savane.git/snapshot/savane-14b38883ab957b38c0a68af9e7ebdf6fc3130a94.tar.gz

    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?66257>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to