From: Wei Liu <wei.liu@kernel.org>
To: Nuno Das Neves <nunodasneves@linux.microsoft.com>
Cc: linux-hyperv@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
mhklinux@outlook.com, decui@microsoft.com,
catalin.marinas@arm.com, will@kernel.org, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
jinankjain@linux.microsoft.com, muminulrussell@gmail.com,
skinsburskii@linux.microsoft.com, mukeshrathor@microsoft.com
Subject: Re: [PATCH 1/2] hyperv: Move hv_current_partition_id to arch-generic code
Date: Sat, 7 Dec 2024 07:36:22 +0000 [thread overview]
Message-ID: <Z1P69tl2qMNH-xmg@liuwe-devbox-debian-v2> (raw)
In-Reply-To: <1733523707-15954-2-git-send-email-nunodasneves@linux.microsoft.com>
On Fri, Dec 06, 2024 at 02:21:46PM -0800, Nuno Das Neves wrote:
> From: Nuno Das Neves <nudasnev@microsoft.com>
>
> Make hv_current_partition_id available in both x86_64 and arm64.
> This feature isn't specific to x86_64 and will be needed by common
> code.
>
> While at it, replace the BUG()s with WARN()s. Failing to get the id
> need not crash the machine (although it is a very bad sign).
>
A lot of things have changed since it was introduced. I don't remember
why I decided to use BUG() instead of WARN() in the first place.
If the system can still function without knowing its partition id, then
can this be removed completely? We can always use the SELF id.
Thanks,
Wei.
> Signed-off-by: Nuno Das Neves <nudasnev@microsoft.com>
> ---
> arch/arm64/hyperv/mshyperv.c | 3 +++
> arch/x86/hyperv/hv_init.c | 25 +------------------------
> arch/x86/include/asm/mshyperv.h | 2 --
> drivers/hv/hv_common.c | 23 +++++++++++++++++++++++
> include/asm-generic/mshyperv.h | 2 ++
> 5 files changed, 29 insertions(+), 26 deletions(-)
>
> diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c
> index b1a4de4eee29..5050e748d266 100644
> --- a/arch/arm64/hyperv/mshyperv.c
> +++ b/arch/arm64/hyperv/mshyperv.c
> @@ -19,6 +19,9 @@
>
> static bool hyperv_initialized;
>
> +u64 hv_current_partition_id = HV_PARTITION_ID_SELF;
> +EXPORT_SYMBOL_GPL(hv_current_partition_id);
> +
> int hv_get_hypervisor_version(union hv_hypervisor_version_info *info)
> {
> hv_get_vpreg_128(HV_REGISTER_HYPERVISOR_VERSION,
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 95eada2994e1..950f5ccdb9d9 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -35,7 +35,7 @@
> #include <clocksource/hyperv_timer.h>
> #include <linux/highmem.h>
>
> -u64 hv_current_partition_id = ~0ull;
> +u64 hv_current_partition_id = HV_PARTITION_ID_SELF;
> EXPORT_SYMBOL_GPL(hv_current_partition_id);
>
> void *hv_hypercall_pg;
> @@ -394,24 +394,6 @@ static void __init hv_stimer_setup_percpu_clockev(void)
> old_setup_percpu_clockev();
> }
>
> -static void __init hv_get_partition_id(void)
> -{
> - struct hv_get_partition_id *output_page;
> - 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);
> - if (!hv_result_success(status)) {
> - /* No point in proceeding if this failed */
> - pr_err("Failed to get partition ID: %lld\n", status);
> - BUG();
> - }
> - hv_current_partition_id = output_page->partition_id;
> - local_irq_restore(flags);
> -}
> -
> #if IS_ENABLED(CONFIG_HYPERV_VTL_MODE)
> static u8 __init get_vtl(void)
> {
> @@ -606,11 +588,6 @@ 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();
> -
> - BUG_ON(hv_root_partition && hv_current_partition_id == ~0ull);
> -
> #ifdef CONFIG_PCI_MSI
> /*
> * If we're running as root, we want to create our own PCI MSI domain.
> diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
> index 5f0bc6a6d025..9eeca2a6d047 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -44,8 +44,6 @@ extern bool hyperv_paravisor_present;
>
> extern void *hv_hypercall_pg;
>
> -extern u64 hv_current_partition_id;
> -
> extern union hv_ghcb * __percpu *hv_ghcb_pg;
>
> bool hv_isolation_type_snp(void);
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index 7a35c82976e0..819bcfd2b149 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -278,11 +278,34 @@ static void hv_kmsg_dump_register(void)
> }
> }
>
> +static void __init hv_get_partition_id(void)
> +{
> + struct hv_get_partition_id *output_page;
> + 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);
> + if (!hv_result_success(status)) {
> + local_irq_restore(flags);
> + WARN(true, "Failed to get partition ID: %lld\n", status);
> + return;
> + }
> + hv_current_partition_id = output_page->partition_id;
> + local_irq_restore(flags);
> +}
> +
> int __init hv_common_init(void)
> {
> int i;
> union hv_hypervisor_version_info version;
>
> + if (ms_hyperv.priv_high & HV_ACCESS_PARTITION_ID)
> + hv_get_partition_id();
> +
> + WARN_ON(hv_root_partition && hv_current_partition_id == HV_PARTITION_ID_SELF);
> +
> /* Get information about the Hyper-V host version */
> if (!hv_get_hypervisor_version(&version))
> pr_info("Hyper-V: Host Build %d.%d.%d.%d-%d-%d\n",
> diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> index 8fe7aaab2599..8c4ff6e9aae7 100644
> --- a/include/asm-generic/mshyperv.h
> +++ b/include/asm-generic/mshyperv.h
> @@ -60,6 +60,8 @@ struct ms_hyperv_info {
> extern struct ms_hyperv_info ms_hyperv;
> extern bool hv_nested;
>
> +extern u64 hv_current_partition_id;
> +
> extern void * __percpu *hyperv_pcpu_input_arg;
> extern void * __percpu *hyperv_pcpu_output_arg;
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2024-12-07 7:36 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-06 22:21 [PATCH 0/2] hyperv: Move some features to common code Nuno Das Neves
2024-12-06 22:21 ` [PATCH 1/2] hyperv: Move hv_current_partition_id to arch-generic code Nuno Das Neves
2024-12-07 7:36 ` Wei Liu [this message]
2025-01-22 22:40 ` Nuno Das Neves
2024-12-08 3:01 ` Michael Kelley
2024-12-10 16:40 ` Nuno Das Neves
2024-12-06 22:21 ` [PATCH 2/2] hyperv: Move create_vp and deposit_pages hvcalls to hv_common.c Nuno Das Neves
2024-12-07 7:36 ` Wei Liu
2024-12-08 2:59 ` [PATCH 0/2] hyperv: Move some features to common code Michael Kelley
2024-12-09 20:20 ` Nuno Das Neves
2024-12-17 17:48 ` Michael Kelley
2025-01-22 23:05 ` Nuno Das Neves
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=Z1P69tl2qMNH-xmg@liuwe-devbox-debian-v2 \
--to=wei.liu@kernel.org \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=jinankjain@linux.microsoft.com \
--cc=kys@microsoft.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mhklinux@outlook.com \
--cc=mingo@redhat.com \
--cc=mukeshrathor@microsoft.com \
--cc=muminulrussell@gmail.com \
--cc=nunodasneves@linux.microsoft.com \
--cc=skinsburskii@linux.microsoft.com \
--cc=tglx@linutronix.de \
--cc=will@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).