scsi: Remove automatic creation of SCSI controllers with -drive if=scsi
Automatic creation of SCSI controllers for "-drive if=scsi" for x86 machines was quite a bad idea (see description of commit f778a82f0c179 for details). This is marked as deprecated since QEMU v2.9.0, and as far as I know, nobody complained that this is still urgently required anymore. Time to remove this now. Suggested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Message-Id: <1519123357-13225-1-git-send-email-thuth@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
d07aa197c5
commit
1454509726
17
hw/i386/pc.c
17
hw/i386/pc.c
@ -1636,23 +1636,6 @@ void pc_nic_init(ISABus *isa_bus, PCIBus *pci_bus)
|
|||||||
rom_reset_order_override();
|
rom_reset_order_override();
|
||||||
}
|
}
|
||||||
|
|
||||||
void pc_pci_device_init(PCIBus *pci_bus)
|
|
||||||
{
|
|
||||||
int max_bus;
|
|
||||||
int bus;
|
|
||||||
|
|
||||||
/* Note: if=scsi is deprecated with PC machine types */
|
|
||||||
max_bus = drive_get_max_bus(IF_SCSI);
|
|
||||||
for (bus = 0; bus <= max_bus; bus++) {
|
|
||||||
pci_create_simple(pci_bus, -1, "lsi53c895a");
|
|
||||||
/*
|
|
||||||
* By not creating frontends here, we make
|
|
||||||
* scsi_legacy_handle_cmdline() create them, and warn that
|
|
||||||
* this usage is deprecated.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name)
|
void ioapic_init_gsi(GSIState *gsi_state, const char *parent_name)
|
||||||
{
|
{
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
@ -295,10 +295,6 @@ static void pc_init1(MachineState *machine,
|
|||||||
PC_MACHINE_ACPI_DEVICE_PROP, &error_abort);
|
PC_MACHINE_ACPI_DEVICE_PROP, &error_abort);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pcmc->pci_enabled) {
|
|
||||||
pc_pci_device_init(pci_bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pcms->acpi_nvdimm_state.is_enabled) {
|
if (pcms->acpi_nvdimm_state.is_enabled) {
|
||||||
nvdimm_init_acpi_state(&pcms->acpi_nvdimm_state, system_io,
|
nvdimm_init_acpi_state(&pcms->acpi_nvdimm_state, system_io,
|
||||||
pcms->fw_cfg, OBJECT(pcms));
|
pcms->fw_cfg, OBJECT(pcms));
|
||||||
|
@ -273,9 +273,6 @@ static void pc_q35_init(MachineState *machine)
|
|||||||
/* the rest devices to which pci devfn is automatically assigned */
|
/* the rest devices to which pci devfn is automatically assigned */
|
||||||
pc_vga_init(isa_bus, host_bus);
|
pc_vga_init(isa_bus, host_bus);
|
||||||
pc_nic_init(isa_bus, host_bus);
|
pc_nic_init(isa_bus, host_bus);
|
||||||
if (pcmc->pci_enabled) {
|
|
||||||
pc_pci_device_init(host_bus);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pcms->acpi_nvdimm_state.is_enabled) {
|
if (pcms->acpi_nvdimm_state.is_enabled) {
|
||||||
nvdimm_init_acpi_state(&pcms->acpi_nvdimm_state, system_io,
|
nvdimm_init_acpi_state(&pcms->acpi_nvdimm_state, system_io,
|
||||||
|
@ -2277,5 +2277,5 @@ void lsi53c895a_create(PCIBus *bus)
|
|||||||
{
|
{
|
||||||
LSIState *s = LSI53C895A(pci_create_simple(bus, -1, "lsi53c895a"));
|
LSIState *s = LSI53C895A(pci_create_simple(bus, -1, "lsi53c895a"));
|
||||||
|
|
||||||
scsi_bus_legacy_handle_cmdline(&s->bus, false);
|
scsi_bus_legacy_handle_cmdline(&s->bus);
|
||||||
}
|
}
|
||||||
|
@ -271,7 +271,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, bool deprecated)
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus)
|
||||||
{
|
{
|
||||||
Location loc;
|
Location loc;
|
||||||
DriveInfo *dinfo;
|
DriveInfo *dinfo;
|
||||||
@ -284,59 +284,12 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated)
|
|||||||
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) {
|
|
||||||
warn_report("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, false, NULL, &error_fatal);
|
unit, false, -1, false, NULL, &error_fatal);
|
||||||
}
|
}
|
||||||
loc_pop(&loc);
|
loc_pop(&loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_scsi_hba_with_legacy_magic(Object *obj)
|
|
||||||
{
|
|
||||||
static const char *magic[] = {
|
|
||||||
"am53c974", "dc390", "esp", "lsi53c810", "lsi53c895a",
|
|
||||||
"megasas", "megasas-gen2", "mptsas1068", "spapr-vscsi",
|
|
||||||
"virtio-scsi-device",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
const char *typename = object_get_typename(obj);
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; magic[i]; i++)
|
|
||||||
if (!strcmp(typename, magic[i])) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
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, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void scsi_legacy_handle_cmdline(void)
|
|
||||||
{
|
|
||||||
object_child_foreach_recursive(object_get_root(),
|
|
||||||
scsi_legacy_handle_cmdline_cb, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
|
static int32_t scsi_invalid_field(SCSIRequest *req, uint8_t *buf)
|
||||||
{
|
{
|
||||||
scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
|
scsi_req_build_sense(req, SENSE_CODE(INVALID_FIELD));
|
||||||
|
@ -1215,8 +1215,7 @@ 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,
|
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)
|
||||||
|
@ -153,7 +153,7 @@ SCSIDevice *scsi_bus_legacy_add_drive(SCSIBus *bus, BlockBackend *blk,
|
|||||||
int unit, bool removable, int bootindex,
|
int unit, bool removable, int bootindex,
|
||||||
bool share_rw,
|
bool share_rw,
|
||||||
const char *serial, Error **errp);
|
const char *serial, Error **errp);
|
||||||
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, bool deprecated);
|
void scsi_bus_legacy_handle_cmdline(SCSIBus *bus);
|
||||||
void scsi_legacy_handle_cmdline(void);
|
void scsi_legacy_handle_cmdline(void);
|
||||||
|
|
||||||
SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d,
|
SCSIRequest *scsi_req_alloc(const SCSIReqOps *reqops, SCSIDevice *d,
|
||||||
|
@ -2680,11 +2680,6 @@ The ``-net vlan=NN'' argument is partially replaced with the
|
|||||||
new ``-netdev'' argument. The remaining use cases will no
|
new ``-netdev'' argument. The remaining use cases will no
|
||||||
longer be directly supported in QEMU.
|
longer be directly supported in QEMU.
|
||||||
|
|
||||||
@subsection -drive if=scsi (since 2.9.0)
|
|
||||||
|
|
||||||
The ``-drive if=scsi'' argument is replaced by the the
|
|
||||||
``-device BUS-TYPE'' argument combined with ``-drive if=none''.
|
|
||||||
|
|
||||||
@subsection -drive cyls=...,heads=...,secs=...,trans=... (since 2.10.0)
|
@subsection -drive cyls=...,heads=...,secs=...,trans=... (since 2.10.0)
|
||||||
|
|
||||||
The drive geometry arguments are replaced by the the geometry arguments
|
The drive geometry arguments are replaced by the the geometry arguments
|
||||||
|
@ -157,9 +157,7 @@ case "$QEMU_DEFAULT_MACHINE" in
|
|||||||
pc)
|
pc)
|
||||||
run_qemu -drive if=floppy
|
run_qemu -drive if=floppy
|
||||||
run_qemu -drive if=ide,media=cdrom
|
run_qemu -drive if=ide,media=cdrom
|
||||||
run_qemu -drive if=scsi,media=cdrom
|
|
||||||
run_qemu -drive if=ide
|
run_qemu -drive if=ide
|
||||||
run_qemu -drive if=scsi
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
@ -188,9 +186,7 @@ case "$QEMU_DEFAULT_MACHINE" in
|
|||||||
pc)
|
pc)
|
||||||
run_qemu -drive file="$TEST_IMG",if=floppy,readonly=on
|
run_qemu -drive file="$TEST_IMG",if=floppy,readonly=on
|
||||||
run_qemu -drive file="$TEST_IMG",if=ide,media=cdrom,readonly=on
|
run_qemu -drive file="$TEST_IMG",if=ide,media=cdrom,readonly=on
|
||||||
run_qemu -drive file="$TEST_IMG",if=scsi,media=cdrom,readonly=on
|
|
||||||
run_qemu -drive file="$TEST_IMG",if=ide,readonly=on
|
run_qemu -drive file="$TEST_IMG",if=ide,readonly=on
|
||||||
run_qemu -drive file="$TEST_IMG",if=scsi,readonly=on
|
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
;;
|
;;
|
||||||
|
9
vl.c
9
vl.c
@ -4621,15 +4621,6 @@ int main(int argc, char **argv, char **envp)
|
|||||||
|
|
||||||
rom_reset_order_override();
|
rom_reset_order_override();
|
||||||
|
|
||||||
/*
|
|
||||||
* 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();
|
|
||||||
|
|
||||||
/* 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? */
|
||||||
drive_check_orphaned();
|
drive_check_orphaned();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user