I was experimenting with old MS-DOS 6.22 under QEMU with the 'isapc' machine type, and found it is not able to reboot the guest. Bisecting QEMU blamed the QEMU change that rebased from "rel-1.9.3", to "rel-1.10.0". Further bisecting SeaBIOS blames this change:
commit b837e68d5a6c1a5945513f1995875445a1594c8a (refs/bisect/bad) Author: Kevin O'Connor kevin@koconnor.net Date: Mon Nov 9 15:00:19 2015 -0500
resume: Make KVM soft reboot loop detection more flexible
Move the check for soft reboot loops from resume.c to shadow.c and directly check for the case where the copy of the BIOS in flash appears to be a memory alias instead. This prevents a hang if an external reboot request occurs during the BIOS memcpy.
Signed-off-by: Kevin O'Connor kevin@koconnor.net
I was testing as follows:
$ qemu-system-x86_64 -machine isapc -monitor stdio demo.img
where 'demo.img' is a disk image with MS-DOS installed (FreeDOS shows the same problem too. Not checked any other OS).
Once C:\ command prompt is showing I enter
(qemu) sendkey ctrl-alt-delete
in the QEMU monitor console. Nothing visible will happen - the cursor will stay flashing, but it no longer responds to input. Prior to this SeaBIOS commit it will correctly reboot.
Interesting side note is that this only happens with QEMUs 'isapc' machine type. The 'pc' machine type is still rebooting fine.
If I enable the isa-debugcon device in QEMU I see this when the 'isapc' machine tries to reboot:
In resume (status=0) In 32bit resume Attempting a hard reboot Unable to hard-reboot machine - attempting shutdown.
Regards, Daniel