drive_add is only used in softmmu/vl.c, so it can be a static function there, and drive_def is only a particular use case of qemu_opts_parse_noisily, so it can be inlined.
Also remove drive_mark_claimed_by_board, as it is only defined but not implemented (nor used) anywhere. This also helps simplifying next patch. Signed-off-by: Emanuele Giuseppe Esposito <eespo...@redhat.com> Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> Reviewed-by: Stefan Hajnoczi <stefa...@redhat.com> --- block/monitor/block-hmp-cmds.c | 2 +- blockdev.c | 27 +-------------------------- include/sysemu/blockdev.h | 6 ++---- softmmu/vl.c | 25 ++++++++++++++++++++++++- 4 files changed, 28 insertions(+), 32 deletions(-) diff --git a/block/monitor/block-hmp-cmds.c b/block/monitor/block-hmp-cmds.c index 2ac4aedfff..bfb3c043a0 100644 --- a/block/monitor/block-hmp-cmds.c +++ b/block/monitor/block-hmp-cmds.c @@ -101,7 +101,7 @@ void hmp_drive_add(Monitor *mon, const QDict *qdict) return; } - opts = drive_def(optstr); + opts = qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false); if (!opts) return; diff --git a/blockdev.c b/blockdev.c index c1f6171c6c..1bf49ef610 100644 --- a/blockdev.c +++ b/blockdev.c @@ -73,7 +73,7 @@ void bdrv_set_monitor_owned(BlockDriverState *bs) QTAILQ_INSERT_TAIL(&monitor_bdrv_states, bs, monitor_list); } -static const char *const if_name[IF_COUNT] = { +const char *const if_name[IF_COUNT] = { [IF_NONE] = "none", [IF_IDE] = "ide", [IF_SCSI] = "scsi", @@ -199,31 +199,6 @@ static int drive_index_to_unit_id(BlockInterfaceType type, int index) return max_devs ? index % max_devs : index; } -QemuOpts *drive_def(const char *optstr) -{ - return qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false); -} - -QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file, - const char *optstr) -{ - QemuOpts *opts; - - opts = drive_def(optstr); - if (!opts) { - return NULL; - } - if (type != IF_DEFAULT) { - qemu_opt_set(opts, "if", if_name[type], &error_abort); - } - if (index >= 0) { - qemu_opt_set_number(opts, "index", index, &error_abort); - } - if (file) - qemu_opt_set(opts, "file", file, &error_abort); - return opts; -} - DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit) { BlockBackend *blk; diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h index 32c2d6023c..960b54d320 100644 --- a/include/sysemu/blockdev.h +++ b/include/sysemu/blockdev.h @@ -27,6 +27,8 @@ typedef enum { IF_COUNT } BlockInterfaceType; +extern const char *const if_name[]; + struct DriveInfo { BlockInterfaceType type; int bus; @@ -45,16 +47,12 @@ BlockBackend *blk_by_legacy_dinfo(DriveInfo *dinfo); void override_max_devs(BlockInterfaceType type, int max_devs); DriveInfo *drive_get(BlockInterfaceType type, int bus, int unit); -void drive_mark_claimed_by_board(void); void drive_check_orphaned(void); DriveInfo *drive_get_by_index(BlockInterfaceType type, int index); int drive_get_max_bus(BlockInterfaceType type); int drive_get_max_devs(BlockInterfaceType type); DriveInfo *drive_get_next(BlockInterfaceType type); -QemuOpts *drive_def(const char *optstr); -QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file, - const char *optstr); DriveInfo *drive_new(QemuOpts *arg, BlockInterfaceType block_default_type, Error **errp); diff --git a/softmmu/vl.c b/softmmu/vl.c index af0c4cbd99..6938798bdb 100644 --- a/softmmu/vl.c +++ b/softmmu/vl.c @@ -650,6 +650,27 @@ static int drive_enable_snapshot(void *opaque, QemuOpts *opts, Error **errp) return 0; } +static QemuOpts *drive_add(BlockInterfaceType type, int index, + const char *file, const char *optstr) +{ + QemuOpts *opts; + + opts = qemu_opts_parse_noisily(qemu_find_opts("drive"), optstr, false); + if (!opts) { + return NULL; + } + if (type != IF_DEFAULT) { + qemu_opt_set(opts, "if", if_name[type], &error_abort); + } + if (index >= 0) { + qemu_opt_set_number(opts, "index", index, &error_abort); + } + if (file) { + qemu_opt_set(opts, "file", file, &error_abort); + } + return opts; +} + static void default_drive(int enable, int snapshot, BlockInterfaceType type, int index, const char *optstr) { @@ -2884,7 +2905,9 @@ void qemu_init(int argc, char **argv, char **envp) break; } case QEMU_OPTION_drive: - if (drive_def(optarg) == NULL) { + opts = qemu_opts_parse_noisily(qemu_find_opts("drive"), + optarg, false); + if (opts == NULL) { exit(1); } break; -- 2.27.0