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

On Tue, Jan 26, 2021 at 12:31:31AM +0000, Michael Kelley wrote:
> 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.

Yes. This is the approach I'm taking here. They can be easily moved in
the future if there is a need.

> 
> >  /*
> >   * 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?
> 

There is only one usage of this in this whole series so I didn't bother
capturing. I would also like to clean up ms_hyperv_info's fields a bit.

Given there are quite some patches pending which change ms_hyperv_info
struct, I would like to avoid creating more conflicts than necessary.

My plan is to implement my idea from the thread "Field names inside
ms_hyperv_info" once all patches that touch ms_hyperv_info are merged.

Wei.

  reply	other threads:[~2021-01-26 15:17 UTC|newest]

Thread overview: 95+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20 12:00 [PATCH v5 00/16] Introducing Linux root partition support for Microsoft Hypervisor Wei Liu
2021-01-20 12:00 ` [PATCH v5 01/16] asm-generic/hyperv: change HV_CPU_POWER_MANAGEMENT to HV_CPU_MANAGEMENT Wei Liu
2021-01-20 15:57   ` Pavel Tatashin
2021-01-20 15:57     ` Pavel Tatashin
2021-01-26  0:25   ` Michael Kelley
2021-01-26  0:25     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 02/16] x86/hyperv: detect if Linux is the root partition Wei Liu
2021-01-20 16:03   ` Pavel Tatashin
2021-01-20 16:03     ` Pavel Tatashin
2021-01-26 15:06     ` Wei Liu
2021-01-26  0:31   ` Michael Kelley
2021-01-26  0:31     ` Michael Kelley via Virtualization
2021-01-26 15:15     ` Wei Liu [this message]
2021-01-26 15:24       ` Wei Liu
2021-01-20 12:00 ` [PATCH v5 03/16] Drivers: hv: vmbus: skip VMBus initialization if Linux is root Wei Liu
2021-01-20 16:06   ` Pavel Tatashin
2021-01-20 16:06     ` Pavel Tatashin
2021-01-26  0:32   ` Michael Kelley
2021-01-26  0:32     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 04/16] iommu/hyperv: don't setup IRQ remapping when running as root Wei Liu
2021-01-20 12:00   ` Wei Liu
2021-01-20 16:08   ` Pavel Tatashin
2021-01-20 16:08     ` Pavel Tatashin
2021-01-20 16:08     ` Pavel Tatashin
2021-01-26  0:33   ` Michael Kelley
2021-01-26  0:33     ` Michael Kelley via Virtualization
2021-01-26  0:33     ` Michael Kelley via iommu
2021-01-20 12:00 ` [PATCH v5 05/16] clocksource/hyperv: use MSR-based access if " Wei Liu
2021-01-20 16:13   ` Pavel Tatashin
2021-01-20 16:13     ` Pavel Tatashin
2021-01-26 15:19     ` Wei Liu
2021-01-26  0:34   ` Michael Kelley
2021-01-26  0:34     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 06/16] x86/hyperv: allocate output arg pages if required Wei Liu
2021-01-20 15:12   ` kernel test robot
2021-01-20 15:12     ` kernel test robot
2021-01-20 15:12     ` kernel test robot
2021-01-20 19:44   ` Pavel Tatashin
2021-01-20 19:44     ` Pavel Tatashin
2021-01-26  0:41   ` Michael Kelley
2021-01-26  0:41     ` Michael Kelley via Virtualization
2021-01-26 18:09     ` Wei Liu
2021-01-20 12:00 ` [PATCH v5 07/16] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary Wei Liu
2021-01-26  0:48   ` Michael Kelley
2021-01-26  0:48     ` Michael Kelley via Virtualization
2021-02-02 15:03     ` Wei Liu
2021-02-04 16:33       ` Michael Kelley
2021-02-04 16:33         ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 08/16] x86/hyperv: handling hypercall page setup for root Wei Liu
2021-01-26  0:49   ` Michael Kelley
2021-01-26  0:49     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 09/16] x86/hyperv: provide a bunch of helper functions Wei Liu
2021-01-26  1:20   ` Michael Kelley
2021-01-26  1:20     ` Michael Kelley via Virtualization
2021-02-02 16:19     ` Wei Liu
2021-01-20 12:00 ` [PATCH v5 10/16] x86/hyperv: implement and use hv_smp_prepare_cpus Wei Liu
2021-01-26  1:21   ` Michael Kelley
2021-01-26  1:21     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 11/16] asm-generic/hyperv: update hv_msi_entry Wei Liu
2021-01-26  1:22   ` Michael Kelley
2021-01-26  1:22     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 12/16] asm-generic/hyperv: update hv_interrupt_entry Wei Liu
2021-01-26  1:23   ` Michael Kelley
2021-01-26  1:23     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 13/16] asm-generic/hyperv: introduce hv_device_id and auxiliary structures Wei Liu
2021-01-26  1:26   ` Michael Kelley
2021-01-26  1:26     ` Michael Kelley via Virtualization
2021-02-02 17:02     ` Wei Liu
2021-02-03 13:26       ` Wei Liu
2021-02-03 13:49         ` Arnd Bergmann
2021-02-03 14:09           ` Wei Liu
2021-02-04 16:46             ` Michael Kelley
2021-02-04 16:46               ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 14/16] asm-generic/hyperv: import data structures for mapping device interrupts Wei Liu
2021-01-26  1:27   ` Michael Kelley
2021-01-26  1:27     ` Michael Kelley via Virtualization
2021-01-20 12:00 ` [PATCH v5 15/16] x86/hyperv: implement an MSI domain for root partition Wei Liu
2021-01-27  5:47   ` Michael Kelley
2021-01-27  5:47     ` Michael Kelley via Virtualization
2021-02-02 17:31     ` Wei Liu
2021-02-02 18:15       ` Michael Kelley
2021-02-02 18:15         ` Michael Kelley via Virtualization
2021-02-02 18:16         ` Wei Liu
2021-01-20 12:00 ` [PATCH v5 16/16] iommu/hyperv: setup an IO-APIC IRQ remapping " Wei Liu
2021-01-20 12:00   ` Wei Liu
2021-01-27  5:47   ` Michael Kelley
2021-01-27  5:47     ` Michael Kelley via Virtualization
2021-01-27  5:47     ` Michael Kelley via iommu
2021-02-03 12:47     ` Wei Liu
2021-02-03 12:47       ` Wei Liu
2021-02-04 16:41       ` Michael Kelley
2021-02-04 16:41         ` Michael Kelley via Virtualization
2021-02-04 16:41         ` Michael Kelley via iommu
2021-02-04 16:48         ` Wei Liu
2021-02-04 16:48           ` Wei Liu

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=20210126151512.jz4f3jxfs7ommvm3@liuwe-devbox-debian-v2 \
    --to=wei.liu@kernel.org \
    --cc=bp@alien8.de \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kys@microsoft.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=virtualization@lists.linux-foundation.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.