From: Michael Kelley <mhklinux@outlook.com>
To: Roman Kisel <romank@linux.microsoft.com>,
"arnd@arndb.de" <arnd@arndb.de>,
"bhelgaas@google.com" <bhelgaas@google.com>,
"bp@alien8.de" <bp@alien8.de>,
"catalin.marinas@arm.com" <catalin.marinas@arm.com>,
"conor+dt@kernel.org" <conor+dt@kernel.org>,
"dave.hansen@linux.intel.com" <dave.hansen@linux.intel.com>,
"decui@microsoft.com" <decui@microsoft.com>,
"haiyangz@microsoft.com" <haiyangz@microsoft.com>,
"hpa@zytor.com" <hpa@zytor.com>,
"krzk+dt@kernel.org" <krzk+dt@kernel.org>,
"kw@linux.com" <kw@linux.com>,
"kys@microsoft.com" <kys@microsoft.com>,
"lpieralisi@kernel.org" <lpieralisi@kernel.org>,
"manivannan.sadhasivam@linaro.org"
<manivannan.sadhasivam@linaro.org>,
"mingo@redhat.com" <mingo@redhat.com>,
"robh@kernel.org" <robh@kernel.org>,
"ssengar@linux.microsoft.com" <ssengar@linux.microsoft.com>,
"tglx@linutronix.de" <tglx@linutronix.de>,
"wei.liu@kernel.org" <wei.liu@kernel.org>,
"will@kernel.org" <will@kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-arch@vger.kernel.org" <linux-arch@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-pci@vger.kernel.org" <linux-pci@vger.kernel.org>,
"x86@kernel.org" <x86@kernel.org>
Cc: "benhill@microsoft.com" <benhill@microsoft.com>,
"bperkins@microsoft.com" <bperkins@microsoft.com>,
"sunilmut@microsoft.com" <sunilmut@microsoft.com>
Subject: RE: [PATCH hyperv-next v4 3/6] Drivers: hv: Provide arch-neutral implementation of get_vtl()
Date: Wed, 19 Feb 2025 23:17:28 +0000 [thread overview]
Message-ID: <SN6PR02MB4157164CE9A332EF62C6C037D4C52@SN6PR02MB4157.namprd02.prod.outlook.com> (raw)
In-Reply-To: <20250212014321.1108840-4-romank@linux.microsoft.com>
From: Roman Kisel <romank@linux.microsoft.com> Sent: Tuesday, February 11, 2025 5:43 PM
>
> To run in the VTL mode, Hyper-V drivers have to know what
> VTL the system boots in, and the arm64/hyperv code does not
> have the means to compute that.
>
> Refactor the code to hoist the function that detects VTL,
> make it arch-neutral to be able to employ it to get the VTL
> on arm64.
>
> Signed-off-by: Roman Kisel <romank@linux.microsoft.com>
> ---
> arch/x86/hyperv/hv_init.c | 34 ----------------------------------
> drivers/hv/hv_common.c | 32 ++++++++++++++++++++++++++++++++
> include/asm-generic/mshyperv.h | 6 ++++++
> include/hyperv/hvgdk_mini.h | 2 +-
> 4 files changed, 39 insertions(+), 35 deletions(-)
>
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 173005e6a95d..383bca1a3ae2 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -411,40 +411,6 @@ static void __init hv_get_partition_id(void)
> local_irq_restore(flags);
> }
>
> -#if IS_ENABLED(CONFIG_HYPERV_VTL_MODE)
> -static u8 __init get_vtl(void)
> -{
> - u64 control = HV_HYPERCALL_REP_COMP_1 | HVCALL_GET_VP_REGISTERS;
> - struct hv_input_get_vp_registers *input;
> - struct hv_output_get_vp_registers *output;
> - unsigned long flags;
> - u64 ret;
> -
> - local_irq_save(flags);
> - input = *this_cpu_ptr(hyperv_pcpu_input_arg);
> - output = *this_cpu_ptr(hyperv_pcpu_output_arg);
> -
> - memset(input, 0, struct_size(input, names, 1));
> - input->partition_id = HV_PARTITION_ID_SELF;
> - input->vp_index = HV_VP_INDEX_SELF;
> - input->input_vtl.as_uint8 = 0;
> - input->names[0] = HV_REGISTER_VSM_VP_STATUS;
> -
> - ret = hv_do_hypercall(control, input, output);
> - if (hv_result_success(ret)) {
> - ret = output->values[0].reg8 & HV_X64_VTL_MASK;
> - } else {
> - pr_err("Failed to get VTL(error: %lld) exiting...\n", ret);
> - BUG();
> - }
> -
> - local_irq_restore(flags);
> - return ret;
> -}
> -#else
> -static inline u8 get_vtl(void) { return 0; }
> -#endif
> -
> /*
> * This function is to be invoked early in the boot sequence after the
> * hypervisor has been detected.
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index af5d1dc451f6..70f754710170 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -283,6 +283,38 @@ static inline bool hv_output_page_exists(void)
> return hv_root_partition || IS_ENABLED(CONFIG_HYPERV_VTL_MODE);
> }
>
> +#if IS_ENABLED(CONFIG_HYPERV_VTL_MODE)
> +u8 __init get_vtl(void)
> +{
> + u64 control = HV_HYPERCALL_REP_COMP_1 | HVCALL_GET_VP_REGISTERS;
> + struct hv_input_get_vp_registers *input;
> + struct hv_output_get_vp_registers *output;
> + unsigned long flags;
> + u64 ret;
> +
> + local_irq_save(flags);
> + input = *this_cpu_ptr(hyperv_pcpu_input_arg);
> + output = *this_cpu_ptr(hyperv_pcpu_output_arg);
> +
> + memset(input, 0, struct_size(input, names, 1));
> + input->partition_id = HV_PARTITION_ID_SELF;
> + input->vp_index = HV_VP_INDEX_SELF;
> + input->input_vtl.as_uint8 = 0;
> + input->names[0] = HV_REGISTER_VSM_VP_STATUS;
> +
> + ret = hv_do_hypercall(control, input, output);
> + if (hv_result_success(ret)) {
> + ret = output->values[0].reg8 & HV_VTL_MASK;
> + } else {
> + pr_err("Failed to get VTL(error: %lld) exiting...\n", ret);
> + BUG();
> + }
> +
> + local_irq_restore(flags);
> + return ret;
> +}
> +#endif
> +
> int __init hv_common_init(void)
> {
> int i;
> diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> index a7bbe504e4f3..bb36856c3467 100644
> --- a/include/asm-generic/mshyperv.h
> +++ b/include/asm-generic/mshyperv.h
> @@ -314,4 +314,10 @@ static inline enum hv_isolation_type
> hv_get_isolation_type(void)
> }
> #endif /* CONFIG_HYPERV */
>
> +#if IS_ENABLED(CONFIG_HYPERV_VTL_MODE)
> +u8 __init get_vtl(void);
> +#else
> +static inline u8 get_vtl(void) { return 0; }
> +#endif
> +
> #endif
> diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
> index 155615175965..0f8443595732 100644
> --- a/include/hyperv/hvgdk_mini.h
> +++ b/include/hyperv/hvgdk_mini.h
> @@ -1202,7 +1202,7 @@ struct hv_send_ipi { /*
> HV_INPUT_SEND_SYNTHETIC_CLUSTER_IPI */
> u64 cpu_mask;
> } __packed;
>
> -#define HV_X64_VTL_MASK GENMASK(3, 0)
> +#define HV_VTL_MASK GENMASK(3, 0)
>
> /* Hyper-V memory host visibility */
> enum hv_mem_host_visibility {
> --
> 2.43.0
>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
next prev parent reply other threads:[~2025-02-19 23:17 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-12 1:43 [PATCH hyperv-next v4 0/6] arm64: hyperv: Support Virtual Trust Level Boot Roman Kisel
2025-02-12 1:43 ` [PATCH hyperv-next v4 1/6] arm64: hyperv: Use SMCCC to detect hypervisor presence Roman Kisel
2025-02-12 6:54 ` Arnd Bergmann
2025-02-13 23:23 ` Roman Kisel
2025-02-14 8:05 ` Arnd Bergmann
2025-02-14 16:47 ` Roman Kisel
2025-02-24 23:22 ` Roman Kisel
2025-02-25 7:24 ` Arnd Bergmann
2025-02-25 22:25 ` Roman Kisel
2025-02-26 13:57 ` Arnd Bergmann
2025-02-19 23:13 ` Michael Kelley
2025-02-20 16:34 ` Roman Kisel
2025-02-12 1:43 ` [PATCH hyperv-next v4 2/6] Drivers: hv: Enable VTL mode for arm64 Roman Kisel
2025-02-19 23:14 ` Michael Kelley
2025-02-20 16:36 ` Roman Kisel
2025-02-12 1:43 ` [PATCH hyperv-next v4 3/6] Drivers: hv: Provide arch-neutral implementation of get_vtl() Roman Kisel
2025-02-19 23:17 ` Michael Kelley [this message]
2025-02-12 1:43 ` [PATCH hyperv-next v4 4/6] dt-bindings: microsoft,vmbus: Add GIC and DMA coherence to the example Roman Kisel
2025-02-12 6:42 ` Krzysztof Kozlowski
2025-02-12 23:57 ` Roman Kisel
2025-02-13 20:50 ` Roman Kisel
2025-02-12 1:43 ` [PATCH hyperv-next v4 5/6] Drivers: hv: vmbus: Get the IRQ number from DeviceTree Roman Kisel
2025-02-19 23:20 ` Michael Kelley
2025-02-12 1:43 ` [PATCH hyperv-next v4 6/6] PCI: hv: Get vPCI MSI IRQ domain " Roman Kisel
2025-02-12 17:42 ` Bjorn Helgaas
2025-02-18 22:32 ` Roman Kisel
2025-02-19 23:51 ` Roman Kisel
2025-02-19 23:29 ` Michael Kelley
2025-02-20 16:41 ` Roman Kisel
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=SN6PR02MB4157164CE9A332EF62C6C037D4C52@SN6PR02MB4157.namprd02.prod.outlook.com \
--to=mhklinux@outlook.com \
--cc=arnd@arndb.de \
--cc=benhill@microsoft.com \
--cc=bhelgaas@google.com \
--cc=bp@alien8.de \
--cc=bperkins@microsoft.com \
--cc=catalin.marinas@arm.com \
--cc=conor+dt@kernel.org \
--cc=dave.hansen@linux.intel.com \
--cc=decui@microsoft.com \
--cc=devicetree@vger.kernel.org \
--cc=haiyangz@microsoft.com \
--cc=hpa@zytor.com \
--cc=krzk+dt@kernel.org \
--cc=kw@linux.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=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=manivannan.sadhasivam@linaro.org \
--cc=mingo@redhat.com \
--cc=robh@kernel.org \
--cc=romank@linux.microsoft.com \
--cc=ssengar@linux.microsoft.com \
--cc=sunilmut@microsoft.com \
--cc=tglx@linutronix.de \
--cc=wei.liu@kernel.org \
--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 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.