[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!
- [Qemu-devel] [RFC PATCH v2 00/15] qapi: add #if pre-processor conditions to generated code (part 3), Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 01/15] qapi: Belatedly update docs for commit 9c2f56e9f9d, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 04/15] build-sys: move qmp-introspect per target, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 03/15] qapi: Generate QAPIEvent stuff into separate files WIP, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 02/15] qapi: Eliminate indirection through qmp_event_get_func_emit(), Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 12/15] qapi: remove qmp_unregister_command(), Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 13/15] Revert "qapi-events: add 'if' condition to implicit event enum", Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 08/15] target.json: add a note about query-cpu* not being s390x-specific, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 15/15] qapi: move RTC_CHANGE to the target schema, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 11/15] qapi: make query-cpu-definitions depend on specific targets, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 10/15] qapi: make query-cpu-model-expansion depend on s390 or x86, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 05/15] qapi: New module target.json, Markus Armbruster, 2018/12/18
- [Qemu-devel] [RFC PATCH v2 09/15] qapi: make query-gic-capabilities depend on TARGET_ARM, Markus Armbruster, 2018/12/18