From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43781) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XorbY-0005JN-20 for qemu-devel@nongnu.org; Thu, 13 Nov 2014 05:26:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XorbR-0006zW-T2 for qemu-devel@nongnu.org; Thu, 13 Nov 2014 05:26:20 -0500 Received: from mx1.redhat.com ([209.132.183.28]:37782) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XorbR-0006zR-LN for qemu-devel@nongnu.org; Thu, 13 Nov 2014 05:26:13 -0500 From: Gerd Hoffmann Date: Thu, 13 Nov 2014 11:26:06 +0100 Message-Id: <1415874366-32521-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1415874366-32521-1-git-send-email-kraxel@redhat.com> References: <1415874366-32521-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PULL for-2.2 2/2] QMP/input-send-event: make console parameter optional List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Marcelo Tosatti , Markus Armbruster , Luiz Capitulino , Gerd Hoffmann , Anthony Liguori , Amos Kong From: Amos Kong The 'QemuConsole' is the input source for handler, we share some input handlers to process the input events from different QemuConsole. Normally we only have one set of keyboard, mouse, usbtablet, etc. The devices have different mask, it's fine to just checking mask to insure that the handler has the ability to process the event. I saw we try to bind console to handler in usb/dev-hid.c, but display always isn't available at that time. If we have multiseat setup (as Gerd said), we only have 'problem' in this case. Actually event from different devices have the same effect for system, it's fine to always use the first available handler without caring about the console. For send-key command, we just pass a NULL for console parameter in calling qemu_input_event_send_key(NULL, ..), but 'input-send-event' needs to care more devices. Conclusion: Generally assigning the special console is meanless, and we can't directly remove the QMP parameter for compatibility. So we can make the parameter optional. The parameter might be useful for some special condition: we have multiple devices without binding console and they all have the ability(mask) to process events, and we don't want to use the first one. Cc: Gerd Hoffmann Cc: Markus Armbruster Cc: Marcelo Tosatti Signed-off-by: Amos Kong Reviewed-by: Eric Blake Signed-off-by: Gerd Hoffmann --- qapi-schema.json | 4 ++-- qmp-commands.hx | 4 ++-- ui/input.c | 15 +++++++++------ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/qapi-schema.json b/qapi-schema.json index 7e7468f..d0926d9 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -3249,7 +3249,7 @@ # # Send input event(s) to guest. # -# @console: Which console to send event(s) to. +# @console: #optional console to send event(s) to. # # @events: List of InputEvent union. # @@ -3259,7 +3259,7 @@ # ## { 'command': 'input-send-event', - 'data': { 'console':'int', 'events': [ 'InputEvent' ] } } + 'data': { '*console':'int', 'events': [ 'InputEvent' ] } } ## # @NumaOptions diff --git a/qmp-commands.hx b/qmp-commands.hx index 1abd619..8812401 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -3792,7 +3792,7 @@ EQMP { .name = "input-send-event", - .args_type = "console:i,events:q", + .args_type = "console:i?,events:q", .mhandler.cmd_new = qmp_marshal_input_input_send_event, }, @@ -3804,7 +3804,7 @@ Send input event to guest. Arguments: -- "console": console index. +- "console": console index. (json-int, optional) - "events": list of input events. The consoles are visible in the qom tree, under diff --git a/ui/input.c b/ui/input.c index 002831e..37ff46f 100644 --- a/ui/input.c +++ b/ui/input.c @@ -122,16 +122,19 @@ qemu_input_find_handler(uint32_t mask, QemuConsole *con) return NULL; } -void qmp_input_send_event(int64_t console, InputEventList *events, - Error **errp) +void qmp_input_send_event(bool has_console, int64_t console, + InputEventList *events, Error **errp) { InputEventList *e; QemuConsole *con; - con = qemu_console_lookup_by_index(console); - if (!con) { - error_setg(errp, "console %" PRId64 " not found", console); - return; + con = NULL; + if (has_console) { + con = qemu_console_lookup_by_index(console); + if (!con) { + error_setg(errp, "console %" PRId64 " not found", console); + return; + } } if (!runstate_is_running() && !runstate_check(RUN_STATE_SUSPENDED)) { -- 1.8.3.1