• M
    qmp: Wean off qerror_report() · 485febc6
    Markus Armbruster 提交于
    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 776574d6 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:
    
    * 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.
    
    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().
    
    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: NMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: NStefan Hajnoczi <stefanha@redhat.com>
    Reviewed-by: NEric Blake <eblake@redhat.com>
    Reviewed-by: NLuiz Capitulino <lcapitulino@redhat.com>
    485febc6
hmp.c 68.9 KB