mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
Support default block interfaces per QEMUMachine
There are QEMUMachines that have neither IF_IDE nor IF_SCSI as a default/standard interface to their block devices / drives. Therefore, this patch introduces a new field default_block_type per QEMUMachine struct. The prior use_scsi field becomes thereby obsolete and is replaced through .default_block_type = IF_SCSI. This patch also changes the default for s390x to IF_VIRTIO and removes an early hack that converts IF_IDE drives. Other parties have already claimed interest (e.g. IF_SD for exynos) To create a sane default, for machines that dont specify a default_block_type, this patch makes IF_IDE = 0 and IF_NONE = 1. I checked all users of IF_NONE (blockdev.c and ww/device-hotplug.c) as well as IF_IDE and it seems that it is ok to change the defines - in other words, I found no obvious (to me) assumption in the code regarding IF_NONE==0. IF_NONE is only set if there is an explicit if=none. Without if=* the interface becomes IF_DEFAULT. I would suggest to have some additional care, e.g. by letting this patch sit some days in the block tree. Based on an initial patch from Einar Lueck <elelueck@de.ibm.com> Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> CC: Igor Mitsyanko <i.mitsyanko@samsung.com> CC: Markus Armbruster <armbru@redhat.com> CC: Kevin Wolf <kwolf@redhat.com> Reviewed-by: Alexander Graf <agraf@suse.de> Acked-by: Igor Mitsyanko <i.mitsyanko@samsung.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
parent
c208e8c2d8
commit
2d0d2837dc
17 changed files with 51 additions and 57 deletions
21
vl.c
21
vl.c
|
@ -886,9 +886,9 @@ static int cleanup_add_fd(QemuOpts *opts, void *opaque)
|
|||
|
||||
static int drive_init_func(QemuOpts *opts, void *opaque)
|
||||
{
|
||||
int *use_scsi = opaque;
|
||||
BlockInterfaceType *block_default_type = opaque;
|
||||
|
||||
return drive_init(opts, *use_scsi) == NULL;
|
||||
return drive_init(opts, *block_default_type) == NULL;
|
||||
}
|
||||
|
||||
static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
|
||||
|
@ -899,14 +899,15 @@ static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void default_drive(int enable, int snapshot, int use_scsi,
|
||||
static void default_drive(int enable, int snapshot,
|
||||
BlockInterfaceType block_default_type,
|
||||
BlockInterfaceType type, int index,
|
||||
const char *optstr)
|
||||
{
|
||||
QemuOpts *opts;
|
||||
|
||||
if (type == IF_DEFAULT) {
|
||||
type = use_scsi ? IF_SCSI : IF_IDE;
|
||||
type = block_default_type;
|
||||
}
|
||||
|
||||
if (!enable || drive_get_by_index(type, index)) {
|
||||
|
@ -917,7 +918,7 @@ static void default_drive(int enable, int snapshot, int use_scsi,
|
|||
if (snapshot) {
|
||||
drive_enable_snapshot(opts, NULL);
|
||||
}
|
||||
if (!drive_init(opts, use_scsi)) {
|
||||
if (!drive_init(opts, type)) {
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
@ -3770,14 +3771,16 @@ int main(int argc, char **argv, char **envp)
|
|||
/* open the virtual block devices */
|
||||
if (snapshot)
|
||||
qemu_opts_foreach(qemu_find_opts("drive"), drive_enable_snapshot, NULL, 0);
|
||||
if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func, &machine->use_scsi, 1) != 0)
|
||||
if (qemu_opts_foreach(qemu_find_opts("drive"), drive_init_func,
|
||||
&machine->block_default_type, 1) != 0) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
default_drive(default_cdrom, snapshot, machine->use_scsi,
|
||||
default_drive(default_cdrom, snapshot, machine->block_default_type,
|
||||
IF_DEFAULT, 2, CDROM_OPTS);
|
||||
default_drive(default_floppy, snapshot, machine->use_scsi,
|
||||
default_drive(default_floppy, snapshot, machine->block_default_type,
|
||||
IF_FLOPPY, 0, FD_OPTS);
|
||||
default_drive(default_sdcard, snapshot, machine->use_scsi,
|
||||
default_drive(default_sdcard, snapshot, machine->block_default_type,
|
||||
IF_SD, 0, SD_OPTS);
|
||||
|
||||
register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue