* [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
@ 2025-07-23 19:03 Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
` (3 more replies)
0 siblings, 4 replies; 12+ messages in thread
From: Tianyu Lan @ 2025-07-23 19:03 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
hpa, arnd, Neeraj.Upadhyay, kvijayab
Cc: Tianyu Lan, linux-arch, linux-hyperv, linux-kernel
From: Tianyu Lan <tiala@microsoft.com>
Secure AVIC is a new hardware feature in the AMD64
architecture to allow SEV-SNP guests to prevent the
hypervisor from generating unexpected interrupts to
a vCPU or otherwise violate architectural assumptions
around APIC behavior.
Each vCPU has a guest-allocated APIC backing page of
size 4K, which maintains APIC state for that vCPU.
APIC backing page's ALLOWED_IRR field indicates the
interrupt vectors which the guest allows the hypervisor
to send.
This patchset is to enable the feature for Hyper-V
platform. Patch "Drivers: hv: Allow vmbus message
synic interrupt injected from Hyper-V" is to expose
new fucntion hv_enable_coco_interrupt() and device
driver and arch code may update AVIC backing page
ALLOWED_IRR field to allow Hyper-V inject associated
vector.
This patchset is based on the AMD patchset "AMD: Add
Secure AVIC Guest Support"
https://lkml.org/lkml/2025/6/10/1579
Change since v2:
- Add hv_enable_coco_interrupt() as wrapper
of apic_update_vector()
- Re-work change logs
Change since v1:
- Remove the check of Secure AVIC when set APIC backing page
- Use apic_update_vector() instead of exposing new interface
from Secure AVIC driver to update APIC backing page and allow
associated interrupt to be injected by hypervisor.
Tianyu Lan (4):
x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V
x86/Hyper-V: Not use auto-eoi when Secure AVIC is available
x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts
arch/x86/hyperv/hv_apic.c | 8 ++++++++
arch/x86/hyperv/hv_init.c | 7 +++++++
arch/x86/kernel/cpu/mshyperv.c | 2 ++
drivers/hv/hv.c | 2 ++
drivers/hv/hv_common.c | 5 +++++
include/asm-generic/mshyperv.h | 1 +
6 files changed, 25 insertions(+)
--
2.25.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
2025-07-23 19:03 [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
@ 2025-07-23 19:03 ` Tianyu Lan
2025-07-24 23:33 ` Michael Kelley
2025-07-23 19:03 ` [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
` (2 subsequent siblings)
3 siblings, 1 reply; 12+ messages in thread
From: Tianyu Lan @ 2025-07-23 19:03 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
hpa, arnd, Neeraj.Upadhyay, kvijayab
Cc: Tianyu Lan, linux-arch, linux-hyperv, linux-kernel
From: Tianyu Lan <tiala@microsoft.com>
When Secure AVIC is available, AMD x2apic Secure
AVIC driver should be selected and return directly
in the hv_apic_init().
Signed-off-by: Tianyu Lan <tiala@microsoft.com>
---
arch/x86/hyperv/hv_apic.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
index bfde0a3498b9..1c48396e5389 100644
--- a/arch/x86/hyperv/hv_apic.c
+++ b/arch/x86/hyperv/hv_apic.c
@@ -293,6 +293,9 @@ static void hv_send_ipi_self(int vector)
void __init hv_apic_init(void)
{
+ if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
+ return;
+
if (ms_hyperv.hints & HV_X64_CLUSTER_IPI_RECOMMENDED) {
pr_info("Hyper-V: Using IPI hypercalls\n");
/*
--
2.25.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
2025-07-23 19:03 [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
@ 2025-07-23 19:03 ` Tianyu Lan
2025-07-24 23:34 ` Michael Kelley
2025-07-23 19:03 ` [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts Tianyu Lan
3 siblings, 1 reply; 12+ messages in thread
From: Tianyu Lan @ 2025-07-23 19:03 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
hpa, arnd, Neeraj.Upadhyay, kvijayab
Cc: Tianyu Lan, linux-arch, linux-hyperv, linux-kernel
From: Tianyu Lan <tiala@microsoft.com>
When Secure AVIC is enabled, VMBus driver should
call x2apic Secure AVIC interface to allow Hyper-V
to inject VMBus message interrupt.
Signed-off-by: Tianyu Lan <tiala@microsoft.com>
---
Change since v3
- Add hv_enable_coco_interrupt() as wrapper
of apic_update_vector()
arch/x86/hyperv/hv_apic.c | 5 +++++
drivers/hv/hv.c | 2 ++
drivers/hv/hv_common.c | 5 +++++
include/asm-generic/mshyperv.h | 1 +
4 files changed, 13 insertions(+)
diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
index 1c48396e5389..dd6829440ea2 100644
--- a/arch/x86/hyperv/hv_apic.c
+++ b/arch/x86/hyperv/hv_apic.c
@@ -53,6 +53,11 @@ static void hv_apic_icr_write(u32 low, u32 id)
wrmsrq(HV_X64_MSR_ICR, reg_val);
}
+void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
+{
+ apic_update_vector(cpu, vector, set);
+}
+
static u32 hv_apic_read(u32 reg)
{
u32 reg_val, hi;
diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 308c8f279df8..2aafe8946e5b 100644
--- a/drivers/hv/hv.c
+++ b/drivers/hv/hv.c
@@ -20,6 +20,7 @@
#include <linux/interrupt.h>
#include <clocksource/hyperv_timer.h>
#include <asm/mshyperv.h>
+#include <asm/apic.h>
#include <linux/set_memory.h>
#include "hyperv_vmbus.h"
@@ -310,6 +311,7 @@ void hv_synic_enable_regs(unsigned int cpu)
if (vmbus_irq != -1)
enable_percpu_irq(vmbus_irq, 0);
shared_sint.as_uint64 = hv_get_msr(HV_MSR_SINT0 + VMBUS_MESSAGE_SINT);
+ hv_enable_coco_interrupt(cpu, vmbus_interrupt, true);
shared_sint.vector = vmbus_interrupt;
shared_sint.masked = false;
diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
index 49898d10faff..0f024ab3d360 100644
--- a/drivers/hv/hv_common.c
+++ b/drivers/hv/hv_common.c
@@ -716,6 +716,11 @@ u64 __weak hv_tdx_hypercall(u64 control, u64 param1, u64 param2)
}
EXPORT_SYMBOL_GPL(hv_tdx_hypercall);
+void __weak hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
+{
+}
+EXPORT_SYMBOL_GPL(hv_enable_coco_interrupt);
+
void hv_identify_partition_type(void)
{
/* Assume guest role */
diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
index a729b77983fa..7907c9878369 100644
--- a/include/asm-generic/mshyperv.h
+++ b/include/asm-generic/mshyperv.h
@@ -333,6 +333,7 @@ bool hv_is_isolation_supported(void);
bool hv_isolation_type_snp(void);
u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
u64 hv_tdx_hypercall(u64 control, u64 param1, u64 param2);
+void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set);
void hyperv_cleanup(void);
bool hv_query_ext_cap(u64 cap_query);
void hv_setup_dma_ops(struct device *dev, bool coherent);
--
2.25.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
2025-07-23 19:03 [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
@ 2025-07-23 19:03 ` Tianyu Lan
2025-07-24 23:34 ` Michael Kelley
2025-07-23 19:03 ` [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts Tianyu Lan
3 siblings, 1 reply; 12+ messages in thread
From: Tianyu Lan @ 2025-07-23 19:03 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
hpa, arnd, Neeraj.Upadhyay, kvijayab
Cc: Tianyu Lan, linux-arch, linux-hyperv, linux-kernel
From: Tianyu Lan <tiala@microsoft.com>
Hyper-V doesn't support auto-eoi with Secure AVIC.
So set the HV_DEPRECATING_AEOI_RECOMMENDED flag
to force writing the EIO register after handling an interrupt.
Signed-off-by: Tianyu Lan <tiala@microsoft.com>
---
arch/x86/kernel/cpu/mshyperv.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index c78f860419d6..8f029650f16c 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -463,6 +463,8 @@ static void __init ms_hyperv_init_platform(void)
ms_hyperv.max_vp_index, ms_hyperv.max_lp_index);
hv_identify_partition_type();
+ if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
+ ms_hyperv.hints |= HV_DEPRECATING_AEOI_RECOMMENDED;
if (ms_hyperv.hints & HV_X64_HYPERV_NESTED) {
hv_nested = true;
--
2.25.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts
2025-07-23 19:03 [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
` (2 preceding siblings ...)
2025-07-23 19:03 ` [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available Tianyu Lan
@ 2025-07-23 19:03 ` Tianyu Lan
2025-07-24 23:35 ` Michael Kelley
3 siblings, 1 reply; 12+ messages in thread
From: Tianyu Lan @ 2025-07-23 19:03 UTC (permalink / raw)
To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
hpa, arnd, Neeraj.Upadhyay, kvijayab
Cc: Tianyu Lan, linux-arch, linux-hyperv, linux-kernel
From: Tianyu Lan <tiala@microsoft.com>
When Secure AVIC is enabled, call Secure AVIC
function to allow Hyper-V to inject STIMER0 interrupt.
Signed-off-by: Tianyu Lan <tiala@microsoft.com>
---
arch/x86/hyperv/hv_init.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 3d1d3547095a..591338162420 100644
--- a/arch/x86/hyperv/hv_init.c
+++ b/arch/x86/hyperv/hv_init.c
@@ -132,6 +132,10 @@ static int hv_cpu_init(unsigned int cpu)
wrmsrq(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64);
}
+ /* Allow Hyper-V stimer vector to be injected from Hypervisor. */
+ if (ms_hyperv.misc_features & HV_STIMER_DIRECT_MODE_AVAILABLE)
+ apic_update_vector(cpu, HYPERV_STIMER0_VECTOR, true);
+
return hyperv_init_ghcb();
}
@@ -239,6 +243,9 @@ static int hv_cpu_die(unsigned int cpu)
*ghcb_va = NULL;
}
+ if (ms_hyperv.misc_features & HV_STIMER_DIRECT_MODE_AVAILABLE)
+ apic_update_vector(cpu, HYPERV_STIMER0_VECTOR, false);
+
hv_common_cpu_die(cpu);
if (hv_vp_assist_page && hv_vp_assist_page[cpu]) {
--
2.25.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* RE: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
2025-07-23 19:03 ` [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
@ 2025-07-24 23:33 ` Michael Kelley
2025-07-25 20:00 ` Tianyu Lan
0 siblings, 1 reply; 12+ messages in thread
From: Michael Kelley @ 2025-07-24 23:33 UTC (permalink / raw)
To: Tianyu Lan, kys@microsoft.com, haiyangz@microsoft.com,
wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
Neeraj.Upadhyay@amd.com, kvijayab@amd.com
Cc: Tianyu Lan, linux-arch@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
>
> When Secure AVIC is available, AMD x2apic Secure
> AVIC driver should be selected and return directly
> in the hv_apic_init().
For the "RFC Patch v2" version of this patch, I had provided some comments
on the wording for the patch "Subject:" and for the commit message. [1] It
doesn't look like those comments were picked up. The comments
improve the use of English without changing any substantive information,
so I think they should be adopted.
[1] https://lore.kernel.org/linux-hyperv/CAMvTesAscN2MyqJXpcbwcXWC-6-en6U_c03M+2=zcMF0bLv4iw@mail.gmail.com/T/#m893e8cac0314e73ee4626d736c623e640b46ef5d
>
> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> ---
> arch/x86/hyperv/hv_apic.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
> index bfde0a3498b9..1c48396e5389 100644
> --- a/arch/x86/hyperv/hv_apic.c
> +++ b/arch/x86/hyperv/hv_apic.c
> @@ -293,6 +293,9 @@ static void hv_send_ipi_self(int vector)
>
> void __init hv_apic_init(void)
> {
> + if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
> + return;
This new code is indented with spaces instead of tabs. checkpatch.pl should
flag that.
> +
> if (ms_hyperv.hints & HV_X64_CLUSTER_IPI_RECOMMENDED) {
> pr_info("Hyper-V: Using IPI hypercalls\n");
> /*
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
2025-07-23 19:03 ` [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
@ 2025-07-24 23:34 ` Michael Kelley
2025-07-25 20:06 ` Tianyu Lan
0 siblings, 1 reply; 12+ messages in thread
From: Michael Kelley @ 2025-07-24 23:34 UTC (permalink / raw)
To: Tianyu Lan, kys@microsoft.com, haiyangz@microsoft.com,
wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
Neeraj.Upadhyay@amd.com
Cc: Tianyu Lan, linux-arch@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
>
> When Secure AVIC is enabled, VMBus driver should
> call x2apic Secure AVIC interface to allow Hyper-V
> to inject VMBus message interrupt.
>
> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> ---
> Change since v3
> - Add hv_enable_coco_interrupt() as wrapper
> of apic_update_vector()
>
> arch/x86/hyperv/hv_apic.c | 5 +++++
> drivers/hv/hv.c | 2 ++
> drivers/hv/hv_common.c | 5 +++++
> include/asm-generic/mshyperv.h | 1 +
> 4 files changed, 13 insertions(+)
>
> diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
> index 1c48396e5389..dd6829440ea2 100644
> --- a/arch/x86/hyperv/hv_apic.c
> +++ b/arch/x86/hyperv/hv_apic.c
> @@ -53,6 +53,11 @@ static void hv_apic_icr_write(u32 low, u32 id)
> wrmsrq(HV_X64_MSR_ICR, reg_val);
> }
>
> +void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
> +{
> + apic_update_vector(cpu, vector, set);
> +}
> +
> static u32 hv_apic_read(u32 reg)
> {
> u32 reg_val, hi;
> diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
> index 308c8f279df8..2aafe8946e5b 100644
> --- a/drivers/hv/hv.c
> +++ b/drivers/hv/hv.c
> @@ -20,6 +20,7 @@
> #include <linux/interrupt.h>
> #include <clocksource/hyperv_timer.h>
> #include <asm/mshyperv.h>
> +#include <asm/apic.h>
This #include is no longer needed since apic_update_vector()
isn't being called directly. And the file doesn't exist on arm64,
so it would create a compile error on arm64.
Before submitting, I always do a test compile on arm64 with
my patches so that errors like this are caught beforehand! :-)
> #include <linux/set_memory.h>
> #include "hyperv_vmbus.h"
>
> @@ -310,6 +311,7 @@ void hv_synic_enable_regs(unsigned int cpu)
> if (vmbus_irq != -1)
> enable_percpu_irq(vmbus_irq, 0);
> shared_sint.as_uint64 = hv_get_msr(HV_MSR_SINT0 + VMBUS_MESSAGE_SINT);
> + hv_enable_coco_interrupt(cpu, vmbus_interrupt, true);
In the "RFC Patch v2" version of this patch, I had asked about whether
the interrupt should be disabled in hv_synic_disable_regs(), so there is
symmetry. [1] I see that in Patch 4 of this series, you are disabling the
STIMER0 interrupt when a CPU goes offline. If disabling vmbus_interrupt
causes a problem, I'm curious about the details.
[1] https://lore.kernel.org/linux-hyperv/CAMvTesAscN2MyqJXpcbwcXWC-6-en6U_c03M+2=zcMF0bLv4iw@mail.gmail.com/T/#m5e7ac9ba9a9b9c9b17dd503291338d21b3c43e7e
>
> shared_sint.vector = vmbus_interrupt;
> shared_sint.masked = false;
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index 49898d10faff..0f024ab3d360 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -716,6 +716,11 @@ u64 __weak hv_tdx_hypercall(u64 control, u64 param1, u64 param2)
> }
> EXPORT_SYMBOL_GPL(hv_tdx_hypercall);
>
> +void __weak hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
> +{
> +}
> +EXPORT_SYMBOL_GPL(hv_enable_coco_interrupt);
> +
> void hv_identify_partition_type(void)
> {
> /* Assume guest role */
> diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> index a729b77983fa..7907c9878369 100644
> --- a/include/asm-generic/mshyperv.h
> +++ b/include/asm-generic/mshyperv.h
> @@ -333,6 +333,7 @@ bool hv_is_isolation_supported(void);
> bool hv_isolation_type_snp(void);
> u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
> u64 hv_tdx_hypercall(u64 control, u64 param1, u64 param2);
> +void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set);
> void hyperv_cleanup(void);
> bool hv_query_ext_cap(u64 cap_query);
> void hv_setup_dma_ops(struct device *dev, bool coherent);
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
2025-07-23 19:03 ` [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available Tianyu Lan
@ 2025-07-24 23:34 ` Michael Kelley
2025-07-25 19:58 ` Tianyu Lan
0 siblings, 1 reply; 12+ messages in thread
From: Michael Kelley @ 2025-07-24 23:34 UTC (permalink / raw)
To: Tianyu Lan, kys@microsoft.com, haiyangz@microsoft.com,
wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
Neeraj.Upadhyay@amd.com
Cc: Tianyu Lan, linux-arch@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
>
I'm nit-picking, but the patch Subject: line prefix should be "x86/hyperv:"
for consistency with past patches. Note that there's no capitalization
or dash. I know not everyone is consistent on this if you look at the git log
for mshyperv.c, but I try to flag it and encourage consistency.
> Hyper-V doesn't support auto-eoi with Secure AVIC.
> So set the HV_DEPRECATING_AEOI_RECOMMENDED flag
> to force writing the EIO register after handling an interrupt.
>
> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> ---
> arch/x86/kernel/cpu/mshyperv.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
> index c78f860419d6..8f029650f16c 100644
> --- a/arch/x86/kernel/cpu/mshyperv.c
> +++ b/arch/x86/kernel/cpu/mshyperv.c
> @@ -463,6 +463,8 @@ static void __init ms_hyperv_init_platform(void)
> ms_hyperv.max_vp_index, ms_hyperv.max_lp_index);
>
> hv_identify_partition_type();
> + if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
> + ms_hyperv.hints |= HV_DEPRECATING_AEOI_RECOMMENDED;
>
> if (ms_hyperv.hints & HV_X64_HYPERV_NESTED) {
> hv_nested = true;
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* RE: [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts
2025-07-23 19:03 ` [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts Tianyu Lan
@ 2025-07-24 23:35 ` Michael Kelley
0 siblings, 0 replies; 12+ messages in thread
From: Michael Kelley @ 2025-07-24 23:35 UTC (permalink / raw)
To: Tianyu Lan, kys@microsoft.com, haiyangz@microsoft.com,
wei.liu@kernel.org, decui@microsoft.com, tglx@linutronix.de,
mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, arnd@arndb.de,
Neeraj.Upadhyay@amd.com
Cc: Tianyu Lan, linux-arch@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
>
> When Secure AVIC is enabled, call Secure AVIC
> function to allow Hyper-V to inject STIMER0 interrupt.
>
> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> ---
> arch/x86/hyperv/hv_init.c | 7 +++++++
> 1 file changed, 7 insertions(+)
>
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 3d1d3547095a..591338162420 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -132,6 +132,10 @@ static int hv_cpu_init(unsigned int cpu)
> wrmsrq(HV_X64_MSR_VP_ASSIST_PAGE, msr.as_uint64);
> }
>
> + /* Allow Hyper-V stimer vector to be injected from Hypervisor. */
> + if (ms_hyperv.misc_features & HV_STIMER_DIRECT_MODE_AVAILABLE)
> + apic_update_vector(cpu, HYPERV_STIMER0_VECTOR, true);
> +
> return hyperv_init_ghcb();
> }
>
> @@ -239,6 +243,9 @@ static int hv_cpu_die(unsigned int cpu)
> *ghcb_va = NULL;
> }
>
> + if (ms_hyperv.misc_features & HV_STIMER_DIRECT_MODE_AVAILABLE)
> + apic_update_vector(cpu, HYPERV_STIMER0_VECTOR, false);
> +
> hv_common_cpu_die(cpu);
>
> if (hv_vp_assist_page && hv_vp_assist_page[cpu]) {
> --
> 2.25.1
>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
2025-07-24 23:34 ` Michael Kelley
@ 2025-07-25 19:58 ` Tianyu Lan
0 siblings, 0 replies; 12+ messages in thread
From: Tianyu Lan @ 2025-07-25 19:58 UTC (permalink / raw)
To: Michael Kelley
Cc: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, arnd@arndb.de, Neeraj.Upadhyay@amd.com, Tianyu Lan,
linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-kernel@vger.kernel.org
On Fri, Jul 25, 2025 at 7:34 AM Michael Kelley <mhklinux@outlook.com> wrote:
>
> From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
> >
>
> I'm nit-picking, but the patch Subject: line prefix should be "x86/hyperv:"
> for consistency with past patches. Note that there's no capitalization
> or dash. I know not everyone is consistent on this if you look at the git log
> for mshyperv.c, but I try to flag it and encourage consistency.
>
> > Hyper-V doesn't support auto-eoi with Secure AVIC.
> > So set the HV_DEPRECATING_AEOI_RECOMMENDED flag
> > to force writing the EIO register after handling an interrupt.
> >
> > Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> > ---
> > arch/x86/kernel/cpu/mshyperv.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
> > index c78f860419d6..8f029650f16c 100644
> > --- a/arch/x86/kernel/cpu/mshyperv.c
> > +++ b/arch/x86/kernel/cpu/mshyperv.c
> > @@ -463,6 +463,8 @@ static void __init ms_hyperv_init_platform(void)
> > ms_hyperv.max_vp_index, ms_hyperv.max_lp_index);
> >
> > hv_identify_partition_type();
> > + if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
> > + ms_hyperv.hints |= HV_DEPRECATING_AEOI_RECOMMENDED;
> >
> > if (ms_hyperv.hints & HV_X64_HYPERV_NESTED) {
> > hv_nested = true;
> > --
> > 2.25.1
> >
>
Hi Michael:
Thanks for your review. Will update.
--
Thanks
Tianyu Lan
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
2025-07-24 23:33 ` Michael Kelley
@ 2025-07-25 20:00 ` Tianyu Lan
0 siblings, 0 replies; 12+ messages in thread
From: Tianyu Lan @ 2025-07-25 20:00 UTC (permalink / raw)
To: Michael Kelley
Cc: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, arnd@arndb.de, Neeraj.Upadhyay@amd.com,
kvijayab@amd.com, Tianyu Lan, linux-arch@vger.kernel.org,
linux-hyperv@vger.kernel.org, linux-kernel@vger.kernel.org
On Fri, Jul 25, 2025 at 7:33 AM Michael Kelley <mhklinux@outlook.com> wrote:
>
> From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
> >
> > When Secure AVIC is available, AMD x2apic Secure
> > AVIC driver should be selected and return directly
> > in the hv_apic_init().
>
> For the "RFC Patch v2" version of this patch, I had provided some comments
> on the wording for the patch "Subject:" and for the commit message. [1] It
> doesn't look like those comments were picked up. The comments
> improve the use of English without changing any substantive information,
> so I think they should be adopted.
>
> [1] https://lore.kernel.org/linux-hyperv/CAMvTesAscN2MyqJXpcbwcXWC-6-en6U_c03M+2=zcMF0bLv4iw@mail.gmail.com/T/#m893e8cac0314e73ee4626d736c623e640b46ef5d
>
Thanks for the reminder. Will update in the next version.
Thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
2025-07-24 23:34 ` Michael Kelley
@ 2025-07-25 20:06 ` Tianyu Lan
0 siblings, 0 replies; 12+ messages in thread
From: Tianyu Lan @ 2025-07-25 20:06 UTC (permalink / raw)
To: Michael Kelley
Cc: kys@microsoft.com, haiyangz@microsoft.com, wei.liu@kernel.org,
decui@microsoft.com, tglx@linutronix.de, mingo@redhat.com,
bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org,
hpa@zytor.com, arnd@arndb.de, Neeraj.Upadhyay@amd.com, Tianyu Lan,
linux-arch@vger.kernel.org, linux-hyperv@vger.kernel.org,
linux-kernel@vger.kernel.org
On Fri, Jul 25, 2025 at 7:34 AM Michael Kelley <mhklinux@outlook.com> wrote:
>
> From: Tianyu Lan <ltykernel@gmail.com> Sent: Wednesday, July 23, 2025 12:03 PM
> >
> > When Secure AVIC is enabled, VMBus driver should
> > call x2apic Secure AVIC interface to allow Hyper-V
> > to inject VMBus message interrupt.
> >
> > Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> > ---
> > Change since v3
> > - Add hv_enable_coco_interrupt() as wrapper
> > of apic_update_vector()
> >
> > arch/x86/hyperv/hv_apic.c | 5 +++++
> > drivers/hv/hv.c | 2 ++
> > drivers/hv/hv_common.c | 5 +++++
> > include/asm-generic/mshyperv.h | 1 +
> > 4 files changed, 13 insertions(+)
> >
> > diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c
> > index 1c48396e5389..dd6829440ea2 100644
> > --- a/arch/x86/hyperv/hv_apic.c
> > +++ b/arch/x86/hyperv/hv_apic.c
> > @@ -53,6 +53,11 @@ static void hv_apic_icr_write(u32 low, u32 id)
> > wrmsrq(HV_X64_MSR_ICR, reg_val);
> > }
> >
> > +void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
> > +{
> > + apic_update_vector(cpu, vector, set);
> > +}
> > +
> > static u32 hv_apic_read(u32 reg)
> > {
> > u32 reg_val, hi;
> > diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
> > index 308c8f279df8..2aafe8946e5b 100644
> > --- a/drivers/hv/hv.c
> > +++ b/drivers/hv/hv.c
> > @@ -20,6 +20,7 @@
> > #include <linux/interrupt.h>
> > #include <clocksource/hyperv_timer.h>
> > #include <asm/mshyperv.h>
> > +#include <asm/apic.h>
>
> This #include is no longer needed since apic_update_vector()
> isn't being called directly. And the file doesn't exist on arm64,
> so it would create a compile error on arm64.
>
> Before submitting, I always do a test compile on arm64 with
> my patches so that errors like this are caught beforehand! :-)
Yes, good suggestion and will add compilation test on ARM64.
before sending out. Thanks.
>
> > #include <linux/set_memory.h>
> > #include "hyperv_vmbus.h"
> >
> > @@ -310,6 +311,7 @@ void hv_synic_enable_regs(unsigned int cpu)
> > if (vmbus_irq != -1)
> > enable_percpu_irq(vmbus_irq, 0);
> > shared_sint.as_uint64 = hv_get_msr(HV_MSR_SINT0 + VMBUS_MESSAGE_SINT);
> > + hv_enable_coco_interrupt(cpu, vmbus_interrupt, true);
>
> In the "RFC Patch v2" version of this patch, I had asked about whether
> the interrupt should be disabled in hv_synic_disable_regs(), so there is
> symmetry. [1] I see that in Patch 4 of this series, you are disabling the
> STIMER0 interrupt when a CPU goes offline. If disabling vmbus_interrupt
> causes a problem, I'm curious about the details.
>
Yes, that makes sense and will add it.
>
> >
> > shared_sint.vector = vmbus_interrupt;
> > shared_sint.masked = false;
> > diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> > index 49898d10faff..0f024ab3d360 100644
> > --- a/drivers/hv/hv_common.c
> > +++ b/drivers/hv/hv_common.c
> > @@ -716,6 +716,11 @@ u64 __weak hv_tdx_hypercall(u64 control, u64 param1, u64 param2)
> > }
> > EXPORT_SYMBOL_GPL(hv_tdx_hypercall);
> >
> > +void __weak hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
> > +{
> > +}
> > +EXPORT_SYMBOL_GPL(hv_enable_coco_interrupt);
> > +
> > void hv_identify_partition_type(void)
> > {
> > /* Assume guest role */
> > diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> > index a729b77983fa..7907c9878369 100644
> > --- a/include/asm-generic/mshyperv.h
> > +++ b/include/asm-generic/mshyperv.h
> > @@ -333,6 +333,7 @@ bool hv_is_isolation_supported(void);
> > bool hv_isolation_type_snp(void);
> > u64 hv_ghcb_hypercall(u64 control, void *input, void *output, u32 input_size);
> > u64 hv_tdx_hypercall(u64 control, u64 param1, u64 param2);
> > +void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set);
> > void hyperv_cleanup(void);
> > bool hv_query_ext_cap(u64 cap_query);
> > void hv_setup_dma_ops(struct device *dev, bool coherent);
> > --
> > 2.25.1
> >
>
--
Thanks
Tianyu Lan
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-07-25 20:07 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-23 19:03 [RFC PATCH V3 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
2025-07-24 23:33 ` Michael Kelley
2025-07-25 20:00 ` Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
2025-07-24 23:34 ` Michael Kelley
2025-07-25 20:06 ` Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available Tianyu Lan
2025-07-24 23:34 ` Michael Kelley
2025-07-25 19:58 ` Tianyu Lan
2025-07-23 19:03 ` [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts Tianyu Lan
2025-07-24 23:35 ` Michael Kelley
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).