[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: |
Fri, 11 Jan 2019 16:28:45 +0100 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/26.1 (gnu/linux) |
Markus Armbruster <address@hidden> writes:
> 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.
Make that doc-good.json.
>>
>> 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!
Nonsense.
Since PREFIX_ is empty for qapi/qapi-schema.json, the generated
qapi_event_send_EVENT for the EVENT defined there all call
qapi_event_emit().
The stub makes qapi_event_send_EVENT() work for any EVENT defined there
in programs that don't link (non-stub) monitor.c.
PREFIX is non-empty for the other two, but no events are defined there.
qga_qapi_event_emit() and doc_good_qapi_event_emit() are neither used
nor defined anywhere.
Clear now?
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [Qemu-devel] [RFC PATCH v2 02/15] qapi: Eliminate indirection through qmp_event_get_func_emit(),
Markus Armbruster <=