On 4/16/19 11:13 AM, Markus Armbruster wrote: > Factored out of pc_system_firmware_init() so the next commit can reuse > it in hw/arm/virt.c. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > hw/block/pflash_cfi01.c | 28 ++++++++++++++++++++++++++++ > hw/i386/pc_sysfw.c | 16 ++-------------- > include/hw/block/flash.h | 1 + > 3 files changed, 31 insertions(+), 14 deletions(-) > > diff --git a/hw/block/pflash_cfi01.c b/hw/block/pflash_cfi01.c > index 16dfae14b8..333b736277 100644 > --- a/hw/block/pflash_cfi01.c > +++ b/hw/block/pflash_cfi01.c > @@ -44,9 +44,12 @@ > #include "qapi/error.h" > #include "qemu/timer.h" > #include "qemu/bitops.h" > +#include "qemu/error-report.h" > #include "qemu/host-utils.h" > #include "qemu/log.h" > +#include "qemu/option.h" > #include "hw/sysbus.h" > +#include "sysemu/blockdev.h" > #include "sysemu/sysemu.h" > #include "trace.h" > > @@ -968,6 +971,31 @@ MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl) > return &fl->mem; > } > > +/* > + * Handle -drive if=pflash for machines that use properties. > + * If @dinfo is null, do nothing. > + * Else if @fl's property "drive" is already set, fatal error. > + * Else set it to the BlockBackend with @dinfo. > + */ > +void pflash_cfi01_legacy_drive(PFlashCFI01 *fl, DriveInfo *dinfo) > +{ > + Location loc; > + > + if (!dinfo) { > + return; > + } > + > + loc_push_none(&loc); > + qemu_opts_loc_restore(dinfo->opts); > + if (fl->blk) { > + error_report("clashes with -machine"); > + exit(1); > + } > + qdev_prop_set_drive(DEVICE(fl), "drive", > + blk_by_legacy_dinfo(dinfo), &error_fatal); > + loc_pop(&loc); > +} > + > static void postload_update_cb(void *opaque, int running, RunState state) > { > PFlashCFI01 *pfl = opaque; > diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c > index 75925f5d3f..751fcafa12 100644 > --- a/hw/i386/pc_sysfw.c > +++ b/hw/i386/pc_sysfw.c > @@ -269,9 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms, > { > PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); > int i; > - DriveInfo *pflash_drv; > BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)]; > - Location loc; > > if (!pcmc->pci_enabled) { > old_pc_system_rom_init(rom_memory, true); > @@ -280,18 +278,8 @@ void pc_system_firmware_init(PCMachineState *pcms, > > /* Map legacy -drive if=pflash to machine properties */ > for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) { > - pflash_drv = drive_get(IF_PFLASH, 0, i); > - if (pflash_drv) { > - loc_push_none(&loc); > - qemu_opts_loc_restore(pflash_drv->opts);
You can now remove the '#include "qemu/option.h"' in this file. With that: Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> > - if (pflash_cfi01_get_blk(pcms->flash[i])) { > - error_report("clashes with -machine"); > - exit(1); > - } > - qdev_prop_set_drive(DEVICE(pcms->flash[i]), "drive", > - blk_by_legacy_dinfo(pflash_drv), > &error_fatal); > - loc_pop(&loc); > - } > + pflash_cfi01_legacy_drive(pcms->flash[i], > + drive_get(IF_PFLASH, 0, i)); > pflash_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]); > } > > diff --git a/include/hw/block/flash.h b/include/hw/block/flash.h > index a0f488732a..1acaf7de80 100644 > --- a/include/hw/block/flash.h > +++ b/include/hw/block/flash.h > @@ -24,6 +24,7 @@ PFlashCFI01 *pflash_cfi01_register(hwaddr base, > int be); > BlockBackend *pflash_cfi01_get_blk(PFlashCFI01 *fl); > MemoryRegion *pflash_cfi01_get_memory(PFlashCFI01 *fl); > +void pflash_cfi01_legacy_drive(PFlashCFI01 *dev, DriveInfo *dinfo); > > /* pflash_cfi02.c */ > >