The "no_floppy = 1" machine class setting causes "default_floppy" in main() to become zero. Consequently, default_drive() will not call drive_add() and drive_new() for IF_FLOPPY, index=0, meaning that no default floppy drive will be created for the virtual machine. In that case, board code should also not insist on the creation of the board-default FDC.
The board-default FDC will still be created if the user requests a floppy drive with "-drive if=floppy". Additionally, separate FDCs can be specified manually with "-device isa-fdc". They allow the -device isa-fdc,driveA=... syntax that is more flexible than the one required by the board-default FDC: -global isa-fdc.driveA=... This patch doesn't change the behavior observably, as all Q35 machine types have "no_floppy = 0". Cc: Markus Armbruster <arm...@redhat.com> Cc: Paolo Bonzini <pbonz...@redhat.com> Cc: Gerd Hoffmann <kra...@redhat.com> Cc: John Snow <js...@redhat.com> Cc: "Gabriel L. Somlo" <gso...@gmail.com> Cc: "Michael S. Tsirkin" <m...@redhat.com> Cc: Kevin Wolf <kw...@redhat.com> Cc: qemu-bl...@nongnu.org Signed-off-by: Laszlo Ersek <ler...@redhat.com> --- Notes: v2: - extend commit message with "-global isa-fdc.driveA=..." language [Markus] - set the "create_fdctrl" parameter based on MachineClass.no_floppy, rather than a separate compatibility knob [Markus, Paolo] - Hesitate a little bit if this patch should affect PIIX4 too, not just Q35. On one hand, leaving constant "true" in PIIX4 introduces a difference between the boards that is perhaps too "early" in a sense. On the other hand, wiring PIIX4 up to the machine class settings gives a false impression of dynamism -- the ACPI payload mentioned by Gabriel should be then made conditional too; plus that extra flexibility won't be actually exercised in PIIX4. Ultimately, decide to go with Q35 only, since that's the ultimate target here, and the patch modifies board code after all. hw/i386/pc_q35.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/i386/pc_q35.c b/hw/i386/pc_q35.c index 2411349..ad014e7 100644 --- a/hw/i386/pc_q35.c +++ b/hw/i386/pc_q35.c @@ -89,6 +89,7 @@ static void pc_q35_init(MachineState *machine) PcGuestInfo *guest_info; ram_addr_t lowmem; DriveInfo *hd[MAX_SATA_PORTS]; + MachineClass *mc = MACHINE_GET_CLASS(machine); /* Check whether RAM fits below 4G (leaving 1/2 GByte for IO memory * and 256 Mbytes for PCI Express Enhanced Configuration Access Mapping @@ -163,7 +164,6 @@ static void pc_q35_init(MachineState *machine) guest_info->legacy_acpi_table_size = 0; if (smbios_defaults) { - MachineClass *mc = MACHINE_GET_CLASS(machine); /* These values are guest ABI, do not change */ smbios_set_defaults("QEMU", "Standard PC (Q35 + ICH9, 2009)", mc->name, smbios_legacy_mode, smbios_uuid_encoded); @@ -250,7 +250,7 @@ static void pc_q35_init(MachineState *machine) } /* init basic PC hardware */ - pc_basic_device_init(isa_bus, gsi, &rtc_state, true, &floppy, + pc_basic_device_init(isa_bus, gsi, &rtc_state, !mc->no_floppy, &floppy, (pc_machine->vmport != ON_OFF_AUTO_ON), 0xff0104); /* connect pm stuff to lpc */ -- 1.8.3.1