>-----Original Message----- >From: Kevin Wolf <kw...@redhat.com> >Sent: Thursday, February 24, 2022 7:31 PM >To: Duan, Zhenzhong <zhenzhong.d...@intel.com> >Cc: qemu-devel@nongnu.org; pbonz...@redhat.com; ebl...@redhat.com; >m...@redhat.com; pkre...@redhat.com; ler...@redhat.com >Subject: Re: [PATCH] vl: transform QemuOpts device to JSON syntax device > >Am 24.02.2022 um 07:06 hat Zhenzhong Duan geschrieben: >> While there are mixed use of traditional -device option and JSON >> syntax option, QEMU reports conflict, e.x: >> >> /usr/libexec/qemu-kvm -nodefaults \ >> -device '{"driver":"virtio-scsi- >pci","id":"scsi0","bus":"pci.0","addr":"0x02.0"}' \ >> -device virtio-scsi-pci,id=scsi1,bus=pci.0 >> >> It breaks with: >> >> qemu-kvm: -device >> {"driver":"virtio-scsi-pci","id":"scsi0","bus":"pci.0","addr":"0x02.0" >> }: PCI: slot 2 function 0 not available for virtio-scsi-pci, in use by >> virtio-scsi-pci >> >> But if we reformat first -device same as the second, so only same kind >> of option for all the devices, it succeeds, vice versa. e.x: >> >> /usr/libexec/qemu-kvm -nodefaults \ >> -device virtio-scsi-pci,id=scsi0,bus=pci.0,addr=02.0 \ >> -device virtio-scsi-pci,id=scsi1,bus=pci.0 >> >> Succeed! >> >> Because both kind of options are inserted into their own list and >> break the order in QEMU command line during BDF auto assign. Fix it by >> transform QemuOpts into JSON syntax and insert in JSON device list, so >> the order in QEMU command line kept. >> >> Signed-off-by: Zhenzhong Duan <zhenzhong.d...@intel.com> > >This patch is incorrect and breaks several cases, which are the reason why the >QemuOpts path hasn't been changed yet. > >For example, after this patch, help doesn't work any more: > >$ build/qemu-system-x86_64 -device help >qemu-system-x86_64: -device help: 'help' is not a valid device model name > >Any non-string property doesn't work any more in non-JSON syntax: > >$ $ build/qemu-system-x86_64 -blockdev null-co,node-name=disk -device >virtio-blk,drive=disk,physical_block_size=4096 >qemu-system-x86_64: -device virtio-blk,drive=disk,physical_block_size=4096: >Parameter 'physical_block_size' expects uint64 > >There may be more cases that are broken with this patch.
Ah, yes. Thanks for point out. I should have learned more before writing this patch. Sorry for the noise. And we will try the libvirt maintainer suggested way on this issue. Regards Zhenzhong