qmp: Hack to keep commands configuration-specific
We currently define QMP commands in two places: the QAPI schema and qmp-commands.hx. The latter is preprocessed, the former is not. We use the preprocessor to suppress configuration-specific commands. For instance, query-spice is only available #ifdef CONFIG_SPICE. QMP command dispatch and query-commands use the qmp-commands.hx definition, and thus obey the #ifdeffery there. Good, because it lets QMP clients probe for available features more easily. query-qmp-schema uses the QAPI schema, and thus lists the configuration-specific commands even when they're unavailable. Not so good. We're about to flip command dispatch and query-commands to the non-middle-mode command registry, which uses the QAPI schema, so we can ditch qmp-commands.hx. To avoid regressing query-commands, arrange for commands that are suppressed with the preprocessor now to be unregistered with that registry. This will keep them unavailable and out of query-commands when we flip command dispatch and query-commands to that registry, exactly as before. This is a hack. The proper solution is to support configuration-specific commands in the QAPI schema. Mark it FIXME. Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Message-Id: <20160912091913.15831-8-marcandre.lureau@redhat.com>
This commit is contained in:
		
							parent
							
								
									60b03e4e6a
								
							
						
					
					
						commit
						5032a16d1d
					
				
							
								
								
									
										35
									
								
								monitor.c
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								monitor.c
									
									
									
									
									
								
							@ -1008,6 +1008,38 @@ static void qmp_query_qmp_schema(QDict *qdict, QObject **ret_data,
 | 
			
		||||
    *ret_data = qobject_from_json(qmp_schema_json);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Note: right now, this function is never called.  It will be called
 | 
			
		||||
 * shortly when we stop using QAPI 'middle mode'.  The rest of this
 | 
			
		||||
 * comment is written as if that was the case already.
 | 
			
		||||
 *
 | 
			
		||||
 * We used to define commands in qmp-commands.hx in addition to the
 | 
			
		||||
 * QAPI schema.  This permitted defining some of them only in certain
 | 
			
		||||
 * configurations.  query-commands has always reflected that (good,
 | 
			
		||||
 * because it lets QMP clients figure out what's actually available),
 | 
			
		||||
 * while query-qmp-schema never did (not so good).  This function is a
 | 
			
		||||
 * hack to keep the configuration-specific commands defined exactly as
 | 
			
		||||
 * before, even though qmp-commands.hx is gone.
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME Educate the QAPI schema on configuration-specific commands,
 | 
			
		||||
 * and drop this hack.
 | 
			
		||||
 */
 | 
			
		||||
static void qmp_unregister_commands_hack(void)
 | 
			
		||||
{
 | 
			
		||||
#ifndef CONFIG_SPICE
 | 
			
		||||
    qmp_unregister_command("query-spice");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TARGET_I386
 | 
			
		||||
    qmp_unregister_command("rtc-reset-reinjection");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TARGET_S390X
 | 
			
		||||
    qmp_unregister_command("dump-skeys");
 | 
			
		||||
#endif
 | 
			
		||||
#ifndef TARGET_ARM
 | 
			
		||||
    qmp_unregister_command("query-gic-capabilities");
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void qmp_init_marshal(void)
 | 
			
		||||
{
 | 
			
		||||
    qmp_register_command("query-qmp-schema", qmp_query_qmp_schema,
 | 
			
		||||
@ -1016,6 +1048,9 @@ static void qmp_init_marshal(void)
 | 
			
		||||
                         QCO_NO_OPTIONS);
 | 
			
		||||
    qmp_register_command("netdev_add", qmp_netdev_add,
 | 
			
		||||
                         QCO_NO_OPTIONS);
 | 
			
		||||
 | 
			
		||||
    /* call it after the rest of qapi_init() */
 | 
			
		||||
    register_module_init(qmp_unregister_commands_hack, MODULE_INIT_QAPI);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
qapi_init(qmp_init_marshal);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user