On Thu, 19 Dec, 2024, 9:16 pm Philippe Mathieu-Daudé, <phi...@linaro.org>
wrote:

> On 19/12/24 15:07, Ani Sinha wrote:
> > On Thu, Dec 19, 2024 at 6:25 PM Marc-André Lureau
> > <marcandre.lur...@redhat.com> wrote:
> >>
> >> Hi
> >>
> >> On Thu, Dec 19, 2024 at 2:03 PM Philippe Mathieu-Daudé
> >> <phi...@linaro.org> wrote:
> >>>>>> +static const TypeInfo vmfwupdate_device_info = {
> >>>>>> +    .name          = TYPE_VMFWUPDATE,
> >>>>>> +    .parent        = TYPE_DEVICE,
> >>>>>
> >>>>> What is the qdev API used here? Why not use a plain object?
> >>>>
> >>>> I wrote this taking vmcoreinfo device as starting point. I will leave
> this as is for now unless anyone has strong opinions.
> >>>
> >>> We shouldn't blindly copy/paste & spread possible design mistakes.
> >>>
> >>> Marc-André, any particular reason to implement vmcoreinfo using qdev
> >>> and not plain object?
> >>>
> >>
> >> I don't remember (damn 8y ago..). It seems the design changed over
> >> time during review, qdev might have been necessary and stayed this
> >> way.
> >
> > I changed it to TYPE_OBJECT and we get a crash here:
> >
> > #3  0x0000aaaaab207a48 [PAC] in object_class_dynamic_cast_assert
> >      (class=0xaaaaac608880, typename=typename@entry=0xaaaaab4b9630
> > "device", file=file@entry=0xaaaaab4300d0
> > "/workspace/qemu-ani/include/hw/qdev-core.h", line=line@entry=77,
> > func=func@entry=0xaaaaab595a90 <__func__.0> "DEVICE_CLASS") at
> > ../qom/object.c:1021
> > #4  0x0000aaaaaaec2d74 in DEVICE_CLASS (klass=<optimized out>) at
> > /workspace/qemu-ani/include/hw/qdev-core.h:77
> > #5  vmcoreinfo_device_class_init (klass=<optimized out>,
> > data=<optimized out>) at ../hw/misc/vmcoreinfo.c:88
>
> I believe you have enough knowledge to understand the concepts you
> are mixing here. You can not change a type signature without
> implementing its interface (which as you noticed, for QEMU is checked
> at runtime).
>

Yes the point was to quickly try and see changing to DEVICE works. Turned
out that more changes would be required and therefore I left it for the
maintained of that device.


> > Basically doing this would be illegal for vmcoreinfo and we need to
> > adjust the code :
> >
> >     DeviceClass *dc = DEVICE_CLASS(klass);
> >
> >      dc->vmsd = &vmstate_vmcoreinfo;
> >      dc->realize = vmcoreinfo_realize;
> >      dc->hotpluggable = false;
> >      set_bit(DEVICE_CATEGORY_MISC, dc->categories);
>
> See the conversion:
>
> https://lore.kernel.org/qemu-devel/20241219153857.57450-1-phi...@linaro.org/


Yes I see you sent a patch and Dan's response. That was exactly also my
opinion. Vmfwupdate, like vmcoreinfo is like a device not a generic object.
So device type is more appropriate.


> > Anyway, for vmfwupdate, it is actually like a device with device
> properties:
> >
> > +    device_class_set_props(dc, vmfwupdate_properties);
> >
> > So I prefer to make it qdev type for now.
>
> We have the opportunity to start with the correct model.
> Consider simplifying our future (see what is required in
> the suggested vmcoreinfo conversion). Except if you insist
> and commit to do the vmfwupdate later.
>
>

Reply via email to