On 4/12/19 9:52 AM, Markus Armbruster wrote: > I append a patch I can describe. Would it work for you? > > > > pc: Split pc_system_firmware_init()'s legacy -drive loop > > The loop does two things: map legacy -drive to properties, and collect > all the backends for use after the loop. The next patch will factor > out the former for reuse in hw/arm/virt.c. To make that easier, do > each thing in its own loop. > > Signed-off-by: Markus Armbruster <arm...@redhat.com> > --- > hw/i386/pc_sysfw.c | 14 +++++++++----- > 1 file changed, 9 insertions(+), 5 deletions(-) > > diff --git a/hw/i386/pc_sysfw.c b/hw/i386/pc_sysfw.c > index c628540774..90db9b57a4 100644 > --- a/hw/i386/pc_sysfw.c > +++ b/hw/i386/pc_sysfw.c > @@ -269,6 +269,7 @@ void pc_system_firmware_init(PCMachineState *pcms, > { > PCMachineClass *pcmc = PC_MACHINE_GET_CLASS(pcms); > int i; > + BlockBackend *blk; > DriveInfo *pflash_drv; > BlockBackend *pflash_blk[ARRAY_SIZE(pcms->flash)]; > Location loc; > @@ -280,23 +281,26 @@ 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_blk[i] = pflash_cfi01_get_blk(pcms->flash[i]); > + blk = pflash_cfi01_get_blk(pcms->flash[i]); > pflash_drv = drive_get(IF_PFLASH, 0, i); > if (!pflash_drv) { > continue; > } > loc_push_none(&loc); > qemu_opts_loc_restore(pflash_drv->opts); > - if (pflash_blk[i]) { > + if (blk) { > error_report("clashes with -machine"); > exit(1); > } > - pflash_blk[i] = blk_by_legacy_dinfo(pflash_drv); > - qdev_prop_set_drive(DEVICE(pcms->flash[i]), > - "drive", pflash_blk[i], &error_fatal); > + qdev_prop_set_drive(DEVICE(pcms->flash[i]), "drive", > + blk_by_legacy_dinfo(pflash_drv), &error_fatal); > loc_pop(&loc); > } > > + for (i = 0; i < ARRAY_SIZE(pcms->flash); i++) { > + pflash_blk[i] = blk_by_legacy_dinfo(pflash_drv); > + } > + > /* Reject gaps */ > for (i = 1; i < ARRAY_SIZE(pcms->flash); i++) { > if (pflash_blk[i] && !pflash_blk[i - 1]) { > -- 2.17.2
Works for me! Reviewed-by: Philippe Mathieu-Daudé <phi...@redhat.com>