[Spice-devel] [PATCH spice v3 4/7] server/red_dispatcher: client_monitors_config support
Hans de Goede
hdegoede at redhat.com
Wed Sep 12 06:51:49 PDT 2012
ACK.
On 09/12/2012 03:13 PM, Alon Levy wrote:
> Adds two functions:
> - red_dispatcher_use_client_monitors_config:
> check that QXLInterface supports client_monitors_config and that it's
> functional.
> - red_dispatcher_client_monitors_config:
> send the client monitors configuration to the guest.
> ---
> server/red_dispatcher.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
> server/red_dispatcher.h | 4 ++++
> 2 files changed, 53 insertions(+)
>
> diff --git a/server/red_dispatcher.c b/server/red_dispatcher.c
> index 3a4229e..39d05ab 100644
> --- a/server/red_dispatcher.c
> +++ b/server/red_dispatcher.c
> @@ -83,6 +83,22 @@ extern spice_wan_compression_t zlib_glz_state;
>
> static RedDispatcher *dispatchers = NULL;
>
> +static int red_dispatcher_version_check(int major, int minor)
> +{
> + if (num_active_workers > 0) {
> + RedDispatcher *now = dispatchers;
> + while (now) {
> + if (now->base.major_version != major ||
> + now->base.minor_version < minor) {
> + return FALSE;
> + }
> + now = now->next;
> + }
> + return TRUE;
> + }
> + return FALSE;
> +}
> +
> static void red_dispatcher_set_display_peer(RedChannel *channel, RedClient *client,
> RedsStream *stream, int migration,
> int num_common_caps, uint32_t *common_caps, int num_caps,
> @@ -295,6 +311,39 @@ static void red_dispatcher_update_area(RedDispatcher *dispatcher, uint32_t surfa
> &payload);
> }
>
> +int red_dispatcher_use_client_monitors_config(void)
> +{
> + RedDispatcher *now = dispatchers;
> +
> + if (num_active_workers == 0) {
> + return FALSE;
> + }
> +
> + for (; now ; now = now->next) {
> + if (!red_dispatcher_version_check(3, 3) ||
> + !now->qxl->st->qif->client_monitors_config ||
> + !now->qxl->st->qif->client_monitors_config(now->qxl, NULL)) {
> + return FALSE;
> + }
> + }
> + return TRUE;
> +}
> +
> +void red_dispatcher_client_monitors_config(VDAgentMonitorsConfig *monitors_config)
> +{
> + RedDispatcher *now = dispatchers;
> +
> + while (now) {
> + if (!now->qxl->st->qif->client_monitors_config ||
> + !now->qxl->st->qif->client_monitors_config(now->qxl,
> + monitors_config)) {
> + spice_warning("spice bug: QXLInterface::client_monitors_config"
> + " failed/missing unexpectedly\n");
> + }
> + now = now->next;
> + }
> +}
> +
> static AsyncCommand *async_command_alloc(RedDispatcher *dispatcher,
> RedWorkerMessage message,
> uint64_t cookie)
> diff --git a/server/red_dispatcher.h b/server/red_dispatcher.h
> index 7e9ffe6..17eeb29 100644
> --- a/server/red_dispatcher.h
> +++ b/server/red_dispatcher.h
> @@ -18,6 +18,8 @@
> #ifndef _H_RED_DISPATCHER
> #define _H_RED_DISPATCHER
>
> +#include "red_channel.h"
> +
> struct RedChannelClient;
> typedef struct AsyncCommand AsyncCommand;
>
> @@ -35,6 +37,8 @@ uint32_t red_dispatcher_qxl_ram_size(void);
> int red_dispatcher_qxl_count(void);
> void red_dispatcher_async_complete(struct RedDispatcher *, AsyncCommand *);
> struct Dispatcher *red_dispatcher_get_dispatcher(struct RedDispatcher *);
> +int red_dispatcher_use_client_monitors_config(void);
> +void red_dispatcher_client_monitors_config(VDAgentMonitorsConfig *monitors_config);
>
> typedef struct RedWorkerMessageDisplayConnect {
> RedClient * client;
>
More information about the Spice-devel
mailing list