From patchwork Mon Oct 1 18:57:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Julien Grall X-Patchwork-Id: 147925 Delivered-To: patch@linaro.org Received: by 2002:a2e:8595:0:0:0:0:0 with SMTP id b21-v6csp4263553lji; Mon, 1 Oct 2018 11:59:54 -0700 (PDT) X-Google-Smtp-Source: ACcGV61DrBKBe3qPMh6PL63qSfj068HOG4fFue1NcW6fEZQz0qJUjuP9Rlg22juQWYNr1YP3QBTq X-Received: by 2002:a24:46cd:: with SMTP id j196-v6mr10964808itb.0.1538420394607; Mon, 01 Oct 2018 11:59:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1538420394; cv=none; d=google.com; s=arc-20160816; b=fLBMctyOC/YtYQNsSj5Hf7mI1d1tsq0KkTCZIxxUv2zFd1Y1iwAOKv0w/pnzVGyloL zrONzrOYQY04op2th6eWqM/sy6HAu+ZrbT4vnz63uxS/aZSUygUDCtgNwp8hvZmPPVPT BtdiZ9pwAi3UptSBzlmmW2tzKcgKl4RGtwi9QL7zPaSS3KvFdY3a3szfBufZSX/Xowun qykIOCSK98cUkoo61BmubbYbX7+ESk/rHct8eeKgFFQftlgyN37O2qTwg34XnaPq2wuT XGacMUs+NglSuDGMw2Yu42qNf64IBLnL48KYkbTjTzKVDSCs/nT5CL+Lf8TRqOVuc4Aw ncKQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc :list-subscribe:list-help:list-post:list-unsubscribe:list-id :precedence:subject:references:in-reply-to:message-id:date:to:from; bh=DnQJjWtiZ8NvXqTLEcPin0NyNYlVcdtLFY/tdyE4LUE=; b=gMPusayT0DrIwPOKczLyCp0WfCN5ftxFYzWyq32B4VYkCLHMQr170YJ/GDBdA2VzMI 3qln8MmNZZm6WGo4QrKGh75D7yYZyh9qfM9OpOl6IKg3SbvC37pK3WfzDLlijYNhOj7a AlbTF2+52TLRMm5g2wDMToNWlr5DOZpl8llRPcyWa+LWsCScotd0hmXpLYYu6DuhIgm3 j9JhCr6NevlJfk3XFae6510p7Qmw/DnNNWeV1L9bQ9wQRSbmy0gssZ+y6uxAZmTN31bJ Uc7F+0tEUZdW36KxXn9jkQXphLNH6CSZVvRhTHlUCvVldzbvZ+xIMsELHIqrOWgHT0CN pfrQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Return-Path: Received: from lists.xenproject.org (lists.xenproject.org. [192.237.175.120]) by mx.google.com with ESMTPS id c4-v6si8597354jag.62.2018.10.01.11.59.54 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 01 Oct 2018 11:59:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of xen-devel-bounces@lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1g73Ny-0001GZ-V7; Mon, 01 Oct 2018 18:57:38 +0000 Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1g73Nx-0001GA-1l for xen-devel@lists.xenproject.org; Mon, 01 Oct 2018 18:57:37 +0000 X-Inumbo-ID: 06854964-c5ac-11e8-a6a9-d7ebe60f679a Received: from foss.arm.com (unknown [217.140.101.70]) by us1-amaz-eas1.inumbo.com (Halon) with ESMTP id 06854964-c5ac-11e8-a6a9-d7ebe60f679a; Mon, 01 Oct 2018 18:58:47 +0000 (UTC) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9F5E77A9; Mon, 1 Oct 2018 11:57:35 -0700 (PDT) Received: from e108454-lin.cambridge.arm.com (e108454-lin.emea.arm.com [10.4.12.35]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 622A13F5B7; Mon, 1 Oct 2018 11:57:34 -0700 (PDT) From: Julien Grall To: xen-devel@lists.xenproject.org Date: Mon, 1 Oct 2018 19:57:21 +0100 Message-Id: <20181001185721.15467-6-julien.grall@arm.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20181001185721.15467-1-julien.grall@arm.com> References: <20181001185721.15467-1-julien.grall@arm.com> Subject: [Xen-devel] [PATCH v3 3/3] tools/libxl: Switch Arm guest type to PVH X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: wei.liu2@citrix.com, Julien Grall , sstabellini@kernel.org, ian.jackson@eu.citrix.com, roger.pau@citrix.com MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Currently, the toolstack is considering Arm guest always PV. However, they are very similar to PVH because HW virtualization extension are used and QEMU is not started. So switch Arm guest type to PVH. To keep compatibility with toolstack creating Arm guest with PV type (e.g libvirt), libxl will now convert those guests to PVH. Furthermore, the default type for Arm in xl will now be PVH to allow smooth transition for user. Signed-off-by: Julien Grall Reviewed-by: Roger Pau Monné Acked-by: Wei Liu --- This was discussed at Xen Summit and also in various thread on xen-devel. The latest one was when Andrew sent a patch to deny guest creation on Arm with XEN_DOMCTL_CDF_hap unset. I suspect we first implemented Arm guest as PV in libxl because PVH was non-existent and the type was easier to avoid spawning QEMU. Note that Linux and Xen are already considering Arm guest as PVH. Changes in v3: - Properly reset u.pvh - Update documentation and print - Return ERROR_INVAL rather than ERROR_FAIL Changes in v2: - Rather than denying PV guest, convert them to PVH --- docs/man/xl.cfg.pod.5.in | 5 +++-- tools/libxl/libxl_arch.h | 3 ++- tools/libxl/libxl_arm.c | 26 ++++++++++++++++++++++++-- tools/libxl/libxl_create.c | 2 +- tools/libxl/libxl_x86.c | 3 ++- tools/xl/xl_parse.c | 4 ++++ 6 files changed, 36 insertions(+), 7 deletions(-) diff --git a/docs/man/xl.cfg.pod.5.in b/docs/man/xl.cfg.pod.5.in index b72718151b..b1c0be14cd 100644 --- a/docs/man/xl.cfg.pod.5.in +++ b/docs/man/xl.cfg.pod.5.in @@ -80,13 +80,14 @@ single host must be unique. =item B Specifies that this is to be a PV domain, suitable for hosting Xen-aware -guest operating systems. This is the default. +guest operating systems. This is the default on x86. =item B Specifies that this is to be an PVH domain. That is a lightweight HVM-like guest without a device model and without many of the emulated devices -available to HVM guests. Note that this mode requires a PVH aware kernel. +available to HVM guests. Note that this mode requires a PVH aware kernel on +x86. This is the default on Arm. =item B diff --git a/tools/libxl/libxl_arch.h b/tools/libxl/libxl_arch.h index 5ab0c95974..930570ef1e 100644 --- a/tools/libxl/libxl_arch.h +++ b/tools/libxl/libxl_arch.h @@ -65,7 +65,8 @@ _hidden int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq); _hidden -void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info *b_info); +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, + libxl_domain_build_info *b_info); _hidden int libxl__arch_extra_memory(libxl__gc *gc, diff --git a/tools/libxl/libxl_arm.c b/tools/libxl/libxl_arm.c index 699fd9ddc6..25dc3defc6 100644 --- a/tools/libxl/libxl_arm.c +++ b/tools/libxl/libxl_arm.c @@ -953,7 +953,11 @@ int libxl__arch_domain_init_hw_description(libxl__gc *gc, int rc; uint64_t val; - assert(info->type == LIBXL_DOMAIN_TYPE_PV); + if (info->type != LIBXL_DOMAIN_TYPE_PVH) { + LOG(ERROR, "Unsupported Arm guest type %s", + libxl_domain_type_to_string(info->type)); + return ERROR_INVAL; + } /* Set the value of domain param HVM_PARAM_CALLBACK_IRQ. */ val = MASK_INSR(HVM_PARAM_CALLBACK_TYPE_PPI, @@ -1110,10 +1114,28 @@ int libxl__arch_domain_map_irq(libxl__gc *gc, uint32_t domid, int irq) return xc_domain_bind_pt_spi_irq(CTX->xch, domid, irq, irq); } -void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info *b_info) +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, + libxl_domain_build_info *b_info) { /* ACPI is disabled by default */ libxl_defbool_setdefault(&b_info->acpi, false); + + /* + * Arm guest are now considered as PVH by the toolstack. To allow + * compatibility with previous toolstack, PV guest are automatically + * converted to PVH. + */ + if (b_info->type != LIBXL_DOMAIN_TYPE_PV) + return; + + LOG(WARN, "Converting PV guest to PVH."); + LOG(WARN, "Arm guest are now PVH."); + LOG(WARN, "Please fix your configuration file/toolstack."); + + /* Re-initialize type to PVH and all associated fields to defaults. */ + memset(&b_info->u, '\0', sizeof(b_info->u)); + b_info->type = LIBXL_DOMAIN_TYPE_INVALID; + libxl_domain_build_info_init_type(b_info, LIBXL_DOMAIN_TYPE_PVH); } /* diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index fe97eebdea..320dbed3c6 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -215,7 +215,7 @@ int libxl__domain_build_info_setdefault(libxl__gc *gc, if (!b_info->event_channels) b_info->event_channels = 1023; - libxl__arch_domain_build_info_setdefault(b_info); + libxl__arch_domain_build_info_setdefault(gc, b_info); libxl_defbool_setdefault(&b_info->dm_restrict, false); switch (b_info->type) { diff --git a/tools/libxl/libxl_x86.c b/tools/libxl/libxl_x86.c index 81523a568f..8b6759c089 100644 --- a/tools/libxl/libxl_x86.c +++ b/tools/libxl/libxl_x86.c @@ -613,7 +613,8 @@ int libxl__arch_domain_finalise_hw_description(libxl__gc *gc, return rc; } -void libxl__arch_domain_build_info_setdefault(libxl_domain_build_info *b_info) +void libxl__arch_domain_build_info_setdefault(libxl__gc *gc, + libxl_domain_build_info *b_info) { libxl_defbool_setdefault(&b_info->acpi, true); } diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index 971ec1bc56..0bda28152b 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -1286,7 +1286,11 @@ void parse_config_data(const char *config_source, } if (c_info->type == LIBXL_DOMAIN_TYPE_INVALID) +#if defined(__arm__) || defined(__aarch64__) + c_info->type = LIBXL_DOMAIN_TYPE_PVH; +#else c_info->type = LIBXL_DOMAIN_TYPE_PV; +#endif xlu_cfg_get_defbool(config, "hap", &c_info->hap, 0);