Markus Armbruster <arm...@redhat.com> writes: > Peter Maydell <peter.mayd...@linaro.org> writes: > >> On Fri, 15 Oct 2021 at 16:01, Kevin Wolf <kw...@redhat.com> wrote: >>> QDicts are both what QMP natively uses and what the keyval parser >>> produces. Going through QemuOpts isn't useful for either one, so switch >>> the main device creation function to QDicts. By sharing more code with >>> the -object/object-add code path, we can even reduce the code size a >>> bit. >>> >>> This commit doesn't remove the detour through QemuOpts from any code >>> path yet, but it allows the following commits to do so. >>> >>> Signed-off-by: Kevin Wolf <kw...@redhat.com> >>> Message-Id: <20211008133442.141332-15-kw...@redhat.com> >>> Reviewed-by: Michael S. Tsirkin <m...@redhat.com> >>> Tested-by: Peter Krempa <pkre...@redhat.com> >>> Signed-off-by: Kevin Wolf <kw...@redhat.com> >> >> Hi; we discovered via a report on IRC this this commit broke >> handling of "array properties", of which one example is: >> qemu-system-x86_64 -netdev user,id=a -device rocker,len-ports=1,ports[0]=a >> >> This used to work, and now fails with >> qemu-system-x86_64: -device rocker,len-ports=1,ports[0]=a: Property >> 'rocker.ports[0]' not found >> >> I think this happens because array properties have the >> requirement that the len-foo property is set first before >> any of the foo[n] properties can be set. In the old code >> I guess we used to set properties from the command line >> in the order they were specified, whereas in the new code >> we end up in object_set_properties_from_qdict() which >> tries to set them in whatever order the qdict hash table >> provides them, which turns out to be the wrong one :-( >> >> Any suggestions for how to address this ? > > My initial (knee-jerk) reaction to breaking array properties: Faster, > Pussycat! Kill! Kill! > > Back to serious: replace the implementation of QDict so it iterates in > order?
I just sent [RFC PATCH] qobject: Rewrite implementation of QDict for in-order traversal Message-Id: <20220705095421.2455041-1-arm...@redhat.com> Please test whether this fixes the regressions you observed.