Commit a64aa578 authored by Markus Armbruster's avatar Markus Armbruster
Browse files

hw: Deprecate -drive if=scsi with non-onboard HBAs



Block backends defined with "-drive if=T" with T other than "none" are
meant to be picked up by machine initialization code: a suitable
frontend gets created and wired up automatically.

Drives defined with if=scsi are also picked up by SCSI HBAs added with
-device, unlike other interface types.  Deprecate this usage, as follows.

Create the frontends for onboard HBAs in machine initialization code,
exactly like we do for if=ide and other interface types.  Change
scsi_legacy_handle_cmdline() to create a frontend only when it's still
missing, and warn that this usage is deprecated.

Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
Message-Id: <1487161136-9018-3-git-send-email-armbru@redhat.com>
parent fb8b660e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -259,7 +259,7 @@ static void realview_init(MachineState *machine,
        }
        n = drive_get_max_bus(IF_SCSI);
        while (n >= 0) {
            pci_create_simple(pci_bus, -1, "lsi53c895a");
            lsi53c895a_create(pci_bus);
            n--;
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -290,7 +290,7 @@ static void versatile_init(MachineState *machine, int board_id)
    }
    n = drive_get_max_bus(IF_SCSI);
    while (n >= 0) {
        pci_create_simple(pci_bus, -1, "lsi53c895a");
        lsi53c895a_create(pci_bus);
        n--;
    }

+1 −1
Original line number Diff line number Diff line
@@ -1652,7 +1652,7 @@ void pc_pci_device_init(PCIBus *pci_bus)

    max_bus = drive_get_max_bus(IF_SCSI);
    for (bus = 0; bus <= max_bus; bus++) {
        pci_create_simple(pci_bus, -1, "lsi53c895a");
        lsi53c895a_create(pci_bus);
    }
}

+7 −0
Original line number Diff line number Diff line
@@ -2268,3 +2268,10 @@ static void lsi53c895a_register_types(void)
}

type_init(lsi53c895a_register_types)

void lsi53c895a_create(PCIBus *bus)
{
    LSIState *s = LSI53C895A(pci_create_simple(bus, -1, "lsi53c895a"));

    scsi_bus_legacy_handle_cmdline(&s->bus, false);
}
+13 −2
Original line number Diff line number Diff line
@@ -261,7 +261,7 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
    return SCSI_DEVICE(dev);
}

void scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
{
    Location loc;
    DriveInfo *dinfo;
@@ -274,6 +274,17 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
            continue;
        }
        qemu_opts_loc_restore(dinfo->opts);
        if (deprecated) {
            /* Handling -drive not claimed by machine initialization */
            if (blk_get_attached_dev(blk_by_legacy_dinfo(dinfo))) {
                continue;       /* claimed */
            }
            if (!dinfo->is_default) {
                error_report("warning: bus=%d,unit=%d is deprecated with this"
                             " machine type",
                             bus->busnr, unit);
            }
        }
        scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
                                  unit, false, -1, NULL, &error_fatal);
    }
@@ -304,7 +315,7 @@ static int scsi_legacy_handle_cmdline_cb(Object *obj, void *opaque)
    SCSIBus *bus = (SCSIBus *)object_dynamic_cast(obj, TYPE_SCSI_BUS);

    if (bus && is_scsi_hba_with_legacy_magic(OBJECT(bus->qbus.parent))) {
        scsi_bus_legacy_handle_cmdline(bus);
        scsi_bus_legacy_handle_cmdline(bus, true);
    }

    return 0;
Loading