parent
9f70084524
commit
07ee9654e4
|
@ -459,16 +459,15 @@ struct Vcpu {
|
||||||
|
|
||||||
Vm_state &state = *reinterpret_cast<Vm_state *>(vcpu->_state);
|
Vm_state &state = *reinterpret_cast<Vm_state *>(vcpu->_state);
|
||||||
/* transform state from NOVA to Genode */
|
/* transform state from NOVA to Genode */
|
||||||
if (exit_reason != VM_EXIT_RECALL)
|
if (exit_reason != VM_EXIT_RECALL || !previous_blocked)
|
||||||
_read_nova_state(utcb, state, exit_reason);
|
_read_nova_state(utcb, state, exit_reason);
|
||||||
else {
|
|
||||||
/* consume potential multiple sem ups */
|
/* consume potential multiple sem ups */
|
||||||
Nova::sm_ctrl(vcpu->_sm_sel(), Nova::SEMAPHORE_UP);
|
Nova::sm_ctrl(vcpu->_sm_sel(), Nova::SEMAPHORE_UP);
|
||||||
Nova::sm_ctrl(vcpu->_sm_sel(), Nova::SEMAPHORE_DOWNZERO);
|
Nova::sm_ctrl(vcpu->_sm_sel(), Nova::SEMAPHORE_DOWNZERO);
|
||||||
|
|
||||||
if (!previous_blocked)
|
if (exit_reason == VM_EXIT_RECALL) {
|
||||||
_read_nova_state(utcb, state, exit_reason);
|
if (previous_blocked)
|
||||||
else
|
|
||||||
state.exit_reason = exit_reason;
|
state.exit_reason = exit_reason;
|
||||||
|
|
||||||
if (vcpu->_remote == PAUSE) {
|
if (vcpu->_remote == PAUSE) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user