qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v2 10/23] block: Eliminate DriveInfo member bdrv


From: Fam Zheng
Subject: Re: [Qemu-devel] [PATCH v2 10/23] block: Eliminate DriveInfo member bdrv, use blk_by_legacy_dinfo()
Date: Mon, 15 Sep 2014 14:58:27 +0800
User-agent: Mutt/1.5.23 (2014-03-12)

On Sat, 09/13 17:00, Markus Armbruster wrote:
> The patch is big, but all it really does is replacing
> 
>     dinfo->bdrv
> 
> by
> 
>     blk_bs(blk_legacy_dinfo(dinfo))

s/blk_legacy_dinfo/blk_by_legacy_dinfo/

Otherwise looks good,

Reviewed-by: Fam Zheng <address@hidden>

> 
> The replacement is repetitive, but the conversion of device models to
> BlockBackend is imminent, and will shorten it to just
> blk_legacy_dinfo(dinfo).
> 
> Line wrapping muddies the waters a bit.  I also omit tests whether
> dinfo->bdrv is null, because it never is.
> 
> Signed-off-by: Markus Armbruster <address@hidden>
> ---
>  blockdev.c                               |  3 +--
>  hw/arm/collie.c                          |  9 +++++----
>  hw/arm/gumstix.c                         |  5 +++--
>  hw/arm/mainstone.c                       |  8 ++++----
>  hw/arm/musicpal.c                        | 11 ++++++-----
>  hw/arm/nseries.c                         |  6 ++++--
>  hw/arm/omap1.c                           |  4 +++-
>  hw/arm/omap2.c                           |  4 +++-
>  hw/arm/omap_sx1.c                        |  9 +++++----
>  hw/arm/pxa2xx.c                          |  7 +++++--
>  hw/arm/spitz.c                           |  4 +++-
>  hw/arm/versatilepb.c                     |  4 +++-
>  hw/arm/vexpress.c                        |  4 +++-
>  hw/arm/xilinx_zynq.c                     |  4 +++-
>  hw/arm/z2.c                              |  7 ++++---
>  hw/block/fdc.c                           | 16 +++++++++++-----
>  hw/block/m25p80.c                        |  5 +++--
>  hw/block/xen_disk.c                      |  2 +-
>  hw/cris/axis_dev88.c                     |  3 ++-
>  hw/display/tc6393xb.c                    |  4 +++-
>  hw/i386/pc_sysfw.c                       |  3 ++-
>  hw/ide/piix.c                            |  6 ++++--
>  hw/ide/qdev.c                            |  4 +++-
>  hw/isa/pc87312.c                         |  7 +++++--
>  hw/lm32/lm32_boards.c                    | 13 +++++++------
>  hw/lm32/milkymist.c                      |  7 ++++---
>  hw/microblaze/petalogix_ml605_mmu.c      |  5 +++--
>  hw/microblaze/petalogix_s3adsp1800_mmu.c |  5 +++--
>  hw/mips/mips_malta.c                     |  4 +++-
>  hw/mips/mips_r4k.c                       |  5 +++--
>  hw/pci/pci-hotplug-old.c                 |  9 ++++++---
>  hw/ppc/ppc405_boards.c                   | 25 ++++++++++++++++---------
>  hw/ppc/spapr.c                           |  4 +++-
>  hw/ppc/virtex_ml507.c                    |  5 +++--
>  hw/scsi/scsi-bus.c                       |  5 +++--
>  hw/sd/milkymist-memcard.c                |  7 +++++--
>  hw/sd/pl181.c                            |  3 ++-
>  hw/sd/sdhci.c                            |  3 ++-
>  hw/sd/ssi-sd.c                           |  3 ++-
>  hw/sh4/r2d.c                             |  5 +++--
>  hw/usb/dev-storage.c                     |  4 +++-
>  hw/xtensa/xtfpga.c                       |  4 +++-
>  include/sysemu/blockdev.h                |  1 -
>  43 files changed, 163 insertions(+), 93 deletions(-)
> 
> diff --git a/blockdev.c b/blockdev.c
> index 85f574b..49496b6 100644
> --- a/blockdev.c
> +++ b/blockdev.c
> @@ -472,7 +472,6 @@ static BlockBackend *blockdev_init(const char *file, 
> QDict *bs_opts,
>  
>      dinfo = g_malloc0(sizeof(*dinfo));
>      dinfo->id = g_strdup(qemu_opts_id(opts));
> -    dinfo->bdrv = bs;
>      blk_set_legacy_dinfo(blk, dinfo);
>  
>      if (!file || !*file) {
> @@ -502,7 +501,7 @@ static BlockBackend *blockdev_init(const char *file, 
> QDict *bs_opts,
>  
>      QINCREF(bs_opts);
>      ret = bdrv_open(&bs, file, NULL, bs_opts, bdrv_flags, drv, &error);
> -    assert(bs == dinfo->bdrv);
> +    assert(bs == blk_bs(blk));
>  
>      if (ret < 0) {
>          error_setg(errp, "could not open disk image %s: %s",
> diff --git a/hw/arm/collie.c b/hw/arm/collie.c
> index ed7851f..0247290 100644
> --- a/hw/arm/collie.c
> +++ b/hw/arm/collie.c
> @@ -15,6 +15,7 @@
>  #include "strongarm.h"
>  #include "hw/arm/arm.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  
> @@ -41,13 +42,13 @@ static void collie_init(MachineState *machine)
>  
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      pflash_cfi01_register(SA_CS0, NULL, "collie.fl1", 0x02000000,
> -                    dinfo ? dinfo->bdrv : NULL, (64 * 1024),
> -                    512, 4, 0x00, 0x00, 0x00, 0x00, 0);
> +                    dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                    (64 * 1024), 512, 4, 0x00, 0x00, 0x00, 0x00, 0);
>  
>      dinfo = drive_get(IF_PFLASH, 0, 1);
>      pflash_cfi01_register(SA_CS1, NULL, "collie.fl2", 0x02000000,
> -                    dinfo ? dinfo->bdrv : NULL, (64 * 1024),
> -                    512, 4, 0x00, 0x00, 0x00, 0x00, 0);
> +                    dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                    (64 * 1024), 512, 4, 0x00, 0x00, 0x00, 0x00, 0);
>  
>      sysbus_create_simple("scoop", 0x40800000, NULL);
>  
> diff --git a/hw/arm/gumstix.c b/hw/arm/gumstix.c
> index 3f8465e..49f9339 100644
> --- a/hw/arm/gumstix.c
> +++ b/hw/arm/gumstix.c
> @@ -40,6 +40,7 @@
>  #include "hw/block/flash.h"
>  #include "hw/devices.h"
>  #include "hw/boards.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "sysemu/qtest.h"
> @@ -71,7 +72,7 @@ static void connex_init(MachineState *machine)
>      be = 0;
>  #endif
>      if (!pflash_cfi01_register(0x00000000, NULL, "connext.rom", connex_rom,
> -                               dinfo ? dinfo->bdrv : NULL,
> +                               dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : 
> NULL,
>                                 sector_len, connex_rom / sector_len,
>                                 2, 0, 0, 0, 0, be)) {
>          fprintf(stderr, "qemu: Error registering flash memory.\n");
> @@ -109,7 +110,7 @@ static void verdex_init(MachineState *machine)
>      be = 0;
>  #endif
>      if (!pflash_cfi01_register(0x00000000, NULL, "verdex.rom", verdex_rom,
> -                               dinfo ? dinfo->bdrv : NULL,
> +                               dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : 
> NULL,
>                                 sector_len, verdex_rom / sector_len,
>                                 2, 0, 0, 0, 0, be)) {
>          fprintf(stderr, "qemu: Error registering flash memory.\n");
> diff --git a/hw/arm/mainstone.c b/hw/arm/mainstone.c
> index 44f1873..fb17d85 100644
> --- a/hw/arm/mainstone.c
> +++ b/hw/arm/mainstone.c
> @@ -18,7 +18,7 @@
>  #include "hw/devices.h"
>  #include "hw/boards.h"
>  #include "hw/block/flash.h"
> -#include "sysemu/blockdev.h"
> +#include "sysemu/block-backend.h"
>  #include "hw/sysbus.h"
>  #include "exec/address-spaces.h"
>  #include "sysemu/qtest.h"
> @@ -148,9 +148,9 @@ static void mainstone_common_init(MemoryRegion 
> *address_space_mem,
>          if (!pflash_cfi01_register(mainstone_flash_base[i], NULL,
>                                     i ? "mainstone.flash1" : 
> "mainstone.flash0",
>                                     MAINSTONE_FLASH,
> -                                   dinfo->bdrv, sector_len,
> -                                   MAINSTONE_FLASH / sector_len, 4, 0, 0, 0, 
> 0,
> -                                   be)) {
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                   sector_len, MAINSTONE_FLASH / sector_len,
> +                                   4, 0, 0, 0, 0, be)) {
>              fprintf(stderr, "qemu: Error registering flash memory.\n");
>              exit(1);
>          }
> diff --git a/hw/arm/musicpal.c b/hw/arm/musicpal.c
> index 6a134f2..6a41d9c 100644
> --- a/hw/arm/musicpal.c
> +++ b/hw/arm/musicpal.c
> @@ -22,6 +22,7 @@
>  #include "hw/block/flash.h"
>  #include "ui/console.h"
>  #include "hw/i2c/i2c.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "ui/pixel_ops.h"
> @@ -1630,7 +1631,9 @@ static void musicpal_init(MachineState *machine)
>      /* Register flash */
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      if (dinfo) {
> -        flash_size = bdrv_getlength(dinfo->bdrv);
> +        BlockDriverState *bs = blk_bs(blk_by_legacy_dinfo(dinfo));
> +
> +        flash_size = bdrv_getlength(bs);
>          if (flash_size != 8*1024*1024 && flash_size != 16*1024*1024 &&
>              flash_size != 32*1024*1024) {
>              fprintf(stderr, "Invalid flash image size\n");
> @@ -1645,16 +1648,14 @@ static void musicpal_init(MachineState *machine)
>  #ifdef TARGET_WORDS_BIGENDIAN
>          pflash_cfi02_register(0x100000000ULL-MP_FLASH_SIZE_MAX, NULL,
>                                "musicpal.flash", flash_size,
> -                              dinfo->bdrv, 0x10000,
> -                              (flash_size + 0xffff) >> 16,
> +                              bs, 0x10000, (flash_size + 0xffff) >> 16,
>                                MP_FLASH_SIZE_MAX / flash_size,
>                                2, 0x00BF, 0x236D, 0x0000, 0x0000,
>                                0x5555, 0x2AAA, 1);
>  #else
>          pflash_cfi02_register(0x100000000ULL-MP_FLASH_SIZE_MAX, NULL,
>                                "musicpal.flash", flash_size,
> -                              dinfo->bdrv, 0x10000,
> -                              (flash_size + 0xffff) >> 16,
> +                              bs, 0x10000, (flash_size + 0xffff) >> 16,
>                                MP_FLASH_SIZE_MAX / flash_size,
>                                2, 0x00BF, 0x236D, 0x0000, 0x0000,
>                                0x5555, 0x2AAA, 0);
> diff --git a/hw/arm/nseries.c b/hw/arm/nseries.c
> index 4f092d6..2536078 100644
> --- a/hw/arm/nseries.c
> +++ b/hw/arm/nseries.c
> @@ -31,6 +31,7 @@
>  #include "hw/hw.h"
>  #include "hw/bt.h"
>  #include "hw/loader.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/sysbus.h"
>  #include "exec/address-spaces.h"
> @@ -172,8 +173,9 @@ static void n8x0_nand_setup(struct n800_s *s)
>      qdev_prop_set_uint16(s->nand, "version_id", 0);
>      qdev_prop_set_int32(s->nand, "shift", 1);
>      dinfo = drive_get(IF_MTD, 0, 0);
> -    if (dinfo && dinfo->bdrv) {
> -        qdev_prop_set_drive_nofail(s->nand, "drive", dinfo->bdrv);
> +    if (dinfo) {
> +        qdev_prop_set_drive_nofail(s->nand, "drive",
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)));
>      }
>      qdev_init_nofail(s->nand);
>      sysbus_connect_irq(SYS_BUS_DEVICE(s->nand), 0,
> diff --git a/hw/arm/omap1.c b/hw/arm/omap1.c
> index e7cc5d7..e38e07f 100644
> --- a/hw/arm/omap1.c
> +++ b/hw/arm/omap1.c
> @@ -21,6 +21,7 @@
>  #include "hw/arm/omap.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/arm/soc_dma.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qemu/range.h"
>  #include "hw/sysbus.h"
> @@ -3976,7 +3977,8 @@ struct omap_mpu_state_s *omap310_mpu_init(MemoryRegion 
> *system_memory,
>          fprintf(stderr, "qemu: missing SecureDigital device\n");
>          exit(1);
>      }
> -    s->mmc = omap_mmc_init(0xfffb7800, system_memory, dinfo->bdrv,
> +    s->mmc = omap_mmc_init(0xfffb7800, system_memory,
> +                           blk_bs(blk_by_legacy_dinfo(dinfo)),
>                             qdev_get_gpio_in(s->ih[1], OMAP_INT_OQN),
>                             &s->drq[OMAP_DMA_MMC_TX],
>                      omap_findclk(s, "mmc_ck"));
> diff --git a/hw/arm/omap2.c b/hw/arm/omap2.c
> index dc53a7a..e47dd63 100644
> --- a/hw/arm/omap2.c
> +++ b/hw/arm/omap2.c
> @@ -18,6 +18,7 @@
>   * with this program; if not, see <http://www.gnu.org/licenses/>.
>   */
>  
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/hw.h"
>  #include "hw/arm/arm.h"
> @@ -2459,7 +2460,8 @@ struct omap_mpu_state_s *omap2420_mpu_init(MemoryRegion 
> *sysmem,
>          fprintf(stderr, "qemu: missing SecureDigital device\n");
>          exit(1);
>      }
> -    s->mmc = omap2_mmc_init(omap_l4tao(s->l4, 9), dinfo->bdrv,
> +    s->mmc = omap2_mmc_init(omap_l4tao(s->l4, 9),
> +                    blk_bs(blk_by_legacy_dinfo(dinfo)),
>                      qdev_get_gpio_in(s->ih[0], OMAP_INT_24XX_MMC_IRQ),
>                      &s->drq[OMAP24XX_DMA_MMC1_TX],
>                      omap_findclk(s, "mmc_fclk"), omap_findclk(s, 
> "mmc_iclk"));
> diff --git a/hw/arm/omap_sx1.c b/hw/arm/omap_sx1.c
> index b4f6da6..f475afc 100644
> --- a/hw/arm/omap_sx1.c
> +++ b/hw/arm/omap_sx1.c
> @@ -31,6 +31,7 @@
>  #include "hw/boards.h"
>  #include "hw/arm/arm.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/qtest.h"
>  #include "exec/address-spaces.h"
> @@ -153,8 +154,8 @@ static void sx1_init(MachineState *machine, const int 
> version)
>      if ((dinfo = drive_get(IF_PFLASH, 0, fl_idx)) != NULL) {
>          if (!pflash_cfi01_register(OMAP_CS0_BASE, NULL,
>                                     "omap_sx1.flash0-1", flash_size,
> -                                   dinfo->bdrv, sector_size,
> -                                   flash_size / sector_size,
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                   sector_size, flash_size / sector_size,
>                                     4, 0, 0, 0, 0, be)) {
>              fprintf(stderr, "qemu: Error registering flash memory %d.\n",
>                             fl_idx);
> @@ -176,8 +177,8 @@ static void sx1_init(MachineState *machine, const int 
> version)
>  
>          if (!pflash_cfi01_register(OMAP_CS1_BASE, NULL,
>                                     "omap_sx1.flash1-1", flash1_size,
> -                                   dinfo->bdrv, sector_size,
> -                                   flash1_size / sector_size,
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                   sector_size, flash1_size / sector_size,
>                                     4, 0, 0, 0, 0, be)) {
>              fprintf(stderr, "qemu: Error registering flash memory %d.\n",
>                             fl_idx);
> diff --git a/hw/arm/pxa2xx.c b/hw/arm/pxa2xx.c
> index 557e0f1..7ec0da8 100644
> --- a/hw/arm/pxa2xx.c
> +++ b/hw/arm/pxa2xx.c
> @@ -14,6 +14,7 @@
>  #include "hw/i2c/i2c.h"
>  #include "hw/ssi.h"
>  #include "sysemu/char.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  
>  static struct {
> @@ -2083,7 +2084,8 @@ PXA2xxState *pxa270_init(MemoryRegion *address_space,
>          fprintf(stderr, "qemu: missing SecureDigital device\n");
>          exit(1);
>      }
> -    s->mmc = pxa2xx_mmci_init(address_space, 0x41100000, dinfo->bdrv,
> +    s->mmc = pxa2xx_mmci_init(address_space, 0x41100000,
> +                    blk_bs(blk_by_legacy_dinfo(dinfo)),
>                      qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC),
>                      qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI),
>                      qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI));
> @@ -2214,7 +2216,8 @@ PXA2xxState *pxa255_init(MemoryRegion *address_space, 
> unsigned int sdram_size)
>          fprintf(stderr, "qemu: missing SecureDigital device\n");
>          exit(1);
>      }
> -    s->mmc = pxa2xx_mmci_init(address_space, 0x41100000, dinfo->bdrv,
> +    s->mmc = pxa2xx_mmci_init(address_space, 0x41100000,
> +                    blk_bs(blk_by_legacy_dinfo(dinfo)),
>                      qdev_get_gpio_in(s->pic, PXA2XX_PIC_MMC),
>                      qdev_get_gpio_in(s->dma, PXA2XX_RX_RQ_MMCI),
>                      qdev_get_gpio_in(s->dma, PXA2XX_TX_RQ_MMCI));
> diff --git a/hw/arm/spitz.c b/hw/arm/spitz.c
> index 03cc6ce..5d684a2 100644
> --- a/hw/arm/spitz.c
> +++ b/hw/arm/spitz.c
> @@ -25,6 +25,7 @@
>  #include "block/block.h"
>  #include "audio/audio.h"
>  #include "hw/boards.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/sysbus.h"
>  #include "exec/address-spaces.h"
> @@ -170,7 +171,8 @@ static int sl_nand_init(SysBusDevice *dev)
>  
>      s->ctl = 0;
>      nand = drive_get(IF_MTD, 0, 0);
> -    s->nand = nand_init(nand ? nand->bdrv : NULL, s->manf_id, s->chip_id);
> +    s->nand = nand_init(nand ? blk_bs(blk_by_legacy_dinfo(nand)) : NULL,
> +                        s->manf_id, s->chip_id);
>  
>      memory_region_init_io(&s->iomem, OBJECT(s), &sl_ops, s, "sl", 0x40);
>      sysbus_init_mmio(dev, &s->iomem);
> diff --git a/hw/arm/versatilepb.c b/hw/arm/versatilepb.c
> index dea5fc7..c88be6b 100644
> --- a/hw/arm/versatilepb.c
> +++ b/hw/arm/versatilepb.c
> @@ -15,6 +15,7 @@
>  #include "hw/pci/pci.h"
>  #include "hw/i2c/i2c.h"
>  #include "hw/boards.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "hw/block/flash.h"
> @@ -337,7 +338,8 @@ static void versatile_init(MachineState *machine, int 
> board_id)
>  
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      if (!pflash_cfi01_register(VERSATILE_FLASH_ADDR, NULL, "versatile.flash",
> -                          VERSATILE_FLASH_SIZE, dinfo ? dinfo->bdrv : NULL,
> +                          VERSATILE_FLASH_SIZE,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
>                            VERSATILE_FLASH_SECT_SIZE,
>                            VERSATILE_FLASH_SIZE / VERSATILE_FLASH_SECT_SIZE,
>                            4, 0x0089, 0x0018, 0x0000, 0x0, 0)) {
> diff --git a/hw/arm/vexpress.c b/hw/arm/vexpress.c
> index a88732c..a492c22 100644
> --- a/hw/arm/vexpress.c
> +++ b/hw/arm/vexpress.c
> @@ -30,6 +30,7 @@
>  #include "hw/boards.h"
>  #include "hw/loader.h"
>  #include "exec/address-spaces.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/block/flash.h"
>  #include "sysemu/device_tree.h"
> @@ -488,7 +489,8 @@ static pflash_t *ve_pflash_cfi01_register(hwaddr base, 
> const char *name,
>  {
>      DeviceState *dev = qdev_create(NULL, "cfi.pflash01");
>  
> -    if (di && qdev_prop_set_drive(dev, "drive", di->bdrv)) {
> +    if (di && qdev_prop_set_drive(dev, "drive",
> +                                  blk_bs(blk_by_legacy_dinfo(di)))) {
>          abort();
>      }
>  
> diff --git a/hw/arm/xilinx_zynq.c b/hw/arm/xilinx_zynq.c
> index ba5aa82..78e6934 100644
> --- a/hw/arm/xilinx_zynq.c
> +++ b/hw/arm/xilinx_zynq.c
> @@ -22,6 +22,7 @@
>  #include "sysemu/sysemu.h"
>  #include "hw/boards.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/loader.h"
>  #include "hw/ssi.h"
> @@ -162,7 +163,8 @@ static void zynq_init(MachineState *machine)
>  
>      /* AMD */
>      pflash_cfi02_register(0xe2000000, NULL, "zynq.pflash", FLASH_SIZE,
> -                          dinfo ? dinfo->bdrv : NULL, FLASH_SECTOR_SIZE,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          FLASH_SECTOR_SIZE,
>                            FLASH_SIZE/FLASH_SECTOR_SIZE, 1,
>                            1, 0x0066, 0x0022, 0x0000, 0x0000, 0x0555, 0x2aa,
>                                0);
> diff --git a/hw/arm/z2.c b/hw/arm/z2.c
> index 36b3b50..9b38a2b 100644
> --- a/hw/arm/z2.c
> +++ b/hw/arm/z2.c
> @@ -20,6 +20,7 @@
>  #include "hw/boards.h"
>  #include "sysemu/sysemu.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "ui/console.h"
>  #include "audio/audio.h"
> @@ -336,9 +337,9 @@ static void z2_init(MachineState *machine)
>  
>      if (!pflash_cfi01_register(Z2_FLASH_BASE,
>                                 NULL, "z2.flash0", Z2_FLASH_SIZE,
> -                               dinfo ? dinfo->bdrv : NULL, sector_len,
> -                               Z2_FLASH_SIZE / sector_len, 4, 0, 0, 0, 0,
> -                               be)) {
> +                               dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : 
> NULL,
> +                               sector_len, Z2_FLASH_SIZE / sector_len,
> +                               4, 0, 0, 0, 0, be)) {
>          fprintf(stderr, "qemu: Error registering flash memory.\n");
>          exit(1);
>      }
> diff --git a/hw/block/fdc.c b/hw/block/fdc.c
> index 490d127..19f215f 100644
> --- a/hw/block/fdc.c
> +++ b/hw/block/fdc.c
> @@ -33,6 +33,7 @@
>  #include "qemu/timer.h"
>  #include "hw/isa/isa.h"
>  #include "hw/sysbus.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/sysemu.h"
>  #include "qemu/log.h"
> @@ -2033,10 +2034,12 @@ ISADevice *fdctrl_init_isa(ISABus *bus, DriveInfo 
> **fds)
>      dev = DEVICE(isadev);
>  
>      if (fds[0]) {
> -        qdev_prop_set_drive_nofail(dev, "driveA", fds[0]->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "driveA",
> +                                   blk_bs(blk_by_legacy_dinfo(fds[0])));
>      }
>      if (fds[1]) {
> -        qdev_prop_set_drive_nofail(dev, "driveB", fds[1]->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "driveB",
> +                                   blk_bs(blk_by_legacy_dinfo(fds[1])));
>      }
>      qdev_init_nofail(dev);
>  
> @@ -2056,10 +2059,12 @@ void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
>      fdctrl = &sys->state;
>      fdctrl->dma_chann = dma_chann; /* FIXME */
>      if (fds[0]) {
> -        qdev_prop_set_drive_nofail(dev, "driveA", fds[0]->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "driveA",
> +                                   blk_bs(blk_by_legacy_dinfo(fds[0])));
>      }
>      if (fds[1]) {
> -        qdev_prop_set_drive_nofail(dev, "driveB", fds[1]->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "driveB",
> +                                   blk_bs(blk_by_legacy_dinfo(fds[1])));
>      }
>      qdev_init_nofail(dev);
>      sbd = SYS_BUS_DEVICE(dev);
> @@ -2075,7 +2080,8 @@ void sun4m_fdctrl_init(qemu_irq irq, hwaddr io_base,
>  
>      dev = qdev_create(NULL, "SUNW,fdtwo");
>      if (fds[0]) {
> -        qdev_prop_set_drive_nofail(dev, "drive", fds[0]->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "drive",
> +                                   blk_bs(blk_by_legacy_dinfo(fds[0])));
>      }
>      qdev_init_nofail(dev);
>      sys = SYSBUS_FDC(dev);
> diff --git a/hw/block/m25p80.c b/hw/block/m25p80.c
> index 5893773..78280a8 100644
> --- a/hw/block/m25p80.c
> +++ b/hw/block/m25p80.c
> @@ -22,6 +22,7 @@
>   */
>  
>  #include "hw/hw.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/ssi.h"
>  
> @@ -624,9 +625,9 @@ static int m25p80_init(SSISlave *ss)
>  
>      dinfo = drive_get_next(IF_MTD);
>  
> -    if (dinfo && dinfo->bdrv) {
> +    if (dinfo) {
>          DB_PRINT_L(0, "Binding to IF_MTD drive\n");
> -        s->bdrv = dinfo->bdrv;
> +        s->bdrv = blk_bs(blk_by_legacy_dinfo(dinfo));
>  
>          /* FIXME: Move to late init */
>          if (bdrv_read(s->bdrv, 0, s->storage, DIV_ROUND_UP(s->size,
> diff --git a/hw/block/xen_disk.c b/hw/block/xen_disk.c
> index 6d474b9..b571bbe 100644
> --- a/hw/block/xen_disk.c
> +++ b/hw/block/xen_disk.c
> @@ -877,7 +877,7 @@ static int blk_connect(struct XenDevice *xendev)
>      } else {
>          /* setup via qemu cmdline -> already setup for us */
>          xen_be_printf(&blkdev->xendev, 2, "get configured bdrv (cmdline 
> setup)\n");
> -        blkdev->bs = blkdev->dinfo->bdrv;
> +        blkdev->bs = blk_bs(blk_by_legacy_dinfo(blkdev->dinfo));
>          if (bdrv_is_read_only(blkdev->bs) && !readonly) {
>              xen_be_printf(&blkdev->xendev, 0, "Unexpected read-only drive");
>              blkdev->bs = NULL;
> diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c
> index 1849338..280722d 100644
> --- a/hw/cris/axis_dev88.c
> +++ b/hw/cris/axis_dev88.c
> @@ -30,6 +30,7 @@
>  #include "hw/loader.h"
>  #include "elf.h"
>  #include "boot.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "sysemu/qtest.h"
> @@ -282,7 +283,7 @@ void axisdev88_init(MachineState *machine)
>  
>        /* Attach a NAND flash to CS1.  */
>      nand = drive_get(IF_MTD, 0, 0);
> -    nand_state.nand = nand_init(nand ? nand->bdrv : NULL,
> +    nand_state.nand = nand_init(nand ? blk_bs(blk_by_legacy_dinfo(nand)) : 
> NULL,
>                                  NAND_MFR_STMICRO, 0x39);
>      memory_region_init_io(&nand_state.iomem, NULL, &nand_ops, &nand_state,
>                            "nand", 0x05000000);
> diff --git a/hw/display/tc6393xb.c b/hw/display/tc6393xb.c
> index f4011d2..62d6663 100644
> --- a/hw/display/tc6393xb.c
> +++ b/hw/display/tc6393xb.c
> @@ -15,6 +15,7 @@
>  #include "hw/block/flash.h"
>  #include "ui/console.h"
>  #include "ui/pixel_ops.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  
>  #define IRQ_TC6393_NAND              0
> @@ -576,7 +577,8 @@ TC6393xbState *tc6393xb_init(MemoryRegion *sysmem, 
> uint32_t base, qemu_irq irq)
>      s->sub_irqs = qemu_allocate_irqs(tc6393xb_sub_irq, s, TC6393XB_NR_IRQS);
>  
>      nand = drive_get(IF_MTD, 0, 0);
> -    s->flash = nand_init(nand ? nand->bdrv : NULL, NAND_MFR_TOSHIBA, 0x76);
> +    s->flash = nand_init(nand ? blk_bs(blk_by_legacy_dinfo(nand)) : NULL,
> +                         NAND_MFR_TOSHIBA, 0x76);
>  
>      memory_region_init_io(&s->iomem, NULL, &tc6393xb_ops, s, "tc6393xb", 
> 0x10000);
>      memory_region_add_subregion(sysmem, base, &s->iomem);
> diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c
> index 75a7ebb..6cd264a 100644
> --- a/hw/i386/pc_sysfw.c
> +++ b/hw/i386/pc_sysfw.c
> @@ -23,6 +23,7 @@
>   * THE SOFTWARE.
>   */
>  
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qemu/error-report.h"
>  #include "hw/sysbus.h"
> @@ -118,7 +119,7 @@ static void pc_system_flash_init(MemoryRegion *rom_memory)
>           (unit < FLASH_MAP_UNIT_MAX &&
>            (pflash_drv = drive_get(IF_PFLASH, 0, unit)) != NULL);
>           ++unit) {
> -        bdrv = pflash_drv->bdrv;
> +        bdrv = blk_bs(blk_by_legacy_dinfo(pflash_drv));
>          size = bdrv_getlength(bdrv);
>          if (size < 0) {
>              fatal_errmsg = g_strdup_printf("failed to get backing file 
> size");
> diff --git a/hw/ide/piix.c b/hw/ide/piix.c
> index 49e78a7..c6c256f 100644
> --- a/hw/ide/piix.c
> +++ b/hw/ide/piix.c
> @@ -27,6 +27,7 @@
>  #include <hw/i386/pc.h>
>  #include <hw/pci/pci.h>
>  #include <hw/isa/isa.h>
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/dma.h"
> @@ -178,9 +179,10 @@ int pci_piix3_xen_ide_unplug(DeviceState *dev)
>      for (; i < 3; i++) {
>          di = drive_get_by_index(IF_IDE, i);
>          if (di != NULL && !di->media_cd) {
> -            DeviceState *ds = bdrv_get_attached_dev(di->bdrv);
> +            BlockDriverState *bs = blk_bs(blk_by_legacy_dinfo(di));
> +            DeviceState *ds = bdrv_get_attached_dev(bs);
>              if (ds) {
> -                bdrv_detach_dev(di->bdrv, ds);
> +                bdrv_detach_dev(bs, ds);
>              }
>              pci_ide->bus[di->bus].ifs[di->unit].bs = NULL;
>              drive_del(di);
> diff --git a/hw/ide/qdev.c b/hw/ide/qdev.c
> index efab95b..75e8eb3 100644
> --- a/hw/ide/qdev.c
> +++ b/hw/ide/qdev.c
> @@ -20,6 +20,7 @@
>  #include "sysemu/dma.h"
>  #include "qemu/error-report.h"
>  #include <hw/ide/internal.h>
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/block/block.h"
>  #include "sysemu/sysemu.h"
> @@ -116,7 +117,8 @@ IDEDevice *ide_create_drive(IDEBus *bus, int unit, 
> DriveInfo *drive)
>  
>      dev = qdev_create(&bus->qbus, drive->media_cd ? "ide-cd" : "ide-hd");
>      qdev_prop_set_uint32(dev, "unit", unit);
> -    qdev_prop_set_drive_nofail(dev, "drive", drive->bdrv);
> +    qdev_prop_set_drive_nofail(dev, "drive",
> +                               blk_bs(blk_by_legacy_dinfo(drive)));
>      qdev_init_nofail(dev);
>      return DO_UPCAST(IDEDevice, qdev, dev);
>  }
> diff --git a/hw/isa/pc87312.c b/hw/isa/pc87312.c
> index 9327c53..b691a0c 100644
> --- a/hw/isa/pc87312.c
> +++ b/hw/isa/pc87312.c
> @@ -25,6 +25,7 @@
>  
>  #include "hw/isa/pc87312.h"
>  #include "qemu/error-report.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/sysemu.h"
>  #include "sysemu/char.h"
> @@ -320,11 +321,13 @@ static void pc87312_realize(DeviceState *dev, Error 
> **errp)
>          qdev_prop_set_uint32(d, "irq", 6);
>          drive = drive_get(IF_FLOPPY, 0, 0);
>          if (drive != NULL) {
> -            qdev_prop_set_drive_nofail(d, "driveA", drive->bdrv);
> +            qdev_prop_set_drive_nofail(d, "driveA",
> +                                       blk_bs(blk_by_legacy_dinfo(drive)));
>          }
>          drive = drive_get(IF_FLOPPY, 0, 1);
>          if (drive != NULL) {
> -            qdev_prop_set_drive_nofail(d, "driveB", drive->bdrv);
> +            qdev_prop_set_drive_nofail(d, "driveB",
> +                                       blk_bs(blk_by_legacy_dinfo(drive)));
>          }
>          qdev_init_nofail(d);
>          s->fdc.dev = isa;
> diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c
> index 0e01340..17c5610 100644
> --- a/hw/lm32/lm32_boards.c
> +++ b/hw/lm32/lm32_boards.c
> @@ -23,6 +23,7 @@
>  #include "hw/devices.h"
>  #include "hw/boards.h"
>  #include "hw/loader.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "elf.h"
>  #include "lm32_hwsetup.h"
> @@ -118,9 +119,9 @@ static void lm32_evr_init(MachineState *machine)
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      /* Spansion S29NS128P */
>      pflash_cfi02_register(flash_base, NULL, "lm32_evr.flash", flash_size,
> -                          dinfo ? dinfo->bdrv : NULL, flash_sector_size,
> -                          flash_size / flash_sector_size, 1, 2,
> -                          0x01, 0x7e, 0x43, 0x00, 0x555, 0x2aa, 1);
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          flash_sector_size, flash_size / flash_sector_size,
> +                          1, 2, 0x01, 0x7e, 0x43, 0x00, 0x555, 0x2aa, 1);
>  
>      /* create irq lines */
>      cpu_irq = qemu_allocate_irqs(cpu_irq_handler, cpu, 1);
> @@ -220,9 +221,9 @@ static void lm32_uclinux_init(MachineState *machine)
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      /* Spansion S29NS128P */
>      pflash_cfi02_register(flash_base, NULL, "lm32_uclinux.flash", flash_size,
> -                          dinfo ? dinfo->bdrv : NULL, flash_sector_size,
> -                          flash_size / flash_sector_size, 1, 2,
> -                          0x01, 0x7e, 0x43, 0x00, 0x555, 0x2aa, 1);
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          flash_sector_size, flash_size / flash_sector_size,
> +                          1, 2, 0x01, 0x7e, 0x43, 0x00, 0x555, 0x2aa, 1);
>  
>      /* create irq lines */
>      cpu_irq = qemu_allocate_irqs(cpu_irq_handler, env, 1);
> diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c
> index 81c3933..904b9c0 100644
> --- a/hw/lm32/milkymist.c
> +++ b/hw/lm32/milkymist.c
> @@ -26,6 +26,7 @@
>  #include "hw/boards.h"
>  #include "hw/loader.h"
>  #include "elf.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "milkymist-hw.h"
>  #include "lm32.h"
> @@ -125,9 +126,9 @@ milkymist_init(MachineState *machine)
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      /* Numonyx JS28F256J3F105 */
>      pflash_cfi01_register(flash_base, NULL, "milkymist.flash", flash_size,
> -                          dinfo ? dinfo->bdrv : NULL, flash_sector_size,
> -                          flash_size / flash_sector_size, 2,
> -                          0x00, 0x89, 0x00, 0x1d, 1);
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          flash_sector_size, flash_size / flash_sector_size,
> +                          2, 0x00, 0x89, 0x00, 0x1d, 1);
>  
>      /* create irq lines */
>      cpu_irq = qemu_allocate_irqs(cpu_irq_handler, cpu, 1);
> diff --git a/hw/microblaze/petalogix_ml605_mmu.c 
> b/hw/microblaze/petalogix_ml605_mmu.c
> index 6843abf..2974791 100644
> --- a/hw/microblaze/petalogix_ml605_mmu.c
> +++ b/hw/microblaze/petalogix_ml605_mmu.c
> @@ -32,6 +32,7 @@
>  #include "sysemu/sysemu.h"
>  #include "hw/devices.h"
>  #include "hw/boards.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/char/serial.h"
>  #include "exec/address-spaces.h"
> @@ -112,8 +113,8 @@ petalogix_ml605_init(MachineState *machine)
>       * 10th paremeter 0 means little-endian */
>      pflash_cfi01_register(FLASH_BASEADDR,
>                            NULL, "petalogix_ml605.flash", FLASH_SIZE,
> -                          dinfo ? dinfo->bdrv : NULL, (64 * 1024),
> -                          FLASH_SIZE >> 16,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          (64 * 1024), FLASH_SIZE >> 16,
>                            2, 0x89, 0x18, 0x0000, 0x0, 0);
>  
>  
> diff --git a/hw/microblaze/petalogix_s3adsp1800_mmu.c 
> b/hw/microblaze/petalogix_s3adsp1800_mmu.c
> index 49dc6d1..a69301f 100644
> --- a/hw/microblaze/petalogix_s3adsp1800_mmu.c
> +++ b/hw/microblaze/petalogix_s3adsp1800_mmu.c
> @@ -30,6 +30,7 @@
>  #include "sysemu/sysemu.h"
>  #include "hw/devices.h"
>  #include "hw/boards.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  
> @@ -92,8 +93,8 @@ petalogix_s3adsp1800_init(MachineState *machine)
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      pflash_cfi01_register(FLASH_BASEADDR,
>                            NULL, "petalogix_s3adsp1800.flash", FLASH_SIZE,
> -                          dinfo ? dinfo->bdrv : NULL, (64 * 1024),
> -                          FLASH_SIZE >> 16,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          (64 * 1024), FLASH_SIZE >> 16,
>                            1, 0x89, 0x18, 0x0000, 0x0, 1);
>  
>      dev = qdev_create(NULL, "xlnx.xps-intc");
> diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
> index cfb60af..9f84ad6 100644
> --- a/hw/mips/mips_malta.c
> +++ b/hw/mips/mips_malta.c
> @@ -44,6 +44,7 @@
>  #include "elf.h"
>  #include "hw/timer/mc146818rtc.h"
>  #include "hw/timer/i8254.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "hw/sysbus.h"             /* SysBusDevice */
> @@ -1035,7 +1036,8 @@ void mips_malta_init(MachineState *machine)
>      }
>  #endif
>      fl = pflash_cfi01_register(FLASH_ADDRESS, NULL, "mips_malta.bios",
> -                               BIOS_SIZE, dinfo ? dinfo->bdrv : NULL,
> +                               BIOS_SIZE,
> +                               dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : 
> NULL,
>                                 65536, fl_sectors,
>                                 4, 0x0000, 0x0000, 0x0000, 0x0000, be);
>      bios = pflash_cfi01_get_memory(fl);
> diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c
> index 7120293..6fd69b9 100644
> --- a/hw/mips/mips_r4k.c
> +++ b/hw/mips/mips_r4k.c
> @@ -24,6 +24,7 @@
>  #include "elf.h"
>  #include "hw/timer/mc146818rtc.h"
>  #include "hw/timer/i8254.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  #include "sysemu/qtest.h"
> @@ -240,8 +241,8 @@ void mips_r4k_init(MachineState *machine)
>      } else if ((dinfo = drive_get(IF_PFLASH, 0, 0)) != NULL) {
>          uint32_t mips_rom = 0x00400000;
>          if (!pflash_cfi01_register(0x1fc00000, NULL, "mips_r4k.bios", 
> mips_rom,
> -                                   dinfo->bdrv, sector_len,
> -                                   mips_rom / sector_len,
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                   sector_len, mips_rom / sector_len,
>                                     4, 0, 0, 0, 0, be)) {
>              fprintf(stderr, "qemu: Error registering flash memory.\n");
>       }
> diff --git a/hw/pci/pci-hotplug-old.c b/hw/pci/pci-hotplug-old.c
> index cf2caeb..e4d51de 100644
> --- a/hw/pci/pci-hotplug-old.c
> +++ b/hw/pci/pci-hotplug-old.c
> @@ -33,6 +33,7 @@
>  #include "hw/scsi/scsi.h"
>  #include "hw/virtio/virtio-blk.h"
>  #include "qemu/config-file.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qapi/error.h"
>  
> @@ -126,8 +127,9 @@ static int scsi_hot_add(Monitor *mon, DeviceState 
> *adapter,
>       */
>      dinfo->unit = qemu_opt_get_number(dinfo->opts, "unit", -1);
>      dinfo->bus = scsibus->busnr;
> -    scsidev = scsi_bus_legacy_add_drive(scsibus, dinfo->bdrv, dinfo->unit,
> -                                        false, -1, NULL, NULL);
> +    scsidev = scsi_bus_legacy_add_drive(scsibus,
> +                                        blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                        dinfo->unit, false, -1, NULL, NULL);
>      if (!scsidev) {
>          return -1;
>      }
> @@ -247,7 +249,8 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
>              return NULL;
>          }
>          dev = pci_create(bus, devfn, "virtio-blk-pci");
> -        if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) {
> +        if (qdev_prop_set_drive(&dev->qdev, "drive",
> +                                blk_bs(blk_by_legacy_dinfo(dinfo))) < 0) {
>              object_unparent(OBJECT(dev));
>              dev = NULL;
>              break;
> diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c
> index 11d3379..7ff5ee5 100644
> --- a/hw/ppc/ppc405_boards.c
> +++ b/hw/ppc/ppc405_boards.c
> @@ -33,6 +33,7 @@
>  #include "qemu/log.h"
>  #include "qemu/error-report.h"
>  #include "hw/loader.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  
> @@ -225,17 +226,19 @@ static void ref405ep_init(MachineState *machine)
>  #ifdef USE_FLASH_BIOS
>      dinfo = drive_get(IF_PFLASH, 0, fl_idx);
>      if (dinfo) {
> -        bios_size = bdrv_getlength(dinfo->bdrv);
> +        BlockDriverState *bs = blk_bs(blk_by_legacy_dinfo(dinfo));
> +
> +        bios_size = bdrv_getlength(bs);
>          fl_sectors = (bios_size + 65535) >> 16;
>  #ifdef DEBUG_BOARD_INIT
>          printf("Register parallel flash %d size %lx"
>                 " at addr %lx '%s' %d\n",
>                 fl_idx, bios_size, -bios_size,
> -               bdrv_get_device_name(dinfo->bdrv), fl_sectors);
> +               bdrv_get_device_name(bs), fl_sectors);
>  #endif
>          pflash_cfi02_register((uint32_t)(-bios_size),
>                                NULL, "ef405ep.bios", bios_size,
> -                              dinfo->bdrv, 65536, fl_sectors, 1,
> +                              bs, 65536, fl_sectors, 1,
>                                2, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 
> 0x2AA,
>                                1);
>          fl_idx++;
> @@ -547,7 +550,9 @@ static void taihu_405ep_init(MachineState *machine)
>  #if defined(USE_FLASH_BIOS)
>      dinfo = drive_get(IF_PFLASH, 0, fl_idx);
>      if (dinfo) {
> -        bios_size = bdrv_getlength(dinfo->bdrv);
> +        BlockDriverState *bs = blk_bs(blk_by_legacy_dinfo(dinfo));
> +
> +        bios_size = bdrv_getlength(bs);
>          /* XXX: should check that size is 2MB */
>          //        bios_size = 2 * 1024 * 1024;
>          fl_sectors = (bios_size + 65535) >> 16;
> @@ -555,11 +560,11 @@ static void taihu_405ep_init(MachineState *machine)
>          printf("Register parallel flash %d size %lx"
>                 " at addr %lx '%s' %d\n",
>                 fl_idx, bios_size, -bios_size,
> -               bdrv_get_device_name(dinfo->bdrv), fl_sectors);
> +               bdrv_get_device_name(bs), fl_sectors);
>  #endif
>          pflash_cfi02_register((uint32_t)(-bios_size),
>                                NULL, "taihu_405ep.bios", bios_size,
> -                              dinfo->bdrv, 65536, fl_sectors, 1,
> +                              bs, 65536, fl_sectors, 1,
>                                4, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 
> 0x2AA,
>                                1);
>          fl_idx++;
> @@ -593,7 +598,9 @@ static void taihu_405ep_init(MachineState *machine)
>      /* Register Linux flash */
>      dinfo = drive_get(IF_PFLASH, 0, fl_idx);
>      if (dinfo) {
> -        bios_size = bdrv_getlength(dinfo->bdrv);
> +        BlockDriverState *bs = blk_bs(blk_by_legacy_dinfo(dinfo));
> +
> +        bios_size = bdrv_getlength(bs);
>          /* XXX: should check that size is 32MB */
>          bios_size = 32 * 1024 * 1024;
>          fl_sectors = (bios_size + 65535) >> 16;
> @@ -601,10 +608,10 @@ static void taihu_405ep_init(MachineState *machine)
>          printf("Register parallel flash %d size %lx"
>                 " at addr " TARGET_FMT_lx " '%s'\n",
>                 fl_idx, bios_size, (target_ulong)0xfc000000,
> -               bdrv_get_device_name(dinfo->bdrv));
> +               bdrv_get_device_name(bs));
>  #endif
>          pflash_cfi02_register(0xfc000000, NULL, "taihu_405ep.flash", 
> bios_size,
> -                              dinfo->bdrv, 65536, fl_sectors, 1,
> +                              bs, 65536, fl_sectors, 1,
>                                4, 0x0001, 0x22DA, 0x0000, 0x0000, 0x555, 
> 0x2AA,
>                                1);
>          fl_idx++;
> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
> index 2ab4460..a577812 100644
> --- a/hw/ppc/spapr.c
> +++ b/hw/ppc/spapr.c
> @@ -29,6 +29,7 @@
>  #include "hw/fw-path-provider.h"
>  #include "elf.h"
>  #include "net/net.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/cpus.h"
>  #include "sysemu/kvm.h"
> @@ -925,7 +926,8 @@ static void spapr_create_nvram(sPAPREnvironment *spapr)
>      DriveInfo *dinfo = drive_get(IF_PFLASH, 0, 0);
>  
>      if (dinfo) {
> -        qdev_prop_set_drive_nofail(dev, "drive", dinfo->bdrv);
> +        qdev_prop_set_drive_nofail(dev, "drive",
> +                                   blk_bs(blk_by_legacy_dinfo(dinfo)));
>      }
>  
>      qdev_init_nofail(dev);
> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
> index 0de5148..a0ce447 100644
> --- a/hw/ppc/virtex_ml507.c
> +++ b/hw/ppc/virtex_ml507.c
> @@ -39,6 +39,7 @@
>  #include "hw/ppc/ppc4xx.h"
>  #include "ppc405.h"
>  
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "qapi/qmp/qerror.h"
>  
> @@ -227,8 +228,8 @@ static void virtex_init(MachineState *machine)
>  
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      pflash_cfi01_register(PFLASH_BASEADDR, NULL, "virtex.flash", FLASH_SIZE,
> -                          dinfo ? dinfo->bdrv : NULL, (64 * 1024),
> -                          FLASH_SIZE >> 16,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          (64 * 1024), FLASH_SIZE >> 16,
>                            1, 0x89, 0x18, 0x0000, 0x0, 1);
>  
>      cpu_irq = (qemu_irq *) &env->irq_inputs[PPC40x_INPUT_INT];
> diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
> index 954c607..f5156ae 100644
> --- a/hw/scsi/scsi-bus.c
> +++ b/hw/scsi/scsi-bus.c
> @@ -3,6 +3,7 @@
>  #include "hw/scsi/scsi.h"
>  #include "block/scsi.h"
>  #include "hw/qdev.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "trace.h"
>  #include "sysemu/dma.h"
> @@ -267,8 +268,8 @@ void scsi_bus_legacy_handle_cmdline(SCSIBus *bus, Error 
> **errp)
>              continue;
>          }
>          qemu_opts_loc_restore(dinfo->opts);
> -        scsi_bus_legacy_add_drive(bus, dinfo->bdrv, unit, false, -1, NULL,
> -                                  &err);
> +        scsi_bus_legacy_add_drive(bus, blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                                  unit, false, -1, NULL, &err);
>          if (err != NULL) {
>              error_report("%s", error_get_pretty(err));
>              error_propagate(errp, err);
> diff --git a/hw/sd/milkymist-memcard.c b/hw/sd/milkymist-memcard.c
> index 2a40f92..501aa3a 100644
> --- a/hw/sd/milkymist-memcard.c
> +++ b/hw/sd/milkymist-memcard.c
> @@ -26,6 +26,7 @@
>  #include "sysemu/sysemu.h"
>  #include "trace.h"
>  #include "qemu/error-report.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/sd.h"
>  
> @@ -252,14 +253,16 @@ static int milkymist_memcard_init(SysBusDevice *dev)
>  {
>      MilkymistMemcardState *s = MILKYMIST_MEMCARD(dev);
>      DriveInfo *dinfo;
> +    BlockDriverState *bs;
>  
>      dinfo = drive_get_next(IF_SD);
> -    s->card = sd_init(dinfo ? dinfo->bdrv : NULL, false);
> +    bs = dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL;
> +    s->card = sd_init(bs, false);
>      if (s->card == NULL) {
>          return -1;
>      }
>  
> -    s->enabled = dinfo ? bdrv_is_inserted(dinfo->bdrv) : 0;
> +    s->enabled = bs && bdrv_is_inserted(bs);
>  
>      memory_region_init_io(&s->regs_region, OBJECT(s), &memcard_mmio_ops, s,
>              "milkymist-memcard", R_MAX * 4);
> diff --git a/hw/sd/pl181.c b/hw/sd/pl181.c
> index 462558b..0501d40 100644
> --- a/hw/sd/pl181.c
> +++ b/hw/sd/pl181.c
> @@ -7,6 +7,7 @@
>   * This code is licensed under the GPL.
>   */
>  
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/sysbus.h"
>  #include "hw/sd.h"
> @@ -490,7 +491,7 @@ static int pl181_init(SysBusDevice *sbd)
>      sysbus_init_irq(sbd, &s->irq[1]);
>      qdev_init_gpio_out(dev, s->cardstatus, 2);
>      dinfo = drive_get_next(IF_SD);
> -    s->card = sd_init(dinfo ? dinfo->bdrv : NULL, false);
> +    s->card = sd_init(dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL, 
> false);
>      if (s->card == NULL) {
>          return -1;
>      }
> diff --git a/hw/sd/sdhci.c b/hw/sd/sdhci.c
> index f9fe700..0b7d754 100644
> --- a/hw/sd/sdhci.c
> +++ b/hw/sd/sdhci.c
> @@ -23,6 +23,7 @@
>   */
>  
>  #include "hw/hw.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/dma.h"
>  #include "qemu/timer.h"
> @@ -1165,7 +1166,7 @@ static void sdhci_initfn(Object *obj)
>      DriveInfo *di;
>  
>      di = drive_get_next(IF_SD);
> -    s->card = sd_init(di ? di->bdrv : NULL, false);
> +    s->card = sd_init(di ? blk_bs(blk_by_legacy_dinfo(di)) : NULL, false);
>      if (s->card == NULL) {
>          exit(1);
>      }
> diff --git a/hw/sd/ssi-sd.c b/hw/sd/ssi-sd.c
> index b012e57..6ae99e4 100644
> --- a/hw/sd/ssi-sd.c
> +++ b/hw/sd/ssi-sd.c
> @@ -10,6 +10,7 @@
>   * GNU GPL, version 2 or (at your option) any later version.
>   */
>  
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "hw/ssi.h"
>  #include "hw/sd.h"
> @@ -255,7 +256,7 @@ static int ssi_sd_init(SSISlave *d)
>  
>      s->mode = SSI_SD_CMD;
>      dinfo = drive_get_next(IF_SD);
> -    s->sd = sd_init(dinfo ? dinfo->bdrv : NULL, true);
> +    s->sd = sd_init(dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL, true);
>      if (s->sd == NULL) {
>          return -1;
>      }
> diff --git a/hw/sh4/r2d.c b/hw/sh4/r2d.c
> index 95c0246..d652619 100644
> --- a/hw/sh4/r2d.c
> +++ b/hw/sh4/r2d.c
> @@ -36,6 +36,7 @@
>  #include "hw/loader.h"
>  #include "hw/usb.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "exec/address-spaces.h"
>  
> @@ -290,8 +291,8 @@ static void r2d_init(MachineState *machine)
>      /* onboard flash memory */
>      dinfo = drive_get(IF_PFLASH, 0, 0);
>      pflash_cfi02_register(0x0, NULL, "r2d.flash", FLASH_SIZE,
> -                          dinfo ? dinfo->bdrv : NULL, (16 * 1024),
> -                          FLASH_SIZE >> 16,
> +                          dinfo ? blk_bs(blk_by_legacy_dinfo(dinfo)) : NULL,
> +                          (16 * 1024), FLASH_SIZE >> 16,
>                            1, 4, 0x0000, 0x0000, 0x0000, 0x0000,
>                            0x555, 0x2aa, 0);
>  
> diff --git a/hw/usb/dev-storage.c b/hw/usb/dev-storage.c
> index eb75f6a..0d6e7c6 100644
> --- a/hw/usb/dev-storage.c
> +++ b/hw/usb/dev-storage.c
> @@ -16,6 +16,7 @@
>  #include "ui/console.h"
>  #include "monitor/monitor.h"
>  #include "sysemu/sysemu.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  
>  //#define DEBUG_MSD
> @@ -704,7 +705,8 @@ static USBDevice *usb_msd_init(USBBus *bus, const char 
> *filename)
>      if (!dev) {
>          return NULL;
>      }
> -    if (qdev_prop_set_drive(&dev->qdev, "drive", dinfo->bdrv) < 0) {
> +    if (qdev_prop_set_drive(&dev->qdev, "drive",
> +                            blk_bs(blk_by_legacy_dinfo(dinfo))) < 0) {
>          object_unparent(OBJECT(dev));
>          return NULL;
>      }
> diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
> index a2dff5a..7c4719e 100644
> --- a/hw/xtensa/xtfpga.c
> +++ b/hw/xtensa/xtfpga.c
> @@ -35,6 +35,7 @@
>  #include "net/net.h"
>  #include "hw/sysbus.h"
>  #include "hw/block/flash.h"
> +#include "sysemu/block-backend.h"
>  #include "sysemu/blockdev.h"
>  #include "sysemu/char.h"
>  #include "sysemu/device_tree.h"
> @@ -229,7 +230,8 @@ static void lx_init(const LxBoardDesc *board, 
> MachineState *machine)
>      if (dinfo) {
>          flash = pflash_cfi01_register(board->flash_base,
>                  NULL, "lx60.io.flash", board->flash_size,
> -                dinfo->bdrv, board->flash_sector_size,
> +                blk_bs(blk_by_legacy_dinfo(dinfo)),
> +                board->flash_sector_size,
>                  board->flash_size / board->flash_sector_size,
>                  4, 0x0000, 0x0000, 0x0000, 0x0000, be);
>          if (flash == NULL) {
> diff --git a/include/sysemu/blockdev.h b/include/sysemu/blockdev.h
> index 2ed297b..75f6ac6 100644
> --- a/include/sysemu/blockdev.h
> +++ b/include/sysemu/blockdev.h
> @@ -30,7 +30,6 @@ typedef enum {
>  } BlockInterfaceType;
>  
>  struct DriveInfo {
> -    BlockDriverState *bdrv;
>      char *id;
>      const char *devaddr;
>      BlockInterfaceType type;
> -- 
> 1.9.3
> 
> 



reply via email to

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