[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Suspicious QOM types without instance/class size
From: |
Eduardo Habkost |
Subject: |
Re: Suspicious QOM types without instance/class size |
Date: |
Fri, 21 Aug 2020 13:29:27 -0400 |
On Fri, Aug 21, 2020 at 01:53:52PM +0300, Roman Bolshakov wrote:
> On Thu, Aug 20, 2020 at 05:55:29PM -0400, Eduardo Habkost wrote:
> > While trying to convert TypeInfo declarations to the new
> > OBJECT_DECLARE* macros, I've stumbled on a few suspicious cases
> > where instance_size or class_size is not set, despite having type
> > checker macros that use a specific type.
> >
> > The ones with "WARNING" are abstract types (maybe not serious if
> > subclasses set the appropriate sizes). The ones with "ERROR"
> > don't seem to be abstract types.
> >
>
> > ERROR: target/i386/hvf/hvf.c:908:1: instance_size should be set to
> > sizeof(HVFState)?
>
> Hi Eduardo,
>
> How do you get the error?
My script looks for corresponding type checking macros, and check
if instance_size is set to sizeof(T) with the right type from the
type checking macro.
The code is here:
https://github.com/ehabkost/qemu-hacks/blob/920b2c521ad2a29fa663256854e24ed2059ba9cd/scripts/codeconverter/codeconverter/qom_type_info.py#L136
>
> Given your changes, instance size should really be sizeof(HVFState).
>
The changes I've made shouldn't make any difference (if there's
an issue, it is there before or after my series).
> BTW, the object definition for hvf seems different from KVM (and perhaps
> wrong?), e.g. HVFState is allocated within init_machine handler and then
> assigned to a global variable:
Interesting. It looks like hvf_state is _not_ the actual QOM
object instance. The actual TYPE_HVF_ACCEL instance is created
by do_configure_accelerator(). That would explain why the lack
of instance_init never caused any problems.
Luckily, no code ever used the HVF_STATE macro. If
HVF_STATE(hvf_state) got called, it would crash because of
uninitialized object instance data. If HVF_STATE(machine->accel)
got called, it would return an invalid HVFState pointer (not
hvf_state).
I believe the simplest short term solution here is to just delete
the HVF_STATE macro and HVFState::parent field. We can worry
about actually moving hvf_state to the machine->accel QOM object
later.
>
> static int hvf_accel_init(MachineState *ms)
> {
> int x;
> hv_return_t ret;
> HVFState *s;
>
> ret = hv_vm_create(HV_VM_DEFAULT);
> assert_hvf_ok(ret);
>
> s = g_new0(HVFState, 1);
>
> s->num_slots = 32;
> for (x = 0; x < s->num_slots; ++x) {
> s->slots[x].size = 0;
> s->slots[x].slot_id = x;
> }
>
> hvf_state = s;
> cpu_interrupt_handler = hvf_handle_interrupt;
> memory_listener_register(&hvf_memory_listener, &address_space_memory);
> return 0;
> }
>
> static void hvf_accel_class_init(ObjectClass *oc, void *data)
> {
> AccelClass *ac = ACCEL_CLASS(oc);
> ac->name = "HVF";
> ac->init_machine = hvf_accel_init;
> ac->allowed = &hvf_allowed;
> }
>
> static const TypeInfo hvf_accel_type = {
> .name = TYPE_HVF_ACCEL,
> .parent = TYPE_ACCEL,
> .class_init = hvf_accel_class_init,
> };
>
> Thanks,
> Roman
>
--
Eduardo
- Suspicious QOM types without instance/class size, Eduardo Habkost, 2020/08/20
- Re: Suspicious QOM types without instance/class size, David Gibson, 2020/08/20
- Re: Suspicious QOM types without instance/class size, Peter Maydell, 2020/08/21
- Re: Suspicious QOM types without instance/class size, David Hildenbrand, 2020/08/21
- Re: Suspicious QOM types without instance/class size, Cornelia Huck, 2020/08/21
- Re: Suspicious QOM types without instance/class size, Roman Bolshakov, 2020/08/21
- Re: Suspicious QOM types without instance/class size,
Eduardo Habkost <=
- Re: Suspicious QOM types without instance/class size, Eduardo Habkost, 2020/08/21
- Re: Suspicious QOM types without instance/class size, Roman Bolshakov, 2020/08/24
- Re: Suspicious QOM types without instance/class size, Eduardo Habkost, 2020/08/24
- Re: Suspicious QOM types without instance/class size, Roman Bolshakov, 2020/08/24
- Re: Suspicious QOM types without instance/class size, Eduardo Habkost, 2020/08/24
Re: Suspicious QOM types without instance/class size, Alistair Francis, 2020/08/21