mirror of https://github.com/xemu-project/xemu.git
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: Markus Armbruster <armbru@redhat.com> Message-Id: <1487161136-9018-3-git-send-email-armbru@redhat.com>
This commit is contained in:
parent
fb8b660e17
commit
a64aa5785d
|
@ -259,7 +259,7 @@ static void realview_init(MachineState *machine,
|
||||||
}
|
}
|
||||||
n = drive_get_max_bus(IF_SCSI);
|
n = drive_get_max_bus(IF_SCSI);
|
||||||
while (n >= 0) {
|
while (n >= 0) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
lsi53c895a_create(pci_bus);
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -290,7 +290,7 @@ static void versatile_init(MachineState *machine, int board_id)
|
||||||
}
|
}
|
||||||
n = drive_get_max_bus(IF_SCSI);
|
n = drive_get_max_bus(IF_SCSI);
|
||||||
while (n >= 0) {
|
while (n >= 0) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
lsi53c895a_create(pci_bus);
|
||||||
n--;
|
n--;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1652,7 +1652,7 @@ void pc_pci_device_init(PCIBus *pci_bus)
|
||||||
|
|
||||||
max_bus = drive_get_max_bus(IF_SCSI);
|
max_bus = drive_get_max_bus(IF_SCSI);
|
||||||
for (bus = 0; bus <= max_bus; bus++) {
|
for (bus = 0; bus <= max_bus; bus++) {
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
lsi53c895a_create(pci_bus);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2268,3 +2268,10 @@ static void lsi53c895a_register_types(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
type_init(lsi53c895a_register_types)
|
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);
|
||||||
|
}
|
||||||
|
|
|
@ -261,7 +261,7 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
||||||
return SCSI_DEVICE(dev);
|
return SCSI_DEVICE(dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
|
||||||
{
|
{
|
||||||
Location loc;
|
Location loc;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
|
@ -274,6 +274,17 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
qemu_opts_loc_restore(dinfo->opts);
|
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),
|
scsi_bus_legacy_add_drive(bus, blk_by_legacy_dinfo(dinfo),
|
||||||
unit, false, -1, NULL, &error_fatal);
|
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);
|
SCSIBus *bus = (SCSIBus *)object_dynamic_cast(obj, TYPE_SCSI_BUS);
|
||||||
|
|
||||||
if (bus && is_scsi_hba_with_legacy_magic(OBJECT(bus->qbus.parent))) {
|
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;
|
return 0;
|
||||||
|
|
|
@ -1215,6 +1215,8 @@ void spapr_vscsi_create(VIOsPAPRBus *bus)
|
||||||
dev = qdev_create(&bus->bus, "spapr-vscsi");
|
dev = qdev_create(&bus->bus, "spapr-vscsi");
|
||||||
|
|
||||||
qdev_init_nofail(dev);
|
qdev_init_nofail(dev);
|
||||||
|
scsi_bus_legacy_handle_cmdline(&VIO_SPAPR_VSCSI_DEVICE(dev)->bus,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int spapr_vscsi_devnode(VIOsPAPRDevice *dev, void *fdt, int node_off)
|
static int spapr_vscsi_devnode(VIOsPAPRDevice *dev, void *fdt, int node_off)
|
||||||
|
|
|
@ -688,6 +688,8 @@ PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn,
|
||||||
PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
|
PCIDevice *pci_create(PCIBus *bus, int devfn, const char *name);
|
||||||
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
|
PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name);
|
||||||
|
|
||||||
|
void lsi53c895a_create(PCIBus *bus);
|
||||||
|
|
||||||
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
|
qemu_irq pci_allocate_irq(PCIDevice *pci_dev);
|
||||||
void pci_set_irq(PCIDevice *pci_dev, int level);
|
void pci_set_irq(PCIDevice *pci_dev, int level);
|
||||||
|
|
||||||
|
|
|
@ -177,7 +177,7 @@ static inline SCSIBus *scsi_bus_from_device(SCSIDevice *d)
|
||||||
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
||||||
int unit, bool removable, int bootindex,
|
int unit, bool removable, int bootindex,
|
||||||
const char *serial, Error **errp);
|
const char *serial, Error **errp);
|
||||||
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus);
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated);
|
||||||
void scsi_legacy_handle_cmdline(void);
|
void scsi_legacy_handle_cmdline(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
8
vl.c
8
vl.c
|
@ -4510,7 +4510,13 @@ int main(int argc, char **argv, char **envp)
|
||||||
|
|
||||||
rom_reset_order_override();
|
rom_reset_order_override();
|
||||||
|
|
||||||
/* Create frontends for -drive if=scsi */
|
/*
|
||||||
|
* Create frontends for -drive if=scsi leftovers.
|
||||||
|
* Normally, frontends for -drive get created by machine
|
||||||
|
* initialization for onboard SCSI HBAs. However, we create a few
|
||||||
|
* more ever since SCSI qdevification, but this is pretty much an
|
||||||
|
* implementation accident, and deprecated.
|
||||||
|
*/
|
||||||
scsi_legacy_handle_cmdline();
|
scsi_legacy_handle_cmdline();
|
||||||
|
|
||||||
/* Did we create any drives that we failed to create a device for? */
|
/* Did we create any drives that we failed to create a device for? */
|
||||||
|
|
Loading…
Reference in New Issue