You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
When using qemu-system-riscv64 and setting the smp (symmetric multiprocessing) value to 54 or higher, the system freezes and is unable to properly boot into U-Boot. This issue appears to have been introduced in this commit: 87aa306 . On the latest version, this problem still exists.
The root cause seems to be the addition of this line of code:
heap_size += 0x40 * (hart_count) * (hart_count);
After commenting out this line, it is possible to increase the smp value range, but the system still freezes when attempting to set smp to 72 or higher.
And here's some info on the variables. Here, heap_size(old) is used to represent the default value, and heap_size(new) is used to represent the added value, and return_size is the same as well.
It looks like with the current master branch (86d2c17), this has been fixed at some point. I can boot with up to 107 harts. At 108 harts, the size of the heap causes the firmware overflow 2 MiB, which is the default FW_PAYLOAD_OFFSET. This makes root.next_arg1 overlap the firmware memory region, which causes sbi_domain_init() to fail. Increasing FW_PAYLOAD_OFFSET allows OpenSBI to boot with 128 harts, which is the maximum supported (SBI_HARTMASK_MAX_BITS).
Description:
When using qemu-system-riscv64 and setting the smp (symmetric multiprocessing) value to 54 or higher, the system freezes and is unable to properly boot into U-Boot. This issue appears to have been introduced in this commit: 87aa306 . On the latest version, this problem still exists.
The root cause seems to be the addition of this line of code:
After commenting out this line, it is possible to increase the smp value range, but the system still freezes when attempting to set smp to 72 or higher.
And here's some info on the variables. Here, heap_size(old) is used to represent the default value, and heap_size(new) is used to represent the added value, and return_size is the same as well.
Test Command:
QEMU Log:
And system freezes here.
Others Environment:
The text was updated successfully, but these errors were encountered: