All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Kelley <mikelley@microsoft.com>
To: Wei Liu <wei.liu@kernel.org>
Cc: 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>,
	Lillian Grassin-Drake <Lillian.GrassinDrake@microsoft.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>,
	Arnd Bergmann <arnd@arndb.de>,
	"open list:GENERIC INCLUDE/ASM HEADER FILES" 
	<linux-arch@vger.kernel.org>
Subject: RE: [PATCH v5 07/16] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary
Date: Thu, 4 Feb 2021 16:33:49 +0000	[thread overview]
Message-ID: <MWHPR21MB159300985570258E73E208D1D7B39@MWHPR21MB1593.namprd21.prod.outlook.com> (raw)
In-Reply-To: <20210202150353.6npksy7tobrvfqlt@liuwe-devbox-debian-v2>

From: Wei Liu <wei.liu@kernel.org> Sent: Tuesday, February 2, 2021 7:04 AM
> 
> On Tue, Jan 26, 2021 at 12:48:37AM +0000, Michael Kelley wrote:
> > From: Wei Liu <wei.liu@kernel.org> Sent: Wednesday, January 20, 2021 4:01 AM
> > >
> > > We will need the partition ID for executing some hypercalls later.
> > >
> > > Signed-off-by: Lillian Grassin-Drake <ligrassi@microsoft.com>
> > > Co-Developed-by: Sunil Muthuswamy <sunilmut@microsoft.com>
> > > Signed-off-by: Wei Liu <wei.liu@kernel.org>
> > > ---
> > > v3:
> > > 1. Make hv_get_partition_id static.
> > > 2. Change code structure a bit.
> > > ---
> > >  arch/x86/hyperv/hv_init.c         | 27 +++++++++++++++++++++++++++
> > >  arch/x86/include/asm/mshyperv.h   |  2 ++
> > >  include/asm-generic/hyperv-tlfs.h |  6 ++++++
> > >  3 files changed, 35 insertions(+)
> > >
> > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> > > index 6f4cb40e53fe..fc9941bd8653 100644
> > > --- a/arch/x86/hyperv/hv_init.c
> > > +++ b/arch/x86/hyperv/hv_init.c
> > > @@ -26,6 +26,9 @@
> > >  #include <linux/syscore_ops.h>
> > >  #include <clocksource/hyperv_timer.h>
> > >
> > > +u64 hv_current_partition_id = ~0ull;
> > > +EXPORT_SYMBOL_GPL(hv_current_partition_id);
> > > +
> > >  void *hv_hypercall_pg;
> > >  EXPORT_SYMBOL_GPL(hv_hypercall_pg);
> > >
> > > @@ -331,6 +334,25 @@ static struct syscore_ops hv_syscore_ops = {
> > >  	.resume		= hv_resume,
> > >  };
> > >
> > > +static void __init hv_get_partition_id(void)
> > > +{
> > > +	struct hv_get_partition_id *output_page;
> > > +	u16 status;
> > > +	unsigned long flags;
> > > +
> > > +	local_irq_save(flags);
> > > +	output_page = *this_cpu_ptr(hyperv_pcpu_output_arg);
> > > +	status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page) &
> > > +		HV_HYPERCALL_RESULT_MASK;
> > > +	if (status != HV_STATUS_SUCCESS) {
> >
> > Across the Hyper-V code in Linux, the way we check the hypercall result
> > is very inconsistent.  IMHO, the and'ing of hv_do_hypercall() with
> > HV_HYPERCALL_RESULT_MASK so that status can be a u16 is stylistically
> > a bit unusual.
> >
> > I'd like to see the hypercall result being stored into a u64 local variable.
> > Then the subsequent test for the status should 'and' the u64 with
> > HV_HYPERCALL_RESULT_MASK to determine the result code.
> > I've made a note to go fix the places that aren't doing it that way.
> >
> 
> I will fold in the following diff in the next version. I will also check
> if there are other instances in this patch series that need fixing.
> Pretty sure there are a few.
> 
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index fc9941bd8653..6064f64a1295 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -337,14 +337,13 @@ static struct syscore_ops hv_syscore_ops = {
>  static void __init hv_get_partition_id(void)
>  {
>         struct hv_get_partition_id *output_page;
> -       u16 status;
> +       u64 status;
>         unsigned long flags;
> 
>         local_irq_save(flags);
>         output_page = *this_cpu_ptr(hyperv_pcpu_output_arg);
> -       status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page) &
> -               HV_HYPERCALL_RESULT_MASK;
> -       if (status != HV_STATUS_SUCCESS) {
> +       status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page);
> +       if ((status & HV_HYPERCALL_RESULT_MASK) != HV_STATUS_SUCCESS) {
>                 /* No point in proceeding if this failed */
>                 pr_err("Failed to get partition ID: %d\n", status);
>                 BUG();
> > > +		/* No point in proceeding if this failed */
> > > +		pr_err("Failed to get partition ID: %d\n", status);
> > > +		BUG();
> > > +	}
> > > +	hv_current_partition_id = output_page->partition_id;
> > > +	local_irq_restore(flags);
> > > +}
> > > +
> > >  /*
> > >   * This function is to be invoked early in the boot sequence after the
> > >   * hypervisor has been detected.
> > > @@ -426,6 +448,11 @@ void __init hyperv_init(void)
> > >
> > >  	register_syscore_ops(&hv_syscore_ops);
> > >
> > > +	if (cpuid_ebx(HYPERV_CPUID_FEATURES) & HV_ACCESS_PARTITION_ID)
> > > +		hv_get_partition_id();
> >
> > Another place where the EBX value saved into the ms_hyperv structure
> > could be used.
> 
> If you're okay with my response earlier, this will be handled later in
> another patch (series).
> 

Yes, that's OK.  Andrea Parri's patch series for Isolated VMs is capturing the
EBX value as well.

Michael

WARNING: multiple messages have this Message-ID (diff)
From: Michael Kelley via Virtualization <virtualization@lists.linux-foundation.org>
To: Wei Liu <wei.liu@kernel.org>
Cc: "open list:GENERIC INCLUDE/ASM HEADER FILES"
	<linux-arch@vger.kernel.org>,
	Linux on Hyper-V List <linux-hyperv@vger.kernel.org>,
	Stephen Hemminger <sthemmin@microsoft.com>,
	"pasha.tatashin@soleen.com" <pasha.tatashin@soleen.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Lillian Grassin-Drake <Lillian.GrassinDrake@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>,
	Thomas Gleixner <tglx@linutronix.de>,
	"H. Peter Anvin" <hpa@zytor.com>,
	Nuno Das Neves <nunodasneves@linux.microsoft.com>,
	Borislav Petkov <bp@alien8.de>,
	Sunil Muthuswamy <sunilmut@microsoft.com>,
	Vineeth Pillai <viremana@linux.microsoft.com>,
	Haiyang Zhang <haiyangz@microsoft.com>
Subject: RE: [PATCH v5 07/16] x86/hyperv: extract partition ID from Microsoft Hypervisor if necessary
Date: Thu, 4 Feb 2021 16:33:49 +0000	[thread overview]
Message-ID: <MWHPR21MB159300985570258E73E208D1D7B39@MWHPR21MB1593.namprd21.prod.outlook.com> (raw)
In-Reply-To: <20210202150353.6npksy7tobrvfqlt@liuwe-devbox-debian-v2>

From: Wei Liu <wei.liu@kernel.org> Sent: Tuesday, February 2, 2021 7:04 AM
> 
> On Tue, Jan 26, 2021 at 12:48:37AM +0000, Michael Kelley wrote:
> > From: Wei Liu <wei.liu@kernel.org> Sent: Wednesday, January 20, 2021 4:01 AM
> > >
> > > We will need the partition ID for executing some hypercalls later.
> > >
> > > Signed-off-by: Lillian Grassin-Drake <ligrassi@microsoft.com>
> > > Co-Developed-by: Sunil Muthuswamy <sunilmut@microsoft.com>
> > > Signed-off-by: Wei Liu <wei.liu@kernel.org>
> > > ---
> > > v3:
> > > 1. Make hv_get_partition_id static.
> > > 2. Change code structure a bit.
> > > ---
> > >  arch/x86/hyperv/hv_init.c         | 27 +++++++++++++++++++++++++++
> > >  arch/x86/include/asm/mshyperv.h   |  2 ++
> > >  include/asm-generic/hyperv-tlfs.h |  6 ++++++
> > >  3 files changed, 35 insertions(+)
> > >
> > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> > > index 6f4cb40e53fe..fc9941bd8653 100644
> > > --- a/arch/x86/hyperv/hv_init.c
> > > +++ b/arch/x86/hyperv/hv_init.c
> > > @@ -26,6 +26,9 @@
> > >  #include <linux/syscore_ops.h>
> > >  #include <clocksource/hyperv_timer.h>
> > >
> > > +u64 hv_current_partition_id = ~0ull;
> > > +EXPORT_SYMBOL_GPL(hv_current_partition_id);
> > > +
> > >  void *hv_hypercall_pg;
> > >  EXPORT_SYMBOL_GPL(hv_hypercall_pg);
> > >
> > > @@ -331,6 +334,25 @@ static struct syscore_ops hv_syscore_ops = {
> > >  	.resume		= hv_resume,
> > >  };
> > >
> > > +static void __init hv_get_partition_id(void)
> > > +{
> > > +	struct hv_get_partition_id *output_page;
> > > +	u16 status;
> > > +	unsigned long flags;
> > > +
> > > +	local_irq_save(flags);
> > > +	output_page = *this_cpu_ptr(hyperv_pcpu_output_arg);
> > > +	status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page) &
> > > +		HV_HYPERCALL_RESULT_MASK;
> > > +	if (status != HV_STATUS_SUCCESS) {
> >
> > Across the Hyper-V code in Linux, the way we check the hypercall result
> > is very inconsistent.  IMHO, the and'ing of hv_do_hypercall() with
> > HV_HYPERCALL_RESULT_MASK so that status can be a u16 is stylistically
> > a bit unusual.
> >
> > I'd like to see the hypercall result being stored into a u64 local variable.
> > Then the subsequent test for the status should 'and' the u64 with
> > HV_HYPERCALL_RESULT_MASK to determine the result code.
> > I've made a note to go fix the places that aren't doing it that way.
> >
> 
> I will fold in the following diff in the next version. I will also check
> if there are other instances in this patch series that need fixing.
> Pretty sure there are a few.
> 
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index fc9941bd8653..6064f64a1295 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -337,14 +337,13 @@ static struct syscore_ops hv_syscore_ops = {
>  static void __init hv_get_partition_id(void)
>  {
>         struct hv_get_partition_id *output_page;
> -       u16 status;
> +       u64 status;
>         unsigned long flags;
> 
>         local_irq_save(flags);
>         output_page = *this_cpu_ptr(hyperv_pcpu_output_arg);
> -       status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page) &
> -               HV_HYPERCALL_RESULT_MASK;
> -       if (status != HV_STATUS_SUCCESS) {
> +       status = hv_do_hypercall(HVCALL_GET_PARTITION_ID, NULL, output_page);
> +       if ((status & HV_HYPERCALL_RESULT_MASK) != HV_STATUS_SUCCESS) {
>                 /* No point in proceeding if this failed */
>                 pr_err("Failed to get partition ID: %d\n", status);
>                 BUG();
> > > +		/* No point in proceeding if this failed */
> > > +		pr_err("Failed to get partition ID: %d\n", status);
> > > +		BUG();
> > > +	}
> > > +	hv_current_partition_id = output_page->partition_id;
> > > +	local_irq_restore(flags);
> > > +}
> > > +
> > >  /*
> > >   * This function is to be invoked early in the boot sequence after the
> > >   * hypervisor has been detected.
> > > @@ -426,6 +448,11 @@ void __init hyperv_init(void)
> > >
> > >  	register_syscore_ops(&hv_syscore_ops);
> > >
> > > +	if (cpuid_ebx(HYPERV_CPUID_FEATURES) & HV_ACCESS_PARTITION_ID)
> > > +		hv_get_partition_id();
> >
> > Another place where the EBX value saved into the ms_hyperv structure
> > could be used.
> 
> If you're okay with my response earlier, this will be handled later in
> another patch (series).
> 

Yes, that's OK.  Andrea Parri's patch series for Isolated VMs is capturing the
EBX value as well.

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

  reply	other threads:[~2021-02-04 16:35 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
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 [this message]
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=MWHPR21MB159300985570258E73E208D1D7B39@MWHPR21MB1593.namprd21.prod.outlook.com \
    --to=mikelley@microsoft.com \
    --cc=Lillian.GrassinDrake@microsoft.com \
    --cc=arnd@arndb.de \
    --cc=bp@alien8.de \
    --cc=haiyangz@microsoft.com \
    --cc=hpa@zytor.com \
    --cc=kys@microsoft.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-hyperv@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --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=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 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.