linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
@ 2025-06-13 11:08 Tianyu Lan
  2025-06-13 11:08 ` [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
                   ` (4 more replies)
  0 siblings, 5 replies; 11+ messages in thread
From: Tianyu Lan @ 2025-06-13 11:08 UTC (permalink / raw)
  To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
	hpa, kvijayab, Neeraj.Upadhyay
  Cc: Tianyu Lan, 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 "Expose x2apic_savic_update_vector()"
is to expose new fucntion 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 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/Hyper-V: Allow Hyper-V to inject Hyper-V vectors

 arch/x86/hyperv/hv_apic.c      | 3 +++
 arch/x86/hyperv/hv_init.c      | 4 ++++
 arch/x86/kernel/cpu/mshyperv.c | 2 ++
 drivers/hv/hv.c                | 2 ++
 4 files changed, 11 insertions(+)

-- 
2.25.1

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
  2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
@ 2025-06-13 11:08 ` Tianyu Lan
  2025-06-20  2:17   ` Michael Kelley
  2025-06-13 11:08 ` [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Tianyu Lan @ 2025-06-13 11:08 UTC (permalink / raw)
  To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
	hpa, kvijayab, Neeraj.Upadhyay
  Cc: Tianyu Lan, 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] 11+ messages in thread

* [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V
  2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
  2025-06-13 11:08 ` [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
@ 2025-06-13 11:08 ` Tianyu Lan
  2025-06-20  2:17   ` Michael Kelley
  2025-06-13 11:08 ` [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available Tianyu Lan
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 11+ messages in thread
From: Tianyu Lan @ 2025-06-13 11:08 UTC (permalink / raw)
  To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
	hpa, kvijayab, Neeraj.Upadhyay
  Cc: Tianyu Lan, 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>
---
 drivers/hv/hv.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
index 308c8f279df8..f78b46c51d69 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);
+	apic_update_vector(smp_processor_id(), vmbus_interrupt, true);
 
 	shared_sint.vector = vmbus_interrupt;
 	shared_sint.masked = false;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available
  2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
  2025-06-13 11:08 ` [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
  2025-06-13 11:08 ` [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
@ 2025-06-13 11:08 ` Tianyu Lan
  2025-06-20  2:17   ` Michael Kelley
  2025-06-13 11:08 ` [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors Tianyu Lan
  2025-06-20  2:17 ` [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Michael Kelley
  4 siblings, 1 reply; 11+ messages in thread
From: Tianyu Lan @ 2025-06-13 11:08 UTC (permalink / raw)
  To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
	hpa, kvijayab, Neeraj.Upadhyay
  Cc: Tianyu Lan, linux-hyperv, linux-kernel

From: Tianyu Lan <tiala@microsoft.com>

Hyper-V doesn't support auto-eoi with Secure AVIC.
So Enable HV_DEPRECATING_AEOI_RECOMMENDED flag
to force to write eoi register after handling
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] 11+ messages in thread

* [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors
  2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
                   ` (2 preceding siblings ...)
  2025-06-13 11:08 ` [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available Tianyu Lan
@ 2025-06-13 11:08 ` Tianyu Lan
  2025-06-20  2:18   ` Michael Kelley
  2025-06-20  2:17 ` [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Michael Kelley
  4 siblings, 1 reply; 11+ messages in thread
From: Tianyu Lan @ 2025-06-13 11:08 UTC (permalink / raw)
  To: kys, haiyangz, wei.liu, decui, tglx, mingo, bp, dave.hansen, x86,
	hpa, kvijayab, Neeraj.Upadhyay
  Cc: Tianyu Lan, 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 | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
index 3d1d3547095a..3b99fffb9ffd 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();
 }
 
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* RE: [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
  2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
                   ` (3 preceding siblings ...)
  2025-06-13 11:08 ` [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors Tianyu Lan
@ 2025-06-20  2:17 ` Michael Kelley
  2025-06-20 15:05   ` Tianyu Lan
  4 siblings, 1 reply; 11+ messages in thread
From: Michael Kelley @ 2025-06-20  2:17 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, kvijayab@amd.com,
	Neeraj.Upadhyay@amd.com
  Cc: Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> 
> 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 "Expose x2apic_savic_update_vector()"
> is to expose new fucntion and device driver and arch
> code may update AVIC backing page ALLOWED_IRR field to
> allow Hyper-V inject associated vector.

The last sentence above seems to be leftover from v1 of the
patch set and is no longer accurate. Please update.

Additional observation:  These patches depend on 
CC_ATTR_SNP_SECURE_AVIC, which is not set when operating
in VTOM mode (i.e., a paravisor is present). So evidently Linux
on Hyper-V must handle the Secure AVIC only when Linux is 
running as the paravisor in VTL2 (CONFIG_HYPERV_VTL_MODE=y),
or when running as an SEV-SNP guest with no paravisor. Is
that correct?

> 
> This patchset is based on the AMD patchset "AMD: Add
> Secure AVIC Guest Support" https://lkml.org/lkml/2025/6/10/1579
> 
> 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/Hyper-V: Allow Hyper-V to inject Hyper-V vectors
> 
>  arch/x86/hyperv/hv_apic.c      | 3 +++
>  arch/x86/hyperv/hv_init.c      | 4 ++++
>  arch/x86/kernel/cpu/mshyperv.c | 2 ++
>  drivers/hv/hv.c                | 2 ++
>  4 files changed, 11 insertions(+)
> 
> --
> 2.25.1


^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
  2025-06-13 11:08 ` [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
@ 2025-06-20  2:17   ` Michael Kelley
  0 siblings, 0 replies; 11+ messages in thread
From: Michael Kelley @ 2025-06-20  2:17 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, kvijayab@amd.com,
	Neeraj.Upadhyay@amd.com
  Cc: Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> 
> From: Tianyu Lan <tiala@microsoft.com>

The for the patch Subject line, use "x86/hyperv:" as the prefix. Also,
I would suggest better wording. So:

x86/hyperv: Don't use the Hyper-V APIC driver when Secure AVIC is available

> 
> When Secure AVIC is available, AMD x2apic Secure
> AVIC driver should be selected and return directly
> in the hv_apic_init().

Better wording:

When Secure AVIC is available, the AMD x2apic Secure
AVIC driver will be selected. In that case, have hv_apic_init()
return immediately without doing anything.

> 
> 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	[flat|nested] 11+ messages in thread

* RE: [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V
  2025-06-13 11:08 ` [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
@ 2025-06-20  2:17   ` Michael Kelley
  0 siblings, 0 replies; 11+ messages in thread
From: Michael Kelley @ 2025-06-20  2:17 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, kvijayab@amd.com,
	Neeraj.Upadhyay@amd.com
  Cc: Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> 
> From: Tianyu Lan <tiala@microsoft.com>

For consistency with existing commits, use "Drivers: hv:" as the Subject prefix.

> 
> When Secure AVIC is enabled, Vmbus driver should

s/Vmbus/VMBus/

> call x2apic Secure AVIC interface to allow Hyper-V
> to inject Vmbus message interrupt.

s/Vmbus/VMBus/

> 
> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
> ---
>  drivers/hv/hv.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
> index 308c8f279df8..f78b46c51d69 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);
> +	apic_update_vector(smp_processor_id(), vmbus_interrupt, true);

hv_synic_enable_regs() has an input parameter "cpu". Use that instead
of smp_processor_id().

Also, apic_update_vector() is an x86/x64 only function. But
hv_synic_enable_regs() is built for ARM64 as well, so there will be
a compile error on ARM64. We've worked hard to avoid adding
#ifdef CONFIG_X86 or #ifdef CONFIG_ARM64 in this source code, so
I don't like the idea of adding #ifdef around the call to
apic_update_vector().

A possible approach would be to create a wrapper function such as
"hv_enable_coco_interrupt()" with the same function signature as
apic_update_vector(). hv_enable_coco_interrupt() would go i
arch/x86/hyperv/hv_apic.c and would call apic_update_vector().
Then also implement a __weak stub in hv_common.c that does nothing.
hv_common.c already has several such stubs as a pattern to follow.
The stub would allow hv_synic_enable_regs() to compile on ARM64
without having to add #ifdef's. And perhaps in the future CoCo VMs
on Hyper-V ARM64 would need their own implementation of
hv_enable_coco_interrupt(), though I'm not familiar enough with the
ARM64 CCA architecture to know for sure.

Since hv_synic_enable_regs() is enabling the vmbus_interrupt
vector, should hv_synic_disable_regs() disable the vector? It seems
like there should be symmetry unless there is a good reason
otherwise.

> 
>  	shared_sint.vector = vmbus_interrupt;
>  	shared_sint.masked = false;
> --
> 2.25.1
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* RE: [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available
  2025-06-13 11:08 ` [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available Tianyu Lan
@ 2025-06-20  2:17   ` Michael Kelley
  0 siblings, 0 replies; 11+ messages in thread
From: Michael Kelley @ 2025-06-20  2:17 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, kvijayab@amd.com,
	Neeraj.Upadhyay@amd.com
  Cc: Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> 
> From: Tianyu Lan <tiala@microsoft.com>

Suggested Subject line:

x86/hyperv: Don't use auto-eoi when Secure AVIC is available

> 
> Hyper-V doesn't support auto-eoi with Secure AVIC.
> So Enable HV_DEPRECATING_AEOI_RECOMMENDED flag
> to force to write eoi register after handling
> interrupt.

Wording:

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] 11+ messages in thread

* RE: [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors
  2025-06-13 11:08 ` [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors Tianyu Lan
@ 2025-06-20  2:18   ` Michael Kelley
  0 siblings, 0 replies; 11+ messages in thread
From: Michael Kelley @ 2025-06-20  2:18 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, Neeraj.Upadhyay@amd.com
  Cc: Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> 
> From: Tianyu Lan <tiala@microsoft.com>

Suggested patch Subject line:

x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts

> 
> 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 | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 3d1d3547095a..3b99fffb9ffd 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);
> +

Should hv_cpu_die() disable the vector so that there is symmetry?

>  	return hyperv_init_ghcb();
>  }
> 
> --
> 2.25.1
> 


^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
  2025-06-20  2:17 ` [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Michael Kelley
@ 2025-06-20 15:05   ` Tianyu Lan
  0 siblings, 0 replies; 11+ messages in thread
From: Tianyu Lan @ 2025-06-20 15:05 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, kvijayab@amd.com, Neeraj.Upadhyay@amd.com,
	Tianyu Lan, linux-hyperv@vger.kernel.org,
	linux-kernel@vger.kernel.org

On Fri, Jun 20, 2025 at 10:17 AM Michael Kelley <mhklinux@outlook.com> wrote:
>
> From: Tianyu Lan <ltykernel@gmail.com> Sent: Friday, June 13, 2025 4:08 AM
> >
> > 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 "Expose x2apic_savic_update_vector()"
> > is to expose new fucntion and device driver and arch
> > code may update AVIC backing page ALLOWED_IRR field to
> > allow Hyper-V inject associated vector.
>
> The last sentence above seems to be leftover from v1 of the
> patch set and is no longer accurate. Please update.

Thank you very much, Michael!  Will update.
>
> Additional observation:  These patches depend on
> CC_ATTR_SNP_SECURE_AVIC, which is not set when operating
> in VTOM mode (i.e., a paravisor is present). So evidently Linux
> on Hyper-V must handle the Secure AVIC only when Linux is
> running as the paravisor in VTL2 (CONFIG_HYPERV_VTL_MODE=y),
> or when running as an SEV-SNP guest with no paravisor. Is
> that correct?

This patchset enables Secure AVIC function for enlightened SEV-SNP guest
which uses c-bit to encrypt/decrypt guest memory.

-- 
Thanks
Tianyu Lan

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2025-06-20 15:06 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-13 11:08 [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Tianyu Lan
2025-06-13 11:08 ` [RFC Patch v2 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available Tianyu Lan
2025-06-20  2:17   ` Michael Kelley
2025-06-13 11:08 ` [RFC Patch v2 2/4] drivers/hv: Allow vmbus message synic interrupt injected from Hyper-V Tianyu Lan
2025-06-20  2:17   ` Michael Kelley
2025-06-13 11:08 ` [RFC Patch v2 3/4] x86/Hyper-V: Not use auto-eoi when Secure AVIC is available Tianyu Lan
2025-06-20  2:17   ` Michael Kelley
2025-06-13 11:08 ` [RFC Patch v2 4/4] x86/Hyper-V: Allow Hyper-V to inject Hyper-V vectors Tianyu Lan
2025-06-20  2:18   ` Michael Kelley
2025-06-20  2:17 ` [RFC Patch v2 0/4] x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform Michael Kelley
2025-06-20 15:05   ` Tianyu Lan

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).