Eric Blake <ebl...@redhat.com> writes:

> On 06/13/2015 08:20 AM, Markus Armbruster wrote:
>> The traditional QMP command handler interface
>> 
>>     int qmp_FOO(Monitor *mon, const QDict *params, QObject **ret_data);
>> 
>> doesn't provide for returning an Error object.  Instead, the handler
>> is expected to stash it in the monitor with qerror_report().
>> 
>> When we rebased QMP on top of QAPI, we didn't change this interface.
>> Instead, commit 776574d introduced "middle mode" as a temporary aid
>> for converting existing QMP commands to QAPI one by one.  More than
>> three years later, we're still using it.
>> 
>> Middle mode has two effects:
>
> Are these effects documented anywhere, as in docs/qapi-code-gen.txt?
> Should they be, or are we better off trying to get rid of middle mode?

The latter.

>> * Instead of the native input marshallers
>> 
>>       static void qmp_marshal_input_FOO(QDict *, QObject **, Error **)
>> 
>>   it generates input marshallers conforming to the traditional QMP
>>   command handler interface.
>> 
>> * It suppresses generation of code to register them with
>>   qmp_register_command()
>> 
>>   This permits giving them internal linkage.
>> 
>> As long as we need qmp-commands.hx, we can't use the registry behind
>> qmp_register_command(), so the latter has to stay for now.
>
> Is there a qapi marking we can add for this effect, similar to
> 'gen':false?  For that matter...
>
>> 
>> The former has to go to get rid of qerror_report().  Changing all QMP
>> commands to fit the QAPI mold in one go was impractical back when we
>> started, but by now there are just a few stragglers left:
>> do_qmp_capabilities(), qmp_qom_set(), qmp_qom_get(), qmp_object_add(),
>> qmp_netdev_add(), do_device_add().
>
> ...many of these are already using 'gen':false!

Using qmp_register_command() for some commands and qmp-commands.hx for
others doesn't sound appealing.

The best way forward is getting rid of qmp-commands.hx.  Not in this
development cycle, though.

>> Switch middle mode to generate native input marshallers, and adapt the
>> stragglers.  Simplifies both the monitor code and the stragglers.
>> 
>> Rename do_qmp_capabilities() to qmp_capabilities(), and
>> do_device_add() to qmp_device_add, because that's how QMP command
>> handlers are named today.
>> 
>> Signed-off-by: Markus Armbruster <arm...@redhat.com>
>> ---
>>  hmp.c                     |  5 ++++-
>>  include/monitor/monitor.h |  7 +++---
>>  include/monitor/qdev.h    |  3 ++-
>>  include/net/net.h         |  2 +-
>>  monitor.c                 | 24 ++++++---------------
>>  net/net.c                 | 16 ++++++--------
>>  qdev-monitor.c            | 15 ++++++-------
>>  qmp-commands.hx           |  4 ++--
>>  qmp.c | 55 +++++++++++------------------------------------
>>  scripts/qapi-commands.py  | 41 ++++++-----------------------------
>>  util/qemu-error.c         |  4 ++--
>>  11 files changed, 50 insertions(+), 126 deletions(-)
>
> Relatively nice diffstat.
>
> Reviewed-by: Eric Blake <ebl...@redhat.com>

Thanks!

Reply via email to