The SCR_EL3 register reset value (0) and the value produced when writing 0 via the scr_write function (set as writefn in the register struct) differ. This causes migration to fail.
I believe the solution is to specify a raw_writefn for that register. Failing invocation: $ qemu-system-arm -machine vexpress-a9 -cpu cortex-a9 -nographic QEMU 5.2.0 monitor - type 'help' for more information (qemu) migrate "exec:cat > img" (qemu) q $ qemu-system-arm -machine vexpress-a9 -cpu cortex-a9 -nographic -incoming "exec:cat img" qemu-system-arm: error while loading state for instance 0x0 of device 'cpu' qemu-system-arm: load of migration failed: Operation not permitted Mike Nawrocki (1): target/arm: Add raw_writefn to SCR_EL3 register target/arm/helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -- 2.20.1