Just a quick note to say that I have updated my patch. More precisely I have refined the virtualized syscall nesting. When there are more engines for a task and report-callbacks can change the status the quiescent state must be managed for each engine. syscall enter: process -> VM0 -> VM1 (modify) -> VM2 (second modification) -> kernel syscall exit: kernel -> VM2 (restore) -> VM1 (restore) -> VM0 -> process Both for syscall enter and exit the modification of VM2 must take place after VM1 has completed its job. If VM1 requires the quiescent state to compute its modification of the state VM2 report_syscall_entry has to wait for VM1 to finish its job. The same for restore in the opposite way. One more idea: The entry.S code provides the feature to skip the system call (by setting the syscall number to -1). This feature must be provided to VM nesting. The new patch provide the correct nesting and if VM1 (in the example) sets the syscall number to -1 it skips also VM2 report syscall report. In this case during syscall exit skips VM2, restore the syscall number and calls the report_syscall_exit from VM1 and then VM0. Maybe it is useless to call VM1 too (starting from VM0 given that the call has been skipped) but for now I do in this way for the sake of simmetry. The new patch implements this policy. Maybe the same idea (wait for quiescent state at each engine) must be applied to all the other report* that can change the status (e.g. report_signal?). renzo