This series makes a series of mostly-unrelated fixes to allow running an old Microport UNIX (ca 1987) guest under qemu.
Changes since version 6: * Patches 1 through 6 haven't changed, other than resolving a couple of simple conflicts. * Patch 7 "fixes" IRQ0 by just making it work like before, rather than fixing it properly. This avoids possible risk to cross-version migration, etc. * Patches 8, 9, and 10 provide one possible gradual transition path to properly fix the 8254 model with relatively little risk to migration/etc. The idea is that 8 and 9 could be applied immediately in preparation for a future fix, and then the actual fix (10) could be applied sometime in the future when migrating to or from pre-patch-9 versions is no longer a concern. I am not actually aware of ANY guest that actually needs an improved 8254 model, but this provides one way to improve it if desired. ---------------- Split up this series? I'm not sure what the next steps are to get these into qemu, other than waiting for 1.4 for at least the non-trivial parts? Patches 1 through 3 could be considered independent trivial patches. Would splitting them apart improve the changes of getting them into qemu? Patch 4 isn't quite trivial, but it is well isolated (other than small documentation conflicts against patch 3). Should it be split off? It hasn't changed since version 3, but nobody has really commented on it. Patches 5 through 10 are interrelated, and should remain related in a series. ---------------- Still needed: * Corresponding KVM patches. The best approach may depend on what option is selected for qemu above. * Note that KVM uses a simplified model that doesn't try to emulate the trailing edge of the interrupt very well at all. I'm not proposing to change this aspect of it. * A patch analogous to 7 should be easy. * Patches 8 through 10 are also fairly easy by themselves. But now we start having an explosion of combinations of versions of KVM and qemu and migration to/from, and it might be better to: * Or more involved fixes would involve new ioctl()'s and command line arguments to select old or fixed 8254 models dynamically. See below. ---------------- Alternative options for improving the i8254 model and migration: 1. Don't fix 8254 at all. Just apply through patch 7 or 8, and don't try to make any additional fixes. I don't know of any guests that need improvements, so this could be a viable option. 2. Just fix it immediately, and don't worry about migration. Squash the last few patches together. A single missed periodic timer tick that only happens when migrating between versions of qemu is probably not a significant concern. (Unless someone knows of an OS that actually runs the i8254 in single shot mode 4, where a missed interrupt could cause a hang or something?) 3. Use patches 8 and 9 now, and patch 10 sometime in the future. If it was just qemu, this would be attractive. But when you also need to worry about a bunch of combinations of versions of qemu and KVM and migration, this is looking less attractive. 4. Support both old and fixed i8254 models, selectable at runtime with a command line option. (Question: What should such an option look like?) This may be the best way to actually change the 8254, but I'm not sure changes are even needed. It's certainly getting rather far afield from running Microport UNIX... ---------------- Matthew Ogilvie (10): fix some debug printf format strings vl: fix -hdachs/-hda argument order parsing issues qemu-options.hx: mention retrace= VGA option vga: add some optional CGA compatibility hacks i8259: fix so that dropping IRQ level always clears the interrupt request i8259: refactor pic_set_irq level logic i8254/i8259: workaround to make IRQ0 work like before i8254: add comments about fixing timings i8254: prepare for migration compatibility with future fixes FOR FUTURE: fix i8254/i8259 IRQ0 line logic hw/cirrus_vga.c | 4 ++-- hw/i8254.c | 24 +++++++++++++++++++-- hw/i8254_common.c | 18 ++++++---------- hw/i8259.c | 28 ++++++++++--------------- hw/ide/cmd646.c | 5 +++-- hw/ide/via.c | 5 +++-- hw/pc.h | 4 ++++ hw/vga.c | 37 ++++++++++++++++++++++++++------- qemu-options.hx | 27 +++++++++++++++++++++++- vl.c | 62 ++++++++++++++++++++++++++++++++++++------------------- 10 files changed, 147 insertions(+), 67 deletions(-) -- 1.7.10.2.484.gcd07cc5