blockdev: Deprecate -drive with bogus interface type
Drives with interface types other than if=none are for onboard devices. Unfortunately, any such drives the board doesn't pick up can still be used with -device, like this: $ qemu-system-x86_64 -nodefaults -display none -S -drive if=floppy,id=bogus,unit=7 -device ide-cd,drive=bogus -monitor stdio QEMU 5.0.50 monitor - type 'help' for more information (qemu) info block bogus: [not inserted] Attached to: /machine/peripheral-anon/device[0] Removable device: not locked, tray closed (qemu) info qtree bus: main-system-bus type System [...] bus: ide.1 type IDE dev: ide-cd, id "" ---> drive = "bogus" [...] unit = 0 (0x0) [...] This kind of abuse has always worked. Deprecate it: qemu-system-x86_64: -drive if=floppy,id=bogus,unit=7: warning: bogus if=floppy is deprecated, use if=none Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20200622094227.1271650-9-armbru@redhat.com>
This commit is contained in:
parent
63d5dfbe0d
commit
a1b40bda08
27
blockdev.c
27
blockdev.c
@ -239,6 +239,19 @@ DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drive_mark_claimed_by_board(void)
|
||||||
|
{
|
||||||
|
BlockBackend *blk;
|
||||||
|
DriveInfo *dinfo;
|
||||||
|
|
||||||
|
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
||||||
|
dinfo = blk_legacy_dinfo(blk);
|
||||||
|
if (dinfo && blk_get_attached_dev(blk)) {
|
||||||
|
dinfo->claimed_by_board = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void drive_check_orphaned(void)
|
void drive_check_orphaned(void)
|
||||||
{
|
{
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
@ -248,8 +261,10 @@ void drive_check_orphaned(void)
|
|||||||
|
|
||||||
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
for (blk = blk_next(NULL); blk; blk = blk_next(blk)) {
|
||||||
dinfo = blk_legacy_dinfo(blk);
|
dinfo = blk_legacy_dinfo(blk);
|
||||||
if (!blk_get_attached_dev(blk) && !dinfo->is_default &&
|
if (dinfo->is_default || dinfo->type == IF_NONE) {
|
||||||
dinfo->type != IF_NONE) {
|
continue;
|
||||||
|
}
|
||||||
|
if (!blk_get_attached_dev(blk)) {
|
||||||
loc_push_none(&loc);
|
loc_push_none(&loc);
|
||||||
qemu_opts_loc_restore(dinfo->opts);
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
error_report("machine type does not support"
|
error_report("machine type does not support"
|
||||||
@ -257,6 +272,14 @@ void drive_check_orphaned(void)
|
|||||||
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
if_name[dinfo->type], dinfo->bus, dinfo->unit);
|
||||||
loc_pop(&loc);
|
loc_pop(&loc);
|
||||||
orphans = true;
|
orphans = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!dinfo->claimed_by_board && dinfo->type != IF_VIRTIO) {
|
||||||
|
loc_push_none(&loc);
|
||||||
|
qemu_opts_loc_restore(dinfo->opts);
|
||||||
|
warn_report("bogus if=%s is deprecated, use if=none",
|
||||||
|
if_name[dinfo->type]);
|
||||||
|
loc_pop(&loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,6 +190,14 @@ become
|
|||||||
|
|
||||||
-device floppy,unit=1,drive=...
|
-device floppy,unit=1,drive=...
|
||||||
|
|
||||||
|
``-drive`` with bogus interface type
|
||||||
|
''''''''''''''''''''''''''''''''''''
|
||||||
|
|
||||||
|
Drives with interface types other than ``if=none`` are for onboard
|
||||||
|
devices. It is possible to use drives the board doesn't pick up with
|
||||||
|
-device. This usage is now deprecated. Use ``if=none`` instead.
|
||||||
|
|
||||||
|
|
||||||
QEMU Machine Protocol (QMP) commands
|
QEMU Machine Protocol (QMP) commands
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
|
||||||
|
@ -35,6 +35,7 @@ struct DriveInfo {
|
|||||||
bool is_default; /* Added by default_drive() ? */
|
bool is_default; /* Added by default_drive() ? */
|
||||||
int media_cd;
|
int media_cd;
|
||||||
QemuOpts *opts;
|
QemuOpts *opts;
|
||||||
|
bool claimed_by_board;
|
||||||
QTAILQ_ENTRY(DriveInfo) next;
|
QTAILQ_ENTRY(DriveInfo) next;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -45,6 +46,7 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo);
|
|||||||
void override_max_devs(BlockInterfaceType type, int max_devs);
|
void override_max_devs(BlockInterfaceType type, int max_devs);
|
||||||
|
|
||||||
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit);
|
||||||
|
void drive_mark_claimed_by_board(void);
|
||||||
void drive_check_orphaned(void);
|
void drive_check_orphaned(void);
|
||||||
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
DriveInfo *drive_get_by_index(BlockInterfaceType type, int index);
|
||||||
int drive_get_max_bus(BlockInterfaceType type);
|
int drive_get_max_bus(BlockInterfaceType type);
|
||||||
|
@ -4347,6 +4347,14 @@ void qemu_init(int argc, char **argv, char **envp)
|
|||||||
/* from here on runstate is RUN_STATE_PRELAUNCH */
|
/* from here on runstate is RUN_STATE_PRELAUNCH */
|
||||||
machine_run_board_init(current_machine);
|
machine_run_board_init(current_machine);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TODO To drop support for deprecated bogus if=..., move
|
||||||
|
* drive_check_orphaned() here, replacing this call. Also drop
|
||||||
|
* its deprecation warning, along with DriveInfo member
|
||||||
|
* @claimed_by_board.
|
||||||
|
*/
|
||||||
|
drive_mark_claimed_by_board();
|
||||||
|
|
||||||
realtime_init();
|
realtime_init();
|
||||||
|
|
||||||
soundhw_init();
|
soundhw_init();
|
||||||
|
Loading…
Reference in New Issue
Block a user