qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 1/1] Support default block interfaces per QEMUMa


From: Alexander Graf
Subject: Re: [Qemu-devel] [PATCH 1/1] Support default block interfaces per QEMUMachine
Date: Mon, 19 Nov 2012 14:36:48 +0100

On 12.11.2012, at 09:22, Christian Borntraeger wrote:

> There are QEMUMachines that have neither IF_IDE nor IF_SCSI as a
> default/standard interface to their block devices / drives. Therfore,
> this patch introduces a new field default_block per QEMUMachine struct.
> The prior use_scsi field becomes thereby obsolete and is replaced through
> .default_block = DEFAULT_SCSI.
> 
> Based on an initial patch from Einar Lueck <address@hidden>
> 
> Signed-off-by: Christian Borntraeger <address@hidden>
> ---
> blockdev.c          |    4 ++--
> blockdev.h          |   29 ++++++++++++++++++++++++++++-
> hw/boards.h         |    3 ++-
> hw/device-hotplug.c |    2 +-
> hw/highbank.c       |    2 +-
> hw/leon3.c          |    1 -
> hw/mips_jazz.c      |    4 ++--
> hw/pc_sysfw.c       |    2 +-
> hw/puv3.c           |    1 -
> hw/realview.c       |    7 ++++---
> hw/s390-virtio.c    |   16 +---------------
> hw/spapr.c          |    2 +-
> hw/sun4m.c          |   24 ++++++++++++------------
> hw/versatilepb.c    |    4 ++--
> hw/vexpress.c       |    4 ++--
> hw/xilinx_zynq.c    |    2 +-
> vl.c                |   20 +++++++++++---------
> 17 files changed, 71 insertions(+), 56 deletions(-)
> 
> diff --git a/blockdev.c b/blockdev.c
> index e73fd6e..aca3c14 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -275,7 +275,7 @@ static bool do_check_io_limits(BlockIOLimit *io_limits)
>     return true;
> }
> 
> -DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
> +DriveInfo *drive_init(QemuOpts *opts, BlockDefault block_default)
> {
>     const char *buf;
>     const char *file = NULL;
> @@ -325,7 +325,7 @@ DriveInfo *drive_init(QemuOpts *opts, int default_to_scsi)
>             return NULL;
>       }
>     } else {
> -        type = default_to_scsi ? IF_SCSI : IF_IDE;
> +        type = block_if_from_default(block_default);
>     }
> 
>     max_devs = if_max_devs[type];
> diff --git a/blockdev.h b/blockdev.h
> index 5f27b64..aba6d77 100644
> --- a/blockdev.h
> +++ b/blockdev.h
> @@ -24,6 +24,33 @@ typedef enum {
>     IF_COUNT
> } BlockInterfaceType;
> 
> +/* For machine default interface. */
> +typedef enum {
> +    DEFAULT_IDE = 0,
> +    DEFAULT_SCSI,
> +    DEFAULT_FLOPPY,
> +    DEFAULT_PFLASH,
> +    DEFAULT_MTD,
> +    DEFAULT_SD,
> +    DEFAULT_VIRTIO,
> +    DEFAULT_XEN
> +} BlockDefault;

Why a new enum? Can't we just reuse the IF_ ones?

Also, traditionally Markus has had very strong opinions on anything IF_ and 
-drive related. It's probably a good idea to get him in the loop :).

Alex

> +
> +static inline BlockInterfaceType block_if_from_default(BlockDefault d)
> +{
> +    switch (d) {
> +    case DEFAULT_IDE:    return IF_IDE;
> +    case DEFAULT_SCSI:   return IF_SCSI;
> +    case DEFAULT_FLOPPY: return IF_FLOPPY;
> +    case DEFAULT_PFLASH: return IF_PFLASH;
> +    case DEFAULT_MTD:    return IF_MTD;
> +    case DEFAULT_SD:     return IF_SD;
> +    case DEFAULT_VIRTIO: return IF_VIRTIO;
> +    case DEFAULT_XEN:    return IF_XEN;
> +    default:             return IF_COUNT; /* will cause errors */
> +    }
> +}
> +
> struct DriveInfo {
>     BlockDriverState *bdrv;
>     char *id;
> @@ -51,7 +78,7 @@ DriveInfo *drive_get_by_blockdev(BlockDriverState *bs);
> QemuOpts *drive_def(const char *optstr);
> QemuOpts *drive_add(BlockInterfaceType type, int index, const char *file,
>                     const char *optstr);
> -DriveInfo *drive_init(QemuOpts *arg, int default_to_scsi);
> +DriveInfo *drive_init(QemuOpts *arg, BlockDefault block_default);
> 
> /* device-hotplug */
> 
> diff --git a/hw/boards.h b/hw/boards.h
> index 813d0e5..04017bf 100644
> --- a/hw/boards.h
> +++ b/hw/boards.h
> @@ -3,6 +3,7 @@
> #ifndef HW_BOARDS_H
> #define HW_BOARDS_H
> 
> +#include "blockdev.h"
> #include "qdev.h"
> 
> typedef struct QEMUMachineInitArgs {
> @@ -24,7 +25,7 @@ typedef struct QEMUMachine {
>     const char *desc;
>     QEMUMachineInitFunc *init;
>     QEMUMachineResetFunc *reset;
> -    int use_scsi;
> +    BlockDefault block_default;
>     int max_cpus;
>     unsigned int no_serial:1,
>         no_parallel:1,
> diff --git a/hw/device-hotplug.c b/hw/device-hotplug.c
> index eec0fe3..7f5be92 100644
> --- a/hw/device-hotplug.c
> +++ b/hw/device-hotplug.c
> @@ -39,7 +39,7 @@ DriveInfo *add_init_drive(const char *optstr)
>     if (!opts)
>         return NULL;
> 
> -    dinfo = drive_init(opts, current_machine->use_scsi);
> +    dinfo = drive_init(opts, current_machine->block_default);
>     if (!dinfo) {
>         qemu_opts_del(opts);
>         return NULL;
> diff --git a/hw/highbank.c b/hw/highbank.c
> index afbb005..de1027b 100644
> --- a/hw/highbank.c
> +++ b/hw/highbank.c
> @@ -326,7 +326,7 @@ static QEMUMachine highbank_machine = {
>     .name = "highbank",
>     .desc = "Calxeda Highbank (ECX-1000)",
>     .init = highbank_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> diff --git a/hw/leon3.c b/hw/leon3.c
> index 7742738..ef83dff 100644
> --- a/hw/leon3.c
> +++ b/hw/leon3.c
> @@ -212,7 +212,6 @@ static QEMUMachine leon3_generic_machine = {
>     .name     = "leon3_generic",
>     .desc     = "Leon-3 generic",
>     .init     = leon3_generic_hw_init,
> -    .use_scsi = 0,
> };
> 
> static void leon3_machine_init(void)
> diff --git a/hw/mips_jazz.c b/hw/mips_jazz.c
> index 0847427..ce2c918 100644
> --- a/hw/mips_jazz.c
> +++ b/hw/mips_jazz.c
> @@ -324,14 +324,14 @@ static QEMUMachine mips_magnum_machine = {
>     .name = "magnum",
>     .desc = "MIPS Magnum",
>     .init = mips_magnum_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine mips_pica61_machine = {
>     .name = "pica61",
>     .desc = "Acer Pica 61",
>     .init = mips_pica61_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static void mips_jazz_machine_init(void)
> diff --git a/hw/pc_sysfw.c b/hw/pc_sysfw.c
> index 9d7c5f4..65a09fd 100644
> --- a/hw/pc_sysfw.c
> +++ b/hw/pc_sysfw.c
> @@ -98,7 +98,7 @@ static void pc_fw_add_pflash_drv(void)
>       return;
>     }
> 
> -    drive_init(opts, machine->use_scsi);
> +    drive_init(opts, machine->block_default);
> }
> 
> static void pc_system_flash_init(MemoryRegion *rom_memory,
> diff --git a/hw/puv3.c b/hw/puv3.c
> index 764799c..3d77349 100644
> --- a/hw/puv3.c
> +++ b/hw/puv3.c
> @@ -122,7 +122,6 @@ static QEMUMachine puv3_machine = {
>     .desc = "PKUnity Version-3 based on UniCore32",
>     .init = puv3_init,
>     .is_default = 1,
> -    .use_scsi = 0,
> };
> 
> static void puv3_machine_init(void)
> diff --git a/hw/realview.c b/hw/realview.c
> index e789c15..36ff90a 100644
> --- a/hw/realview.c
> +++ b/hw/realview.c
> @@ -364,14 +364,14 @@ static QEMUMachine realview_eb_machine = {
>     .name = "realview-eb",
>     .desc = "ARM RealView Emulation Baseboard (ARM926EJ-S)",
>     .init = realview_eb_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine realview_eb_mpcore_machine = {
>     .name = "realview-eb-mpcore",
>     .desc = "ARM RealView Emulation Baseboard (ARM11MPCore)",
>     .init = realview_eb_mpcore_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> @@ -379,13 +379,14 @@ static QEMUMachine realview_pb_a8_machine = {
>     .name = "realview-pb-a8",
>     .desc = "ARM RealView Platform Baseboard for Cortex-A8",
>     .init = realview_pb_a8_init,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine realview_pbx_a9_machine = {
>     .name = "realview-pbx-a9",
>     .desc = "ARM RealView Platform Baseboard Explore for Cortex-A9",
>     .init = realview_pbx_a9_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c
> index 685cb54..ebec844 100644
> --- a/hw/s390-virtio.c
> +++ b/hw/s390-virtio.c
> @@ -315,21 +315,6 @@ static void s390_init(QEMUMachineInitArgs *args)
>         qdev_set_nic_properties(dev, nd);
>         qdev_init_nofail(dev);
>     }
> -
> -    /* Create VirtIO disk drives */
> -    for(i = 0; i < MAX_BLK_DEVS; i++) {
> -        DriveInfo *dinfo;
> -        DeviceState *dev;
> -
> -        dinfo = drive_get(IF_IDE, 0, i);
> -        if (!dinfo) {
> -            continue;
> -        }
> -
> -        dev = qdev_create((BusState *)s390_bus, "virtio-blk-s390");
> -        qdev_prop_set_drive_nofail(dev, "drive", dinfo->bdrv);
> -        qdev_init_nofail(dev);
> -    }
> }
> 
> static QEMUMachine s390_machine = {
> @@ -337,6 +322,7 @@ static QEMUMachine s390_machine = {
>     .alias = "s390",
>     .desc = "VirtIO based S390 machine",
>     .init = s390_init,
> +    .block_default = DEFAULT_VIRTIO,
>     .no_cdrom = 1,
>     .no_floppy = 1,
>     .no_serial = 1,
> diff --git a/hw/spapr.c b/hw/spapr.c
> index ad3f0ea..27cf76c 100644
> --- a/hw/spapr.c
> +++ b/hw/spapr.c
> @@ -924,9 +924,9 @@ static QEMUMachine spapr_machine = {
>     .desc = "pSeries Logical Partition (PAPR compliant)",
>     .init = ppc_spapr_init,
>     .reset = ppc_spapr_reset,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = MAX_CPUS,
>     .no_parallel = 1,
> -    .use_scsi = 1,
> };
> 
> static void spapr_machine_init(void)
> diff --git a/hw/sun4m.c b/hw/sun4m.c
> index 1a78676..fff9437 100644
> --- a/hw/sun4m.c
> +++ b/hw/sun4m.c
> @@ -1426,7 +1426,7 @@ static QEMUMachine ss5_machine = {
>     .name = "SS-5",
>     .desc = "Sun4m platform, SPARCstation 5",
>     .init = ss5_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .is_default = 1,
> };
> 
> @@ -1434,7 +1434,7 @@ static QEMUMachine ss10_machine = {
>     .name = "SS-10",
>     .desc = "Sun4m platform, SPARCstation 10",
>     .init = ss10_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> @@ -1442,7 +1442,7 @@ static QEMUMachine ss600mp_machine = {
>     .name = "SS-600MP",
>     .desc = "Sun4m platform, SPARCserver 600MP",
>     .init = ss600mp_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> @@ -1450,7 +1450,7 @@ static QEMUMachine ss20_machine = {
>     .name = "SS-20",
>     .desc = "Sun4m platform, SPARCstation 20",
>     .init = ss20_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> @@ -1458,35 +1458,35 @@ static QEMUMachine voyager_machine = {
>     .name = "Voyager",
>     .desc = "Sun4m platform, SPARCstation Voyager",
>     .init = vger_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine ss_lx_machine = {
>     .name = "LX",
>     .desc = "Sun4m platform, SPARCstation LX",
>     .init = ss_lx_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine ss4_machine = {
>     .name = "SS-4",
>     .desc = "Sun4m platform, SPARCstation 4",
>     .init = ss4_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine scls_machine = {
>     .name = "SPARCClassic",
>     .desc = "Sun4m platform, SPARCClassic",
>     .init = scls_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine sbook_machine = {
>     .name = "SPARCbook",
>     .desc = "Sun4m platform, SPARCbook",
>     .init = sbook_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static const struct sun4d_hwdef sun4d_hwdefs[] = {
> @@ -1709,7 +1709,7 @@ static QEMUMachine ss1000_machine = {
>     .name = "SS-1000",
>     .desc = "Sun4d platform, SPARCserver 1000",
>     .init = ss1000_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 8,
> };
> 
> @@ -1717,7 +1717,7 @@ static QEMUMachine ss2000_machine = {
>     .name = "SS-2000",
>     .desc = "Sun4d platform, SPARCcenter 2000",
>     .init = ss2000_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 20,
> };
> 
> @@ -1896,7 +1896,7 @@ static QEMUMachine ss2_machine = {
>     .name = "SS-2",
>     .desc = "Sun4c platform, SPARCstation 2",
>     .init = ss2_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static void sun4m_register_types(void)
> diff --git a/hw/versatilepb.c b/hw/versatilepb.c
> index 25e652b..3ac6862 100644
> --- a/hw/versatilepb.c
> +++ b/hw/versatilepb.c
> @@ -358,14 +358,14 @@ static QEMUMachine versatilepb_machine = {
>     .name = "versatilepb",
>     .desc = "ARM Versatile/PB (ARM926EJ-S)",
>     .init = vpb_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static QEMUMachine versatileab_machine = {
>     .name = "versatileab",
>     .desc = "ARM Versatile/AB (ARM926EJ-S)",
>     .init = vab_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
> };
> 
> static void versatile_machine_init(void)
> diff --git a/hw/vexpress.c b/hw/vexpress.c
> index d93f057..6971816 100644
> --- a/hw/vexpress.c
> +++ b/hw/vexpress.c
> @@ -477,7 +477,7 @@ static QEMUMachine vexpress_a9_machine = {
>     .name = "vexpress-a9",
>     .desc = "ARM Versatile Express for Cortex-A9",
>     .init = vexpress_a9_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> @@ -485,7 +485,7 @@ static QEMUMachine vexpress_a15_machine = {
>     .name = "vexpress-a15",
>     .desc = "ARM Versatile Express for Cortex-A15",
>     .init = vexpress_a15_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 4,
> };
> 
> diff --git a/hw/xilinx_zynq.c b/hw/xilinx_zynq.c
> index 1f12a3d..97c6403 100644
> --- a/hw/xilinx_zynq.c
> +++ b/hw/xilinx_zynq.c
> @@ -200,7 +200,7 @@ static QEMUMachine zynq_machine = {
>     .name = "xilinx-zynq-a9",
>     .desc = "Xilinx Zynq Platform Baseboard for Cortex-A9",
>     .init = zynq_init,
> -    .use_scsi = 1,
> +    .block_default = DEFAULT_SCSI,
>     .max_cpus = 1,
>     .no_sdcard = 1
> };
> diff --git a/vl.c b/vl.c
> index 4f03a72..3dd0aec 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -885,9 +885,9 @@ static int cleanup_add_fd(QemuOpts *opts, void *opaque)
> 
> static int drive_init_func(QemuOpts *opts, void *opaque)
> {
> -    int *use_scsi = opaque;
> +    BlockDefault *block_default = opaque;
> 
> -    return drive_init(opts, *use_scsi) == NULL;
> +    return drive_init(opts, *block_default) == NULL;
> }
> 
> static int drive_enable_snapshot(QemuOpts *opts, void *opaque)
> @@ -898,14 +898,14 @@ 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, BlockDefault 
> block_default,
>                           BlockInterfaceType type, int index,
>                           const char *optstr)
> {
>     QemuOpts *opts;
> 
>     if (type == IF_DEFAULT) {
> -        type = use_scsi ? IF_SCSI : IF_IDE;
> +        type = block_if_from_default(block_default);
>     }
> 
>     if (!enable || drive_get_by_index(type, index)) {
> @@ -916,7 +916,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, block_default)) {
>         exit(1);
>     }
> }
> @@ -3718,14 +3718,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, 1) != 0) {
>         exit(1);
> +    }
> 
> -    default_drive(default_cdrom, snapshot, machine->use_scsi,
> +    default_drive(default_cdrom, snapshot, machine->block_default,
>                   IF_DEFAULT, 2, CDROM_OPTS);
> -    default_drive(default_floppy, snapshot, machine->use_scsi,
> +    default_drive(default_floppy, snapshot, machine->block_default,
>                   IF_FLOPPY, 0, FD_OPTS);
> -    default_drive(default_sdcard, snapshot, machine->use_scsi,
> +    default_drive(default_sdcard, snapshot, machine->block_default,
>                   IF_SD, 0, SD_OPTS);
> 
>     register_savevm_live(NULL, "ram", 0, 4, &savevm_ram_handlers, NULL);
> -- 
> 1.7.10.1
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]