qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC PATCH v2 02/15] qapi: Eliminate indirection throug


From: Markus Armbruster
Subject: Re: [Qemu-devel] [RFC PATCH v2 02/15] qapi: Eliminate indirection through qmp_event_get_func_emit()
Date: Wed, 19 Dec 2018 07:56:52 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux)

Eric Blake <address@hidden> writes:

> On 12/18/18 12:22 PM, Markus Armbruster wrote:
>> The qapi_event_send_FOO() functions emit events like this:
>>
>>      QMPEventFuncEmit emit;
>>
>>      emit = qmp_event_get_func_emit();
>>      if (!emit) {
>>          return;
>>      }
>>
>
>>      emit(QAPI_EVENT_FOO, qmp);
>>
>
>> More seriously: how does this work even now?  qemu-system-FOO wants
>> QAPIEvent, and passes a function taking that to
>> qmp_event_set_func_emit().  test-qmp-event wants test_QAPIEvent, and
>> passes a function taking that to qmp_event_set_func_emit().
>>
>> I works by type trickery, of course:
>
> s/I/It/

Of course.

>>
>>      typedef void (*QMPEventFuncEmit)(unsigned event, QDict *dict);
>>
>>      void qmp_event_set_func_emit(QMPEventFuncEmit emit);
>>
>>      QMPEventFuncEmit qmp_event_get_func_emit(void);
>>
>> We use unsigned instead of the enumeration type.  Relies on both
>> enumerations boiling down to unsigned, which happens to be true for
>> the compilers we use.
>>
>> Clean this up as follows:
>>
>> * Generate qapi_event_send_FOO() that call PREFIX_qapi_event_emit()
>>    instead of the value of qmp_event_set_func_emit().
>>
>> * Generate a prototype for PREFIX_qapi_event_emit() into
>>    qapi-events.h.
>>
>> * PREFIX_ is empty for qapi/qapi-schema.json, and test_ for
>>    tests/qapi-schema/qapi-schema-test.json.  It's qga_ for
>>    qga/qapi-schema.json, and doc-good- for
>>    tests/qapi-schema/doc-good-qapi-doc.texi, but those don't define any
>>    events.
>
> Wait - PREFIX is qga_ or doc_good_...

Yes.

>> * Add a qapi_event_emit() that does nothing to stubs/monitor.c.  This
>>    takes care of all other programs that link code emitting QMP events.
>
> ...but the stub function is defined without a prefix?

It's defined with a prefix, except in the commit message ;)  Will fix,
thanks!



reply via email to

[Prev in Thread] Current Thread [Next in Thread]