[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] hmp/qxl: info spice: add qxl info
From: |
Alon Levy |
Subject: |
Re: [Qemu-devel] [PATCH] hmp/qxl: info spice: add qxl info |
Date: |
Thu, 24 May 2012 18:19:05 +0300 |
User-agent: |
Mutt/1.5.21 (2011-07-01) |
On Thu, May 24, 2012 at 06:09:51PM +0300, Alon Levy wrote:
> For all devices print id, mode and guest_bug status.
>
> Known problems: Prints devices from highest id to lowest.
>
> Signed-off-by: Alon Levy <address@hidden>
> ---
> Fixed the documentation to match the command (no more qxl0).
>
> Sending to QMP maintainers per Kraxel's request for an additional ack.
>
> Alon
Self NACK.
Missing a previous patch, this thing won't compile even, sorry. I'll
send a second revision.
>
> hmp.c | 11 +++++++++++
> hw/qxl.c | 22 ++++++++++++++++++++++
> qapi-schema.json | 45 +++++++++++++++++++++++++++++++++++++++++++--
> ui/qemu-spice.h | 5 +++++
> ui/spice-core.c | 48 +++++++++++++++++++++++++++++++++++++++++++++++-
> 5 files changed, 128 insertions(+), 3 deletions(-)
>
> diff --git a/hmp.c b/hmp.c
> index bb0952e..5126921 100644
> --- a/hmp.c
> +++ b/hmp.c
> @@ -331,6 +331,7 @@ void hmp_info_spice(Monitor *mon)
> {
> SpiceChannelList *chan;
> SpiceInfo *info;
> + QXLInfoList *qxl;
>
> info = qmp_query_spice(NULL);
>
> @@ -353,6 +354,16 @@ void hmp_info_spice(Monitor *mon)
> monitor_printf(mon, " mouse-mode: %s\n",
> SpiceQueryMouseMode_lookup[info->mouse_mode]);
>
> + for (qxl = info->qxl; qxl; qxl = qxl->next) {
> + if (qxl->value->guest_bug == -1 || qxl->value->mode == -1) {
> + continue;
> + }
> + monitor_printf(mon, "qxl-%"PRId64":\n", qxl->value->id);
> + monitor_printf(mon, " mode: %s\n",
> + SpiceQueryQXLMode_lookup[qxl->value->mode]);
> + monitor_printf(mon, " guest_bug: %"PRIu64"\n",
> qxl->value->guest_bug);
> + }
> +
> if (!info->has_channels || info->channels == NULL) {
> monitor_printf(mon, "Channels: none\n");
> } else {
> diff --git a/hw/qxl.c b/hw/qxl.c
> index 5a7be60..05ff176 100644
> --- a/hw/qxl.c
> +++ b/hw/qxl.c
> @@ -1701,6 +1701,28 @@ static DisplayChangeListener display_listener = {
> .dpy_refresh = display_refresh,
> };
>
> +/* helpers for spice_info */
> +int qxl_get_guest_bug(DeviceState *dev)
> +{
> + PCIQXLDevice *qxl = DO_UPCAST(PCIQXLDevice, pci.qdev, dev);
> +
> + return qxl->guest_bug;
> +}
> +
> +int qxl_get_mode(DeviceState *dev)
> +{
> + PCIQXLDevice *qxl = DO_UPCAST(PCIQXLDevice, pci.qdev, dev);
> +
> + return qxl->mode;
> +}
> +
> +int qxl_get_id(DeviceState *dev)
> +{
> + PCIQXLDevice *qxl = DO_UPCAST(PCIQXLDevice, pci.qdev, dev);
> +
> + return qxl->id;
> +}
> +
> static void qxl_init_ramsize(PCIQXLDevice *qxl, uint32_t ram_min_mb)
> {
> /* vga ram (bar 0) */
> diff --git a/qapi-schema.json b/qapi-schema.json
> index 2ca7195..22a9034 100644
> --- a/qapi-schema.json
> +++ b/qapi-schema.json
> @@ -638,7 +638,7 @@
> ##
> # @SpiceQueryMouseMode
> #
> -# An enumation of Spice mouse states.
> +# An enumeration of Spice mouse states.
> #
> # @client: Mouse cursor position is determined by the client.
> #
> @@ -655,6 +655,44 @@
> 'data': [ 'client', 'server', 'unknown' ] }
>
> ##
> +# @SpiceQueryQXLMode
> +#
> +# An enumeration of QXL States.
> +#
> +# @undefined: guest driver in control but no primary device. Reached after a
> destroy primary IO
> +# from native mode.
> +#
> +# @vga: no device driver in control. default mode, returns to it after any
> vga port access.
> +#
> +# @compat: No information is available about mouse mode used by
> +# the spice server.
> +#
> +# @native: guest driver in control of device. Reached after a create primary
> IO.
> +#
> +# Note: hw/qxl.h has a qxl_mode enum, name chose to not confuse the two.
> +#
> +# Since: 1.1
> +##
> +{ 'enum': 'SpiceQueryQXLMode',
> + 'data': [ 'undefined', 'vga', 'compat', 'native' ] }
> +
> +##
> +# @QXLInfo
> +#
> +# Information about a QXL device.
> +#
> +# @id: qxl id, non negative integer, 0 for primary device.
> +#
> +# @guest_bug: Has a guest error been detected.
> +#
> +# @mode: Mode of device, based on guest activity.
> +#
> +# Since: 1.1
> +##
> +{ 'type': 'QXLInfo',
> + 'data': {'id': 'int', 'guest_bug': 'int', 'mode': 'SpiceQueryQXLMode'} }
> +
> +##
> # @SpiceInfo
> #
> # Information about the SPICE session.
> @@ -683,12 +721,15 @@
> #
> # @channels: a list of @SpiceChannel for each active spice channel
> #
> +# @qxl: a list of @QXLInfo for each qxl device.
> +#
> # Since: 0.14.0
> ##
> { 'type': 'SpiceInfo',
> 'data': {'enabled': 'bool', '*host': 'str', '*port': 'int',
> '*tls-port': 'int', '*auth': 'str', '*compiled-version': 'str',
> - 'mouse-mode': 'SpiceQueryMouseMode', '*channels':
> ['SpiceChannel']} }
> + 'mouse-mode': 'SpiceQueryMouseMode', '*channels':
> ['SpiceChannel'],
> + 'qxl': ['QXLInfo']} }
>
> ##
> # @query-spice
> diff --git a/ui/qemu-spice.h b/ui/qemu-spice.h
> index 3299da8..edcf3a5 100644
> --- a/ui/qemu-spice.h
> +++ b/ui/qemu-spice.h
> @@ -47,6 +47,11 @@ void do_info_spice(Monitor *mon, QObject **ret_data);
>
> CharDriverState *qemu_chr_open_spice(QemuOpts *opts);
>
> +/* implemented in hw/qxl.c */
> +int qxl_get_guest_bug(DeviceState *dev);
> +int qxl_get_mode(DeviceState *dev);
> +int qxl_get_id(DeviceState *dev);
> +
> #else /* CONFIG_SPICE */
> #include "monitor.h"
>
> diff --git a/ui/spice-core.c b/ui/spice-core.c
> index 4fc48f8..25833e5 100644
> --- a/ui/spice-core.c
> +++ b/ui/spice-core.c
> @@ -22,7 +22,6 @@
> #include "sysemu.h"
>
> #include "qemu-common.h"
> -#include "qemu-spice.h"
> #include "qemu-thread.h"
> #include "qemu-timer.h"
> #include "qemu-queue.h"
> @@ -37,6 +36,8 @@
> #include "migration.h"
> #include "monitor.h"
> #include "hw/hw.h"
> +#include "hw/qdev.h"
> +#include "qemu-spice.h"
>
> /* core bits */
>
> @@ -419,6 +420,50 @@ static SpiceChannelList *qmp_query_spice_channels(void)
> return head;
> }
>
> +static int qdev_walk_qxl(DeviceState *dev, void *opaque)
> +{
> + QXLInfoList **cur = opaque;
> + QXLInfoList *qxl_info;
> + int first = 0;
> + const char *class_name = object_get_typename(OBJECT(dev));
> +
> + if (strcmp(class_name, "qxl") != 0 &&
> + strcmp(class_name, "qxl-vga") != 0) {
> + return 0;
> + }
> + if ((*cur)->value == NULL) {
> + first = 1;
> + qxl_info = *cur;
> + } else {
> + qxl_info = g_malloc(sizeof(*qxl_info));
> + }
> + qxl_info->next = NULL;
> + qxl_info->value = g_malloc(sizeof(*qxl_info->value));
> + qxl_info->value->id = qxl_get_id(dev);
> + qxl_info->value->guest_bug = qxl_get_guest_bug(dev);
> + qxl_info->value->mode = qxl_get_mode(dev);
> + if (!first) {
> + (*cur)->next = qxl_info;
> + *cur = qxl_info;
> + }
> + return 0;
> +}
> +
> +static int qbus_walk_all(BusState *bus, void *opaque)
> +{
> + return 0;
> +}
> +
> +static QXLInfoList *qmp_query_qxl(void)
> +{
> + QXLInfoList *root = g_malloc0(sizeof(*root));
> + QXLInfoList *cur = root;
> + BusState *default_bus = sysbus_get_default();
> +
> + qbus_walk_children(default_bus, qdev_walk_qxl, qbus_walk_all, &cur);
> + return root;
> +}
> +
> SpiceInfo *qmp_query_spice(Error **errp)
> {
> QemuOpts *opts = QTAILQ_FIRST(&qemu_spice_opts.head);
> @@ -461,6 +506,7 @@ SpiceInfo *qmp_query_spice(Error **errp)
> info->has_tls_port = true;
> info->tls_port = tls_port;
> }
> + info->qxl = qmp_query_qxl();
>
> #if SPICE_SERVER_VERSION >= 0x000a03 /* 0.10.3 */
> info->mouse_mode = spice_server_is_server_mouse(spice_server) ?
> --
> 1.7.10.1
>
>
- [Qemu-devel] [PATCH] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/24
- Re: [Qemu-devel] [PATCH] hmp/qxl: info spice: add qxl info,
Alon Levy <=
- [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/24
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Luiz Capitulino, 2012/05/25
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/28
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Luiz Capitulino, 2012/05/28
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/28
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Luiz Capitulino, 2012/05/28
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Gerd Hoffmann, 2012/05/29
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/29
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Luiz Capitulino, 2012/05/29
- Re: [Qemu-devel] [PATCH v2] hmp/qxl: info spice: add qxl info, Alon Levy, 2012/05/29