Received: by 2002:a05:6a10:c7c6:0:0:0:0 with SMTP id h6csp1732077pxy; Mon, 2 Aug 2021 08:56:27 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyBCcIT2BaSraVlsvzoRTUMvfuL6VaxeWXoG6/ZFiFs8Y1SZjf54rYxaGSL/3rslIbnRR+B X-Received: by 2002:a05:6e02:1154:: with SMTP id o20mr16435ill.168.1627919787235; Mon, 02 Aug 2021 08:56:27 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627919787; cv=none; d=google.com; s=arc-20160816; b=AOaqEdrwjci1aIHiEP803yGurkN4BD2jjsw534nSny5mXs7nx3B8OsDa4DFXITW8qt QjiSuTq0b/r3ju9WaJMRVJVC7jlaYV+Z4YmMRj3oqNiEEOSpg9gBTa6b/QczMnFG+L3Y +Aupg3ORhR6ZP79jYiBhCdHZEx3Sw9xF0N9/FJfOBvI45UG9kCrUfQQhpNiYBEmcvTSi C4/zMM/srgqceO5h5MepIXZ8lwNLe28Km7Q6/IJEkaT5gSmrgKy22HyhD6vI2B9t28BJ +w0iKd4GlxnWton41i/ASpcQcZPq8zac8SEQCHFXswIrKEz29MIjobTTazboay8+v/xd RcIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:references:in-reply-to :subject:cc:to:from:message-id:date; bh=CRLFFDPUGI2PNN+zeqxSlx8WcgSvSrnvrhuB342CxzE=; b=ZbOXQKSe4F2oFEaj7TS+DvahT1JL8fbxJoQM3gifEikw+KgcqDdb/pc7YPDg4NCfUS l/EoJ0ReQRWEusomZNDUSEhahc9Bh7oMo+WxiXCqOqy60sP6HJgegs7tnLoUlpHM+vBw R3gA/CahlhkERw7Baw9HdMCbwGO0FcRvD1obVhO/DA+GWlX43JjqiVGF6LYLy1WNgZzF +0Yvw7H8hLVp2EAOht13x8F/kJgQL0rjsfwKZtF71aEK655rdtXztVKWWQ8QIIDO7wxr Nz/oHacWafxB1n5LyaMcdVo+ZWEmBLLskgjbLEkBtLeyc5LDOdmTTnY405QB7Xyz/5z5 QDOw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q17si5278316ilm.64.2021.08.02.08.56.13; Mon, 02 Aug 2021 08:56:27 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235367AbhHBPz0 (ORCPT + 99 others); Mon, 2 Aug 2021 11:55:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:54620 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235260AbhHBPzZ (ORCPT ); Mon, 2 Aug 2021 11:55:25 -0400 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id F095661101; Mon, 2 Aug 2021 15:55:15 +0000 (UTC) Received: from sofa.misterjones.org ([185.219.108.64] helo=why.misterjones.org) by disco-boy.misterjones.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1mAaHZ-002VoN-TK; Mon, 02 Aug 2021 16:55:14 +0100 Date: Mon, 02 Aug 2021 16:55:13 +0100 Message-ID: <87lf5j265a.wl-maz@kernel.org> From: Marc Zyngier To: Michael Kelley Cc: will@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-efi@vger.kernel.org, wei.liu@kernel.org, kys@microsoft.com, sthemmin@microsoft.com, ardb@kernel.org Subject: Re: [PATCH v11 3/5] arm64: hyperv: Initialize hypervisor on boot In-Reply-To: <1626793023-13830-4-git-send-email-mikelley@microsoft.com> References: <1626793023-13830-1-git-send-email-mikelley@microsoft.com> <1626793023-13830-4-git-send-email-mikelley@microsoft.com> User-Agent: Wanderlust/2.15.9 (Almost Unreal) SEMI-EPG/1.14.7 (Harue) FLIM-LB/1.14.9 (=?UTF-8?B?R29qxY0=?=) APEL-LB/10.8 EasyPG/1.0.0 Emacs/27.1 (x86_64-pc-linux-gnu) MULE/6.0 (HANACHIRUSATO) MIME-Version: 1.0 (generated by SEMI-EPG 1.14.7 - "Harue") Content-Type: text/plain; charset=US-ASCII X-SA-Exim-Connect-IP: 185.219.108.64 X-SA-Exim-Rcpt-To: mikelley@microsoft.com, will@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-hyperv@vger.kernel.org, linux-efi@vger.kernel.org, wei.liu@kernel.org, kys@microsoft.com, sthemmin@microsoft.com, ardb@kernel.org X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, 20 Jul 2021 15:57:01 +0100, Michael Kelley wrote: > > Add ARM64-specific code to initialize the Hyper-V > hypervisor when booting as a guest VM. > > This code is built only when CONFIG_HYPERV is enabled. > > Signed-off-by: Michael Kelley > --- > arch/arm64/hyperv/Makefile | 2 +- > arch/arm64/hyperv/mshyperv.c | 83 ++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 84 insertions(+), 1 deletion(-) > create mode 100644 arch/arm64/hyperv/mshyperv.c > > diff --git a/arch/arm64/hyperv/Makefile b/arch/arm64/hyperv/Makefile > index 1697d30..87c31c0 100644 > --- a/arch/arm64/hyperv/Makefile > +++ b/arch/arm64/hyperv/Makefile > @@ -1,2 +1,2 @@ > # SPDX-License-Identifier: GPL-2.0 > -obj-y := hv_core.o > +obj-y := hv_core.o mshyperv.o > diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c > new file mode 100644 > index 0000000..2811fd0 > --- /dev/null > +++ b/arch/arm64/hyperv/mshyperv.c > @@ -0,0 +1,83 @@ > +// SPDX-License-Identifier: GPL-2.0 > + > +/* > + * Core routines for interacting with Microsoft's Hyper-V hypervisor, > + * including hypervisor initialization. > + * > + * Copyright (C) 2021, Microsoft, Inc. > + * > + * Author : Michael Kelley > + */ > + > +#include > +#include > +#include > +#include > +#include > +#include > +#include > + > +static bool hyperv_initialized; > + > +static int __init hyperv_init(void) > +{ > + struct hv_get_vp_registers_output result; > + u32 a, b, c, d; > + u64 guest_id; > + int ret; > + > + /* > + * If we're in a VM on Hyper-V, the ACPI hypervisor_id field will > + * have the string "MsHyperV". > + */ > + if (strncmp((char *)&acpi_gbl_FADT.hypervisor_id, "MsHyperV", 8)) > + return -EINVAL; Before going ahead and parsing the local FADT copy, it would be prudent to test that you are actually on an ACPI system, specially given that this function is unconditionally called, even on DT systems. In the same vein, returning -EINVAL when failing to find Hyper-V is a bit excessive. > + > + /* Setup the guest ID */ > + guest_id = generate_guest_id(0, LINUX_VERSION_CODE, 0); > + hv_set_vpreg(HV_REGISTER_GUEST_OSID, guest_id); > + > + /* Get the features and hints from Hyper-V */ > + hv_get_vpreg_128(HV_REGISTER_FEATURES, &result); > + ms_hyperv.features = result.as32.a; > + ms_hyperv.priv_high = result.as32.b; > + ms_hyperv.misc_features = result.as32.c; > + > + hv_get_vpreg_128(HV_REGISTER_ENLIGHTENMENTS, &result); > + ms_hyperv.hints = result.as32.a; > + > + pr_info("Hyper-V: privilege flags low 0x%x, high 0x%x, hints 0x%x, misc 0x%x\n", > + ms_hyperv.features, ms_hyperv.priv_high, ms_hyperv.hints, > + ms_hyperv.misc_features); > + > + /* Get information about the Hyper-V host version */ > + hv_get_vpreg_128(HV_REGISTER_HYPERVISOR_VERSION, &result); > + a = result.as32.a; > + b = result.as32.b; > + c = result.as32.c; > + d = result.as32.d; > + pr_info("Hyper-V: Host Build %d.%d.%d.%d-%d-%d\n", > + b >> 16, b & 0xFFFF, a, d & 0xFFFFFF, c, d >> 24); > + > + ret = hv_common_init(); > + if (ret) > + return ret; > + > + ret = cpuhp_setup_state(CPUHP_AP_ONLINE_DYN, "arm64/hyperv_init:online", > + hv_common_cpu_init, hv_common_cpu_die); > + if (ret < 0) { > + hv_common_free(); > + return ret; > + } > + > + hyperv_initialized = true; > + return 0; > +} > + > +early_initcall(hyperv_init); > + > +bool hv_is_hyperv_initialized(void) > +{ > + return hyperv_initialized; > +} > +EXPORT_SYMBOL_GPL(hv_is_hyperv_initialized); Thanks, M. -- Without deviation from the norm, progress is not possible.