From patchwork Wed Mar 2 15:46:43 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Roger_Pau_Monn=C3=A9?= X-Patchwork-Id: 8482611 Return-Path: X-Original-To: patchwork-xen-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id AC7AAC0553 for ; Wed, 2 Mar 2016 15:49:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9652820221 for ; Wed, 2 Mar 2016 15:49:40 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F40D120173 for ; Wed, 2 Mar 2016 15:49:34 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1ab8zP-0005Ul-MP; Wed, 02 Mar 2016 15:47:03 +0000 Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.84) (envelope-from ) id 1ab8zP-0005Uf-0d for xen-devel@lists.xenproject.org; Wed, 02 Mar 2016 15:47:03 +0000 Received: from [85.158.139.211] by server-4.bemta-5.messagelabs.com id FC/6D-32753-6FA07D65; Wed, 02 Mar 2016 15:47:02 +0000 X-Env-Sender: prvs=8628b2c55=roger.pau@citrix.com X-Msg-Ref: server-4.tower-206.messagelabs.com!1456933620!26364924!1 X-Originating-IP: [66.165.176.63] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogNjYuMTY1LjE3Ni42MyA9PiAzMDYwNDg=\n, received_headers: No Received headers X-StarScan-Received: X-StarScan-Version: 8.11; banners=-,-,- X-VirusChecked: Checked Received: (qmail 29777 invoked from network); 2 Mar 2016 15:47:01 -0000 Received: from smtp02.citrix.com (HELO SMTP02.CITRIX.COM) (66.165.176.63) by server-4.tower-206.messagelabs.com with RC4-SHA encrypted SMTP; 2 Mar 2016 15:47:01 -0000 X-IronPort-AV: E=Sophos;i="5.22,529,1449532800"; d="scan'208";a="342567090" From: Roger Pau Monne To: Date: Wed, 2 Mar 2016 16:46:43 +0100 Message-ID: <1456933603-1045-1-git-send-email-roger.pau@citrix.com> X-Mailer: git-send-email 2.5.4 (Apple Git-61) MIME-Version: 1.0 X-DLP: MIA1 Cc: Wei Liu , Ian Jackson , Ian Campbell , Roger Pau Monne Subject: [Xen-devel] [PATCH] libxl: introduce LIBXL_VGA_INTERFACE_TYPE_UNKNOWN X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP And use it as the default value for the VGA kind. This allows libxl to set it to the default value later on when the domain type is known. For HVM guests the default value is LIBXL_VGA_INTERFACE_TYPE_CIRRUS while for HVMlite the default value is LIBXL_VGA_INTERFACE_TYPE_NONE. Signed-off-by: Roger Pau Monné Acked-by: Wei Liu --- Cc: Ian Jackson Cc: Ian Campbell Cc: Wei Liu --- Changes since v4: - Return an error when trying to use a VGA card without a device model. - Drop Wei's Ack due to the above change. Changes since v3: - s/UNDEF/UNKNOWN/. - Add a LIBXL_HAVE_VGA_INTERFACE_TYPE_UNKNOWN. --- tools/libxl/libxl.h | 10 ++++++++++ tools/libxl/libxl_create.c | 13 +++++++++++-- tools/libxl/libxl_dm.c | 6 ++++++ tools/libxl/libxl_types.idl | 3 ++- 4 files changed, 29 insertions(+), 3 deletions(-) diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index f9e3ef5..584f8ec 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -895,6 +895,16 @@ void libxl_mac_copy(libxl_ctx *ctx, libxl_mac *dst, libxl_mac *src); ERROR_CHECKPOINT_DEVICE_NOT_SUPPORTED #endif +/* + * LIBXL_HAVE_VGA_INTERFACE_TYPE_UNKNOWN + * + * In the case that LIBXL_HAVE_VGA_INTERFACE_TYPE_UNKNOWN is set the + * libxl_vga_interface_type enumeration type contains a + * LIBXL_VGA_INTERFACE_TYPE_UNKNOWN identifier. This is used to signal + * that a libxl_vga_interface_type type has not been initialized yet. + */ +#define LIBXL_HAVE_VGA_INTERFACE_TYPE_UNKNOWN 1 + typedef char **libxl_string_list; void libxl_string_list_dispose(libxl_string_list *sl); int libxl_string_list_length(const libxl_string_list *sl); diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index f1028bc..9fdf29c 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -222,8 +222,12 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, if (b_info->u.hvm.mmio_hole_memkb == LIBXL_MEMKB_DEFAULT) b_info->u.hvm.mmio_hole_memkb = 0; - if (!b_info->u.hvm.vga.kind) - b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS; + if (b_info->u.hvm.vga.kind == LIBXL_VGA_INTERFACE_TYPE_UNKNOWN) { + if (b_info->device_model_version == LIBXL_DEVICE_MODEL_VERSION_NONE) + b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_NONE; + else + b_info->u.hvm.vga.kind = LIBXL_VGA_INTERFACE_TYPE_CIRRUS; + } if (!b_info->u.hvm.hdtype) b_info->u.hvm.hdtype = LIBXL_HDTYPE_IDE; @@ -257,6 +261,11 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, } break; case LIBXL_DEVICE_MODEL_VERSION_NONE: + if (b_info->u.hvm.vga.kind != LIBXL_VGA_INTERFACE_TYPE_NONE) { + LOG(ERROR, + "guests without a device model cannot have an emulated video card"); + return ERROR_INVAL; + } b_info->video_memkb = 0; break; case LIBXL_DEVICE_MODEL_VERSION_QEMU_XEN: diff --git a/tools/libxl/libxl_dm.c b/tools/libxl/libxl_dm.c index 4aca38e..5e59199 100644 --- a/tools/libxl/libxl_dm.c +++ b/tools/libxl/libxl_dm.c @@ -531,6 +531,9 @@ static int libxl__build_device_model_args_old(libxl__gc *gc, break; case LIBXL_VGA_INTERFACE_TYPE_QXL: break; + default: + LOG(ERROR, "Invalid emulated video card specified"); + return ERROR_INVAL; } if (b_info->u.hvm.boot) { @@ -970,6 +973,9 @@ static int libxl__build_device_model_args_new(libxl__gc *gc, GCSPRINTF("qxl-vga,vram_size_mb=%"PRIu64",ram_size_mb=%"PRIu64, (b_info->video_memkb/2/1024), (b_info->video_memkb/2/1024) ) ); break; + default: + LOG(ERROR, "Invalid emulated video card specified"); + return ERROR_INVAL; } if (b_info->u.hvm.boot) { diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index 632c009..67bbd86 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -204,11 +204,12 @@ libxl_shutdown_reason = Enumeration("shutdown_reason", [ ], init_val = "LIBXL_SHUTDOWN_REASON_UNKNOWN") libxl_vga_interface_type = Enumeration("vga_interface_type", [ + (0, "UNKNOWN"), (1, "CIRRUS"), (2, "STD"), (3, "NONE"), (4, "QXL"), - ], init_val = "LIBXL_VGA_INTERFACE_TYPE_CIRRUS") + ], init_val = "LIBXL_VGA_INTERFACE_TYPE_UNKNOWN") libxl_vendor_device = Enumeration("vendor_device", [ (0, "NONE"),