[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-block] [PATCH v5 00/12] fdc: fix 2.88mb floppy diskette support
From: |
John Snow |
Subject: |
[Qemu-block] [PATCH v5 00/12] fdc: fix 2.88mb floppy diskette support |
Date: |
Fri, 22 Jan 2016 15:50:53 -0500 |
Yes, it's been broken for ten years.
No, it's not a CVE.
The problem is that QEMU doesn't have a configuration option for the type
of floppy drive you want. It determines that based on the type of
diskette inserted at boot time.
If you don't insert one, it always chooses a 1.44MB type.
If you want to insert a 2.88MB floppy after boot, you simply cannot.
"Wow, who cares?"
Good question -- Unfortunately, the virtio-win floppy disk images that
Red Hat/Fedora ship require a 2.88MB drive, so if you forgot to insert
them at boot, you'd have to change your VM configuration and try again.
For a one-shot operation, that's kind of obnoxious -- it'd be nice to
allow one to just insert the diskette on-demand.
"OK, What are you changing in this decades-old device?"
(1) Add a new property to allow users to specify what kind of drive they
want without relying on magical guessing behavior.
Choices are: 120, 144, 288, auto, and none.
120, 144 and 288 refer to 1.20MB, 1.44MB, and 2.88MB drives.
auto refers to the auto-detect behavior QEMU currently has.
none ... hides the drive. You probably don't want to use this,
but it's there if you feel like creating a drive you can't use.
(2) Add a new "fallback" property for use with the "auto" drive type
that allows us to specify the backup behavior, too. In most cases
this property won't be needed, but it is provided for allowing
QEMU to be fully backwards compatible.
(3) Add the concept of physical diskette size to QEMU, classifying
120-style diskettes as fundamentally different from 144 and 288 ones.
(4) Revamp the automatic guessing heuristic to understand that
2.88MB style drives can accept 1.44MB diskettes.
(5) Change the automatic fallback type for the automatic guessing
heuristic from 1.44MB to 2.88MB for 2.6 machines and beyond,
leaving 2.5- machines set to default to auto/144.
(6) A lot of code cleanup in general.
"Won't this break everything, you madman?"
No: I tested this in MS-DOS 6.22, Fedora 23 and Windows 8.1. All
seemed perfectly happy with 2.88MB drives as the default for 1.44
or 2.88MB floppy diskette images.
And: Older machine types will happily still default to the 1.44
type just like they used to, so really nothing should change
at all for most guests.
If there ARE any guests affected in 2.6+ machine types, you are
urged to use an explicit drive type that matches your application
if the automatic behavior is unsuitable.
===
v5:
===
Nearly identical to v4.
Key:
[----] : patches are identical
[####] : number of functional differences between upstream/downstream patch
[down] : patch is downstream-only
The flags [FC] indicate (F)unctional and (C)ontextual differences, respectively
001/12:[----] [--] 'fdc: move pick_geometry'
002/12:[----] [--] 'fdc: reduce number of pick_geometry arguments'
003/12:[0002] [FC] 'fdc: add drive type qapi enum'
004/12:[----] [--] 'fdc: add disk field'
005/12:[----] [--] 'fdc: Throw an assertion on misconfigured fd_formats table'
006/12:[----] [--] 'fdc: add pick_drive'
007/12:[----] [--] 'fdc: Add fallback option'
008/12:[0002] [FC] 'fdc: add drive type option'
009/12:[0002] [FC] 'fdc: add physical disk sizes'
010/12:[0031] [FC] 'fdc: rework pick_geometry'
011/12:[----] [--] 'qtest/fdc: Support for 2.88MB drives'
012/12:[----] [--] 'fdc: change auto fallback drive for ISA FDC to 288'
03: Fixed 1.5MB typo to say 1.2MB.
08: Removed extraneous parentheses.
09: Fixed sector count comment to be 1440 instead of 1400.
10: Removed what was match type #3 and replaced it with a warning.
Updated some comments.
===
v4:
===
Hopefully a more logical patch order with smaller changes.
02: Kept both debug printfs in fd_revalidate.
03: New patch, QAPI enumeration change only.
04: Re-ordered FDrive fields
Fallout from 03.
05: New patch.
06: Almost completely re-done.
07: Added media_validated property
Fallout from patch re-ordering.
08: Re-ordered.
10: Changed return type of pick_geometry to int.
Changed one error pathway to abort, as it's not a run-time problem.
12: Rebased on top of current master.
===
v3:
===
04: Remove typeA/typeB members of FDCtrl. Store e.g. -fdtypeA options
directly into FDCtrl.drives[x].drive instead.
05: Add a new fallback= option that controls fdtype{A,B}=auto behavior.
07: replace get_default_drive_type which is no longer needed
add get_fallback_drive_type.
09: Reworked the auto/fallback section of pick_geometry.
________________________________________________________________________________
For convenience, this branch is available at:
https://github.com/jnsnow/qemu.git branch fdc-default
https://github.com/jnsnow/qemu/tree/fdc-default
This version is tagged fdc-default-v5:
https://github.com/jnsnow/qemu/releases/tag/fdc-default-v5
John Snow (12):
fdc: move pick_geometry
fdc: reduce number of pick_geometry arguments
fdc: add drive type qapi enum
fdc: add disk field
fdc: Throw an assertion on misconfigured fd_formats table
fdc: add pick_drive
fdc: Add fallback option
fdc: add drive type option
fdc: add physical disk sizes
fdc: rework pick_geometry
qtest/fdc: Support for 2.88MB drives
fdc: change auto fallback drive for ISA FDC to 288
hw/block/fdc.c | 326 ++++++++++++++++++++++++++++++-------------
hw/core/qdev-properties.c | 11 ++
hw/i386/pc.c | 17 +--
include/hw/block/fdc.h | 9 +-
include/hw/compat.h | 4 +
include/hw/qdev-properties.h | 1 +
qapi/block.json | 16 +++
tests/fdc-test.c | 2 +-
8 files changed, 270 insertions(+), 116 deletions(-)
--
2.4.3
- [Qemu-block] [PATCH v5 00/12] fdc: fix 2.88mb floppy diskette support,
John Snow <=
- [Qemu-block] [PATCH v5 02/12] fdc: reduce number of pick_geometry arguments, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 04/12] fdc: add disk field, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 05/12] fdc: Throw an assertion on misconfigured fd_formats table, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 03/12] fdc: add drive type qapi enum, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 01/12] fdc: move pick_geometry, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 06/12] fdc: add pick_drive, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 07/12] fdc: Add fallback option, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 11/12] qtest/fdc: Support for 2.88MB drives, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 08/12] fdc: add drive type option, John Snow, 2016/01/22
- [Qemu-block] [PATCH v5 09/12] fdc: add physical disk sizes, John Snow, 2016/01/22