1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
graphic: 0.626
device: 0.618
semantic: 0.615
boot: 0.544
instruction: 0.506
vnc: 0.503
KVM: 0.494
network: 0.487
socket: 0.479
other: 0.458
assembly: 0.422
mistranslation: 0.346
FreeDOS / MS-Dos / Windows 3.11 cannot perform reboot with 'isapc' machine
I was installing MS-Dos 6.22 + Windows 3.11 in preparation for running Microsoft Bob, and noticed that when they try to perform a reboot, they just get stuck. The console cursor stays flashing on/off, but the DOS prompt no longer responds to input.
It is fairly easy to reproduce, even FreeDOS is impacted - download the FreeDOS bootable CDROM image, then
$ qemu-img create demo.img 100MB
$ qemu-system-x86_64 -machine isapc -cdrom ~/Downloads/FD12CD.iso -hda demo.img -monitor stdio
Wait for the installer to startup, and then in the monitor console run
sendkey ctrl-alt-delete
It will fail to reboot
Testing shows this is a regression from QEMU 2.8.0 onwards, and git bisect further narrowed it down to a SEABIOS update
commit 6e99f5741ff1b408ea76e6caf2bd4f76df4060e9 (HEAD, tag: pull-seabios-20161027-2, tag: pull-seabios-20161027-1, refs/bisect/bad)
Author: Gerd Hoffmann <email address hidden>
Date: Thu Oct 27 16:42:28 2016 +0200
seabios: update to 1.10.0 release.
Note that this seems particular to the "isapc" machine type - with the "pc" machine type, reboot still works
I bisected seabios and found this seabios change to be the cause of the problem
commit b837e68d5a6c1a5945513f1995875445a1594c8a (refs/bisect/bad)
Author: Kevin O'Connor <email address hidden>
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 <email address hidden>
We need to pull in a SeaBIOS update with this fix applied to resolve this
commit 42812e062a77b27b0544c8e0d46d206afc3b2fae
Author: Kevin O'Connor <email address hidden>
Date: Thu Feb 22 20:29:27 2018 -0500
shadow: Don't invoke a shutdown on reboot unless in a reboot loop
Old versions of KVM would map the same writable copy of the BIOS at
both 0x000f0000 and 0xffff0000. As a result, a reboot on these
machines would result in a reboot loop. So, the code attempts to
check for that situation and invoke a shutdown instead.
Commit b837e68d changed the check to run prior to the first reboot.
However, this broke reboots on the QEMU isapc machine type. Change
the reboot loop check to only be invoked after at least one reboot has
been attempted.
Reported-by: Daniel P. Berrangé <email address hidden>
Signed-off-by: Kevin O'Connor <email address hidden>
The SeaBIOS update mentioned by Daniel has been included here:
https://git.qemu.org/?p=qemu.git;a=commitdiff;h=0b8f74488e50f
So I assume this bug is fixed, thus closing this now. If you still can reproduce it with the latest version of QEMU, then please complain.
|