[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 01/32] fdc: Drop broken code for user-defined floppy
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PATCH 01/32] fdc: Drop broken code for user-defined floppy geometry |
Date: |
Fri, 6 Jul 2012 08:57:39 +0200 |
bdrv_get_floppy_geometry_hint() fails to store through its parameter
drive when bs has a geometry hint. Makes fd_revalidate() assign
random crap to drv->drive.
Has been broken that way for ages. Harmless, because:
* The only way to set a geometry hint is -drive if=none,cyls=...
Since commit c219331e, probably unintentional.
* The only use of drv->drive is as argument to another
bdrv_get_floppy_geometry_hint(). Which doesn't use it, since the
geometry hint is still there.
Drop the broken code, ignore -drive parameter cyls, heads and secs for
floppies even with if=none, just like before commit c219331e. Matches
-help, which explains cyls, heads, secs as "hard disk physical
geometry".
Signed-off-by: Markus Armbruster <address@hidden>
---
block.c | 62 ++++++++++++++++++++++++++++----------------------------------
hw/fdc.c | 3 ---
2 files changed, 28 insertions(+), 37 deletions(-)
diff --git a/block.c b/block.c
index 0acdcac..f5e7cb6 100644
--- a/block.c
+++ b/block.c
@@ -2308,46 +2308,40 @@ void bdrv_get_floppy_geometry_hint(BlockDriverState
*bs, int *nb_heads,
uint64_t nb_sectors, size;
int i, first_match, match;
- bdrv_get_geometry_hint(bs, nb_heads, max_track, last_sect);
- if (*nb_heads != 0 && *max_track != 0 && *last_sect != 0) {
- /* User defined disk */
- *rate = FDRIVE_RATE_500K;
- } else {
- bdrv_get_geometry(bs, &nb_sectors);
- match = -1;
- first_match = -1;
- for (i = 0; ; i++) {
- parse = &fd_formats[i];
- if (parse->drive == FDRIVE_DRV_NONE) {
+ bdrv_get_geometry(bs, &nb_sectors);
+ match = -1;
+ first_match = -1;
+ for (i = 0; ; i++) {
+ parse = &fd_formats[i];
+ if (parse->drive == FDRIVE_DRV_NONE) {
+ break;
+ }
+ if (drive_in == parse->drive ||
+ drive_in == FDRIVE_DRV_NONE) {
+ size = (parse->max_head + 1) * parse->max_track *
+ parse->last_sect;
+ if (nb_sectors == size) {
+ match = i;
break;
}
- if (drive_in == parse->drive ||
- drive_in == FDRIVE_DRV_NONE) {
- size = (parse->max_head + 1) * parse->max_track *
- parse->last_sect;
- if (nb_sectors == size) {
- match = i;
- break;
- }
- if (first_match == -1) {
- first_match = i;
- }
- }
- }
- if (match == -1) {
if (first_match == -1) {
- match = 1;
- } else {
- match = first_match;
+ first_match = i;
}
- parse = &fd_formats[match];
}
- *nb_heads = parse->max_head + 1;
- *max_track = parse->max_track;
- *last_sect = parse->last_sect;
- *drive = parse->drive;
- *rate = parse->rate;
}
+ if (match == -1) {
+ if (first_match == -1) {
+ match = 1;
+ } else {
+ match = first_match;
+ }
+ parse = &fd_formats[match];
+ }
+ *nb_heads = parse->max_head + 1;
+ *max_track = parse->max_track;
+ *last_sect = parse->last_sect;
+ *drive = parse->drive;
+ *rate = parse->rate;
}
int bdrv_get_translation_hint(BlockDriverState *bs)
diff --git a/hw/fdc.c b/hw/fdc.c
index 5b3224b..ec02e62 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -189,9 +189,6 @@ static void fd_revalidate(FDrive *drv)
&last_sect, drv->drive, &drive, &rate);
if (!bdrv_is_inserted(drv->bs)) {
FLOPPY_DPRINTF("No disk in drive\n");
- } else if (nb_heads != 0 && max_track != 0 && last_sect != 0) {
- FLOPPY_DPRINTF("User defined disk (%d %d %d)\n",
- nb_heads - 1, max_track, last_sect);
} else {
FLOPPY_DPRINTF("Floppy disk (%d h %d t %d s) %s\n", nb_heads,
max_track, last_sect, ro ? "ro" : "rw");
--
1.7.6.5
- [Qemu-devel] [PATCH 13/32] hd-geometry: Clean up confusing use of prior translation hint, (continued)
- [Qemu-devel] [PATCH 06/32] qtest: Add hard disk geometry test, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 11/32] hd-geometry: Factor out guess_chs_for_size(), Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 22/32] qtest: Cover qdev properties for disk geometry, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 03/32] vvfat: Fix partition table, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 01/32] fdc: Drop broken code for user-defined floppy geometry,
Markus Armbruster <=
- [Qemu-devel] [PATCH 12/32] hd-geometry: Clean up gratuitous goto in hd_geometry_guess(), Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 17/32] qdev: Introduce block geometry properties, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 31/32] blockdev: Drop redundant CHS validation for if=ide, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 18/32] hd-geometry: Switch to uint32_t to match BlockConf, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 20/32] virtio-blk: qdev properties for disk geometry, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 15/32] ide pc: Cut out the block layer geometry middleman, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 02/32] fdc: Move floppy geometry guessing back from block.c, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 07/32] block: Factor bdrv_read_unthrottled() out of guess_disk_lchs(), Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 29/32] qtest: Test we don't put hard disk info into CMOS for a CD-ROM, Markus Armbruster, 2012/07/06
- [Qemu-devel] [PATCH 08/32] hd-geometry: Move disk geometry guessing back from block.c, Markus Armbruster, 2012/07/06