
On 08/08/14 14:08, Paolo Bonzini wrote:
Il 08/08/2014 12:17, Michal Privoznik ha scritto:
+ if (loader->nvram) { + virBufferFreeAndReset(&buf); + virBufferAsprintf(&buf, + "file=%s,if=pflash,format=raw,unit=1", + loader->nvram); + + virCommandAddArg(cmd, "-drive"); + virCommandAddArgBuffer(cmd, &buf); + }
Note that other machines may not need unit=1, for example pseries doesn't need it (it uses -bios for the firmware, not -drive if=pflash). It would be nice to make this easily configurable.
Alternatively you could use unit=1 if there is a <loader type='pflash'> element, and unit=0 otherwise. We can then patch QEMU to reject unit=1 on machines that use -bios + -drive if=pflash,unit=0.
Laszlo, what happens on x86 with -bios + -drive if=pflash,unit=0?
I checked that earlier (independently of unit=... in the pflash drive). With -bios, you only change the bios filename: case QEMU_OPTION_bios: qemu_opts_set(qemu_find_opts("machine"), 0, "firmware", optarg); [...] bios_name = qemu_opt_get(machine_opts, "firmware"); Code using bios_name is not reached when a pflash drive is present: that would be old_pc_system_rom_init() in "hw/i386/pc_sysfw.c", but its only caller, pc_system_firmware_init(), doesn't call it if there's at least one pflash drive (and you're not running an ISA PC). ... I did find the "firmware" machine property too, but it seems to be used only on s390x. So, in total, as long as you run a PCI-enabled PC (esp. i440fx) machine type, -bios is simply ignored when a pflash drive is present. Thanks Laszlo