Philippe Mathieu-Daudé <phi...@redhat.com> writes: > 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.
Nice. > With that: > Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com> Thanks!