Hi guys,

I just figured out why the simulation always starts at a different rip when
receiving the "-run" command via ptlcalls while running in qemu emulation
mode.
As we know the MMIO access of the ptlcall will queue the incoming command
and interrupt the emulation by running cpu_exit() function.

The queue is then checked inside the main_loop and 'start_simulation' is
set.
The evaluation of the start_simulation is also done in the main_loop, and
here is the reason for the unpredictable behavior.

The start_simulation is evaluated before the queue is checked, which will
cause the emulation to proceed until eventually another exit_request will
finally start the simulation.

If we put the queue check in front of the evaluation of the
start_simulation, then we get a fully predictable switch to simulation mode.
The first executed instruction in simulation mode will be the instruction
after the smsw command.

So I guess this should be changed.

See in vl.c:

if (start_simulation) {
   cpu_set_sim_ticks();
   in_simulation = 1;
   start_simulation = 0;
   tb_flush(first_cpu);
}

ptl_check_ptlcall_queue();

vs.

ptl_check_ptlcall_queue();

if (start_simulation) {
   cpu_set_sim_ticks();
   in_simulation = 1;
   start_simulation = 0;
   tb_flush(first_cpu);
}

Maybe this is also another step forward to a more deterministic behavior of
the simulation/emulation.

Regards,
Stefan
_______________________________________________
http://www.marss86.org
Marss86-Devel mailing list
[email protected]
https://www.cs.binghamton.edu/mailman/listinfo/marss86-devel

Reply via email to