mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-07-26 07:17:31 +00:00
This patch fixes two bugs. The reason for writing them into one commit is that they are related and the fixes change the same places. The first bug: The size of struct stack_frame is 0x78, not 0x80, but the save/restore assembly routine allocates/deallocates the size of stack frame by 0x80. The vcpu thread stack is initialized by allocating sizeof(struct stack_frame) from the top of the stack and put initial values there (arch_build_stack_frame). The vcpu thread stack will underflow at the first time this thread gets scheduled. So the fix is to change the 0x80 to 0x78 in save/restore routine. The second bug: Save/restore routine needs to capture sstatus, as different threads might have different interrupt enabling settings. For example, vcpu threads always get scheduled out when the interrupts are disabled, but idle thread needs to have the interrupts enabled. So sstatus needs to be saved/restored. The fix is to add a new member sstatus in struct stack_frame. Adding a new member in struct stack_frame boost the size of struct stack_frame to 0x80, which in this case the fix of the first bug is no longer needed. Tracked-On: #8838 Signed-off-by: Yifan Liu <yifan1.liu@intel.com> Acked-by: Wang Yu1 <yu1.wang@intel.com>