On 8/26/2026 4:07 PM, Richard Henderson wrote:
> On 8/21/26 16:53, Pierrick Bouvier wrote:
>>>>>>>>> Based on this, I'm much more in favor or 1. The fact availability
>>>>>>>>> information is in the same location than type definition is the
>>>>>>>>> biggest
>>>>>>>>> advantage for me.
>>>>>>>>>
>>>>>>>>> On example given above, this would give something like this:
>>>>>>>>> static const TypeInfo emulated_card_info = {
>>>>>>>>>       .name          = TYPE_EMULATED_CCID,
>>>>>>>>>       .parent        = TYPE_CCID_CARD,
>>>>>>>>>       .instance_size = sizeof(EmulatedState),
>>>>>>>>>       .class_init    = emulated_class_initfn,
>>>>>>>>>       .is_available  = target_config_X,
>>>>>>>>> };
>>>>>>>>>
>>>>>>>>> Would that work for you?
>>>>>>>>> Do you have a 3rd way to offer to solve the problem we have?
>>>>>>>> In the case of user creatable objects, we represented a classes'
>>>>>>>> conditional availablity in QAPI schema. For example:
>>>>>>>>
>>>>>>>>    { 'struct': 'InputLinuxProperties',
>>>>>>>>      'data': { 'evdev': 'str',
>>>>>>>>                '*grab_all': 'bool',
>>>>>>>>                '*repeat': 'bool',
>>>>>>>>                '*grab-toggle': 'GrabToggleKeys' },
>>>>>>>>      'if': 'CONFIG_LINUX' }
>>>>>>>>
>>>>>>>> Now this isn't quite a match for what we want, as QAPI schema is
>>>>>>>> common to all targets and used to control the code generator to
>>>>>>>> turn off output. Thus the permitted CONFIG_xxx are only those in
>>>>>>>> config-host.mak, not any from $TARGET-softmmu-config-devices.mak
>>>>>>>>
>>>>>>>> The other scenario in QAPI is the concept of features:
>>>>>>>>
>>>>>>>> { 'struct': 'SevCommonProperties',
>>>>>>>>    'data': { '*sev-device': 'str',
>>>>>>>>              '*cbitpos': 'uint32',
>>>>>>>>              'reduced-phys-bits': 'uint32',
>>>>>>>>              '*kernel-hashes': 'bool' },
>>>>>>>>    'features': ['confidential-guest-reset']}
>>>>>>>>
>>>>>>>> where again we just have a list of named strings. Features are
>>>>>>>> fully
>>>>>>>> dynamic, and crucially they are introspectable so applications can
>>>>>>>> query at runtime what is available.
>>>>>>>>
>>>>>>>> The introspection concept is something that is highly likely to be
>>>>>>>> relevant to our use cases here. If we have a single binary with all
>>>>>>>> types, it would be very valuable to be able to query it once to
>>>>>>>> discover everything in one go, instead of havnig to query it over
>>>>>>>> and over again for each target. That implies the application doing
>>>>>>>> the query needs to be told about per-target usage restrictions on
>>>>>>>> types it is querying.
> 
> Having read through Pierrick's v2, I'm not a fan of inventing a new
> enumeration, creating a switch, calling exactly the functions we could
> have registered directly.
> 
> I think the misunderstanding here, Dan, is that the filter is for the
> non-heterogeneous '-target foo' case.  In the target-foo case, the
> introspection is not highly likely, because we don't have it now.  The
> only point is to have, at the end of registration, exactly the same set
> of classes as we have now.
> 
> The introspection case is perhaps probable in the heterogeneous case,
> where the filtering will not apply.  In the heterogeneous case we just
> register *everything* and let the magic runtime defined machine pick and
> choose.  Thus incorporating the filter into the introspection is
> pointless.  That said, I *suspect* there will be very little in the way
> of introspection at all -- I suspect that users will simply create their
> machine description, attempt to instantiate, and error out if there are
> missing classes.
> 
> Can we please just have a plain callback?
>

Something like:

--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -494,6 +494,7 @@ struct TypeInfo
     void (*class_init)(ObjectClass *klass, const void *data);
     void (*class_base_init)(ObjectClass *klass, const void *data);
     const void *class_data;
+    bool (*is_available)(void);
     const InterfaceInfo *interfaces;

And used as:

...
is_available = target_aarch64.
...

We would keep the exact same set of types registered than today.

Would that work for you Richard?

> 
> r~
> 

Regards,
Pierrick

Reply via email to