virtualization.lists.linux-foundation.org archive mirror
 help / color / mirror / Atom feed
From: Michael Kelley via Virtualization <virtualization@lists.linux-foundation.org>
To: Wei Liu <wei.liu@kernel.org>,
	Linux on Hyper-V List <linux-hyperv@vger.kernel.org>
Cc: Stephen Hemminger <sthemmin@microsoft.com>,
	"pasha.tatashin@soleen.com" <pasha.tatashin@soleen.com>,
	Haiyang Zhang <haiyangz@microsoft.com>,
	"maintainer:X86 ARCHITECTURE \(32-BIT AND 64-BIT\)"
	<x86@kernel.org>,
	Linux Kernel List <linux-kernel@vger.kernel.org>,
	"virtualization@lists.linux-foundation.org"
	<virtualization@lists.linux-foundation.org>,
	Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Nuno Das Neves <nunodasneves@linux.microsoft.com>,
	Sunil Muthuswamy <sunilmut@microsoft.com>,
	Vineeth Pillai <viremana@linux.microsoft.com>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: RE: [PATCH v5 02/16] x86/hyperv: detect if Linux is the root partition
Date: Tue, 26 Jan 2021 00:31:31 +0000	[thread overview]
Message-ID: <MWHPR21MB159358B1D6151AC5B5D38C7FD7BC9@MWHPR21MB1593.namprd21.prod.outlook.com> (raw)
In-Reply-To: <20210120120058.29138-3-wei.liu@kernel.org>

From: Wei Liu <wei.liu@kernel.org> Sent: Wednesday, January 20, 2021 4:01 AM
> 
> For now we can use the privilege flag to check. Stash the value to be
> used later.
> 
> Put in a bunch of defines for future use when we want to have more
> fine-grained detection.
> 
> Signed-off-by: Wei Liu <wei.liu@kernel.org>
> ---
> v3: move hv_root_partition to mshyperv.c
> ---
>  arch/x86/include/asm/hyperv-tlfs.h | 10 ++++++++++
>  arch/x86/include/asm/mshyperv.h    |  2 ++
>  arch/x86/kernel/cpu/mshyperv.c     | 20 ++++++++++++++++++++
>  3 files changed, 32 insertions(+)
> 
> diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h
> index 6bf42aed387e..204010350604 100644
> --- a/arch/x86/include/asm/hyperv-tlfs.h
> +++ b/arch/x86/include/asm/hyperv-tlfs.h
> @@ -21,6 +21,7 @@
>  #define HYPERV_CPUID_FEATURES			0x40000003
>  #define HYPERV_CPUID_ENLIGHTMENT_INFO		0x40000004
>  #define HYPERV_CPUID_IMPLEMENT_LIMITS		0x40000005
> +#define HYPERV_CPUID_CPU_MANAGEMENT_FEATURES	0x40000007
>  #define HYPERV_CPUID_NESTED_FEATURES		0x4000000A
> 
>  #define HYPERV_CPUID_VIRT_STACK_INTERFACE	0x40000081
> @@ -110,6 +111,15 @@
>  /* Recommend using enlightened VMCS */
>  #define HV_X64_ENLIGHTENED_VMCS_RECOMMENDED		BIT(14)
> 
> +/*
> + * CPU management features identification.
> + * These are HYPERV_CPUID_CPU_MANAGEMENT_FEATURES.EAX bits.
> + */
> +#define HV_X64_START_LOGICAL_PROCESSOR			BIT(0)
> +#define HV_X64_CREATE_ROOT_VIRTUAL_PROCESSOR		BIT(1)
> +#define HV_X64_PERFORMANCE_COUNTER_SYNC			BIT(2)
> +#define HV_X64_RESERVED_IDENTITY_BIT			BIT(31)
> +

I wonder if these bit definitions should go in the asm-generic part of
hyperv-tlfs.h instead of the X64 specific part.  They look very architecture
neutral (in which case the X64 should be dropped from the name
as well).  Of course, they can be moved later when/if we get to that point
and have a firmer understanding of what is and isn't arch neutral.

>  /*
>   * Virtual processor will never share a physical core with another virtual
>   * processor, except for virtual processors that are reported as sibling SMT
> diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
> index ffc289992d1b..ac2b0d110f03 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -237,6 +237,8 @@ int hyperv_fill_flush_guest_mapping_list(
>  		struct hv_guest_mapping_flush_list *flush,
>  		u64 start_gfn, u64 end_gfn);
> 
> +extern bool hv_root_partition;
> +
>  #ifdef CONFIG_X86_64
>  void hv_apic_init(void);
>  void __init hv_init_spinlocks(void);
> diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
> index f628e3dc150f..c376d191a260 100644
> --- a/arch/x86/kernel/cpu/mshyperv.c
> +++ b/arch/x86/kernel/cpu/mshyperv.c
> @@ -32,6 +32,10 @@
>  #include <asm/nmi.h>
>  #include <clocksource/hyperv_timer.h>
> 
> +/* Is Linux running as the root partition? */
> +bool hv_root_partition;
> +EXPORT_SYMBOL_GPL(hv_root_partition);
> +
>  struct ms_hyperv_info ms_hyperv;
>  EXPORT_SYMBOL_GPL(ms_hyperv);
> 
> @@ -237,6 +241,22 @@ static void __init ms_hyperv_init_platform(void)
>  	pr_debug("Hyper-V: max %u virtual processors, %u logical processors\n",
>  		 ms_hyperv.max_vp_index, ms_hyperv.max_lp_index);
> 
> +	/*
> +	 * Check CPU management privilege.
> +	 *
> +	 * To mirror what Windows does we should extract CPU management
> +	 * features and use the ReservedIdentityBit to detect if Linux is the
> +	 * root partition. But that requires negotiating CPU management
> +	 * interface (a process to be finalized).
> +	 *
> +	 * For now, use the privilege flag as the indicator for running as
> +	 * root.
> +	 */
> +	if (cpuid_ebx(HYPERV_CPUID_FEATURES) & HV_CPU_MANAGEMENT) {

Should the EBX value be captured in the ms_hyperv structure with the
other similar values, and then used from there?

Michael

> +		hv_root_partition = true;
> +		pr_info("Hyper-V: running as root partition\n");
> +	}
> +
>  	/*
>  	 * Extract host information.
>  	 */
> --
> 2.20.1


_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

  parent reply	other threads:[~2021-01-26  0:31 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20210120120058.29138-1-wei.liu@kernel.org>
     [not found] ` <20210120120058.29138-3-wei.liu@kernel.org>
2021-01-20 16:03   ` [PATCH v5 02/16] x86/hyperv: detect if Linux is the root partition Pavel Tatashin
2021-01-26  0:31   ` Michael Kelley via Virtualization [this message]
     [not found] ` <20210120120058.29138-7-wei.liu@kernel.org>
2021-01-20 15:12   ` [PATCH v5 06/16] x86/hyperv: allocate output arg pages if required kernel test robot
2021-01-20 19:44   ` Pavel Tatashin
2021-01-26  0:41   ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-2-wei.liu@kernel.org>
2021-01-20 15:57   ` [PATCH v5 01/16] asm-generic/hyperv: change HV_CPU_POWER_MANAGEMENT to HV_CPU_MANAGEMENT Pavel Tatashin
2021-01-26  0:25   ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-4-wei.liu@kernel.org>
2021-01-20 16:06   ` [PATCH v5 03/16] Drivers: hv: vmbus: skip VMBus initialization if Linux is root Pavel Tatashin
2021-01-26  0:32   ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-5-wei.liu@kernel.org>
2021-01-20 16:08   ` [PATCH v5 04/16] iommu/hyperv: don't setup IRQ remapping when running as root Pavel Tatashin
2021-01-26  0:33   ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-6-wei.liu@kernel.org>
2021-01-20 16:13   ` [PATCH v5 05/16] clocksource/hyperv: use MSR-based access if " Pavel Tatashin
2021-01-26  0:34   ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-8-wei.liu@kernel.org>
2021-01-26  0:48   ` [PATCH v5 07/16] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary Michael Kelley via Virtualization
     [not found]     ` <20210202150353.6npksy7tobrvfqlt@liuwe-devbox-debian-v2>
2021-02-04 16:33       ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-9-wei.liu@kernel.org>
2021-01-26  0:49   ` [PATCH v5 08/16] x86/hyperv: handling hypercall page setup for root Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-10-wei.liu@kernel.org>
2021-01-26  1:20   ` [PATCH v5 09/16] x86/hyperv: provide a bunch of helper functions Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-11-wei.liu@kernel.org>
2021-01-26  1:21   ` [PATCH v5 10/16] x86/hyperv: implement and use hv_smp_prepare_cpus Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-12-wei.liu@kernel.org>
2021-01-26  1:22   ` [PATCH v5 11/16] asm-generic/hyperv: update hv_msi_entry Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-13-wei.liu@kernel.org>
2021-01-26  1:23   ` [PATCH v5 12/16] asm-generic/hyperv: update hv_interrupt_entry Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-14-wei.liu@kernel.org>
2021-01-26  1:26   ` [PATCH v5 13/16] asm-generic/hyperv: introduce hv_device_id and auxiliary structures Michael Kelley via Virtualization
     [not found]     ` <20210202170248.4hds554cyxpuayqc@liuwe-devbox-debian-v2>
     [not found]       ` <20210203132601.ftpwgs57qtok47cg@liuwe-devbox-debian-v2>
     [not found]         ` <CAK8P3a0m8jEij-RdP1PTcNcJW2+mXQ1dA4=s+JLXhnv+NyFiHw@mail.gmail.com>
     [not found]           ` <20210203140906.g35zr7366hh7p5f3@liuwe-devbox-debian-v2>
2021-02-04 16:46             ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-15-wei.liu@kernel.org>
2021-01-26  1:27   ` [PATCH v5 14/16] asm-generic/hyperv: import data structures for mapping device interrupts Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-16-wei.liu@kernel.org>
2021-01-27  5:47   ` [PATCH v5 15/16] x86/hyperv: implement an MSI domain for root partition Michael Kelley via Virtualization
     [not found]     ` <20210202173153.jkbvwck2vsjlbjbz@liuwe-devbox-debian-v2>
2021-02-02 18:15       ` Michael Kelley via Virtualization
     [not found] ` <20210120120058.29138-17-wei.liu@kernel.org>
2021-01-27  5:47   ` [PATCH v5 16/16] iommu/hyperv: setup an IO-APIC IRQ remapping " Michael Kelley via Virtualization
     [not found]     ` <20210203124700.ugx5vd526455u7lb@liuwe-devbox-debian-v2>
2021-02-04 16:41       ` Michael Kelley via Virtualization

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=MWHPR21MB159358B1D6151AC5B5D38C7FD7BC9@MWHPR21MB1593.namprd21.prod.outlook.com \
    --to=virtualization@lists.linux-foundation.org \
    --cc=bp@alien8.de \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mikelley@microsoft.com \
    --cc=mingo@redhat.com \
    --cc=nunodasneves@linux.microsoft.com \
    --cc=pasha.tatashin@soleen.com \
    --cc=sthemmin@microsoft.com \
    --cc=sunilmut@microsoft.com \
    --cc=tglx@linutronix.de \
    --cc=viremana@linux.microsoft.com \
    --cc=wei.liu@kernel.org \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).