On Fri, Sep 08, 2023 at 11:25:54AM +0200, Kevin Wolf wrote: > Am 07.09.2023 um 11:35 hat Peter Maydell geschrieben: > > On Thu, 7 Sept 2023 at 10:33, Markus Armbruster <arm...@redhat.com> wrote: > > > > > > Kevin Wolf <kw...@redhat.com> writes: > > > > > > > Am 04.09.2023 um 18:25 hat Daniel P. Berrangé geschrieben: > > > >> By the time of the 8.2.0 release, it will have been 2 years and 6 > > > >> releases since we accidentally broke setting of array properties > > > >> for user creatable devices: > > > >> > > > >> https://gitlab.com/qemu-project/qemu/-/issues/1090 > > > > > > > > Oh, nice! > > > > > > Nice? *Awesome*! > > > > > > > Well, maybe that sounds a bit wrong, but the syntax that was broken was > > > > problematic and more of a hack, > > > > > > A monstrosity, in my opinion. I tried to strangle it in the crib, but > > > its guardians wouldn't let me. Can dig up references for the morbidly > > > curious. > > > > I don't care about the syntax on the command line much (AFAIK that's > > just the rocker device). But the actual feature is used more widely > > within QEMU itself for devices created in C code, which is what it > > was intended for. If you want to get rid of it you need to provide > > an adequate replacement. > > I have a patch to use QList (i.e. JSON lists) that seems to work for the > rocker case. Now I need to find and update all of those internal > callers. Should grepping for '"len-' find all instances that need to be > changed or are you aware of other ways to access the feature?
IMHO we can just leave the internal only code callers unchanged. I was about to send this patch to prevent usage leaking into user creatable devices: diff --git a/hw/core/qdev-properties.c b/hw/core/qdev-properties.c index 357b8761b5..2d295411ef 100644 --- a/hw/core/qdev-properties.c +++ b/hw/core/qdev-properties.c @@ -584,6 +584,12 @@ static void set_prop_arraylen(Object *obj, Visitor *v, const char *name, void *eltptr; const char *arrayname; int i; + DeviceClass *devc = DEVICE_CLASS(object_get_class(obj)); + + if (devc->user_creatable) { + error_setg(errp, "array property not permitted for user creatable devices"); + return; + } if (*alenptr) { error_setg(errp, "array size property %s may not be set more than once", With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|