x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
Subsystems (4)
v3 cover x86/Hyper-V: Add AMD Secure AVIC for Hyper-V platform
From: Tianyu Lan <[email protected]>
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(+)
Signature · 1 line
2.25.1
RFC PATCH v3 1/4 x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
From: Tianyu Lan <[email protected]>
When Secure AVIC is available, AMD x2apic Secure AVIC driver should be selected and return directly in the hv_apic_init().
--- arch/x86/hyperv/hv_apic.c | 3 +++ 1 file changed, 3 insertions(+)
arch/x86/hyperv/hv_apic.c +3 -0
@@ -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" );/*
Signature · 1 line
2.25.1
kernel test robot
build botRe: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
kernel test robot noticed the following build errors:
Hi Tianyu,
[This is a private test report for your RFC patch.] kernel test robot noticed the following build errors:
[auto build test ERROR on tip/x86/core]
[also build test ERROR on tip/master linus/master tip/auto-latest v6.16-rc7 next-20250724] [If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Tianyu-Lan/x86-Hyper-V-Not-use-hv-apic-driver-when-Secure-AVIC-is-available/20250724-030630 base: tip/x86/core patch link: https://lore.kernel.org/r/20250723190308.5945-2-ltykernel%40gmail.com patch subject: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available config: x86_64-buildonly-randconfig-001-20250724 (https://download.01.org/0day-ci/archive/20250724/[email protected]/config) compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250724/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
arch/x86/hyperv/hv_apic.c: In function 'hv_apic_init':
>> arch/x86/hyperv/hv_apic.c:296:28: error: 'CC_ATTR_SNP_SECURE_AVIC' undeclared (first use in this function); did you mean 'CC_ATTR_GUEST_SNP_SECURE_TSC'?
296 | if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
| ^~~~~~~~~~~~~~~~~~~~~~~
| CC_ATTR_GUEST_SNP_SECURE_TSC arch/x86/hyperv/hv_apic.c:296:28: note: each undeclared identifier is reported only once for each function it appears in
vim +296 arch/x86/hyperv/hv_apic.c
293
294 void __init hv_apic_init(void)
295 {
> 296 if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
RE: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
In reply to Tianyu LanFrom: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 4 lines
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.
Quoted 11 lines
Signed-off-by Tianyu Lan <[email protected]>--- arch/x86/hyperv/hv_apic.c | 3 +++ 1 file changed, 3 insertions(+)arch/x86/hyperv/hv_apic.c +0
-0
arch/x86/hyperv/hv_apic.c static void hv_send_ipi_self(int vector) · line 297
Quoted 5 lines
arch/x86/hyperv/hv_apic.c +2
-0@@ -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.
Quoted 7 lines
arch/x86/hyperv/hv_apic.c +1
-1+if (ms_hyperv.hints &HV_X64_CLUSTER_IPI_RECOMMENDED ) {pr_info ("Hyper-V: Using IPI hypercalls\n" );/* -- 2.25.1
Re: [RFC PATCH V3 1/4] x86/Hyper-V: Not use hv apic driver when Secure AVIC is available
Quoted 7 lines · Michael Kelley
From: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 4 lines
When Secure AVIC is available, AMD x2apic Secure AVIC driver should be selected and return directly in the
hv_apic_init().
Quoted 8 lines
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.
Thanks for the reminder. Will update in the next version.
Thanks.
RFC PATCH v3 2/4 Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
In reply to Tianyu LanFrom: Tianyu Lan <[email protected]>
When Secure AVIC is enabled, VMBus driver should call x2apic Secure AVIC interface to allow Hyper-V to inject VMBus message interrupt.
---
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(+)
arch/x86/hyperv/hv_apic.c +5 -0
@@ -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;
drivers/hv/hv.c +2 -0
@@ -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;
drivers/hv/hv_common.c +5 -0
@@ -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 */
include/asm-generic/mshyperv.h +1 -0
@@ -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);
Signature · 1 line
2.25.1
kernel test robot
build botRe: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
kernel test robot noticed the following build errors:
Hi Tianyu,
[This is a private test report for your RFC patch.] kernel test robot noticed the following build errors:
[auto build test ERROR on tip/x86/core]
[also build test ERROR on tip/master linus/master v6.16-rc7 next-20250724] [cannot apply to tip/auto-latest]
[If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Tianyu-Lan/x86-Hyper-V-Not-use-hv-apic-driver-when-Secure-AVIC-is-available/20250724-030630 base: tip/x86/core patch link: https://lore.kernel.org/r/20250723190308.5945-3-ltykernel%40gmail.com patch subject: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V config: x86_64-buildonly-randconfig-001-20250724 (https://download.01.org/0day-ci/archive/20250724/[email protected]/config) compiler: gcc-12 (Debian 12.2.0-14+deb12u1) 12.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250724/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
arch/x86/hyperv/hv_apic.c: In function 'hv_enable_coco_interrupt':
>> arch/x86/hyperv/hv_apic.c:58:9: error: implicit declaration of function 'apic_update_vector'; did you mean 'lapic_update_tsc_freq'? [-Werror=implicit-function-declaration]
58 | apic_update_vector(cpu, vector, set);
| ^~~~~~~~~~~~~~~~~~
| lapic_update_tsc_freq
arch/x86/hyperv/hv_apic.c: In function 'hv_apic_init':
arch/x86/hyperv/hv_apic.c:301:28: error: 'CC_ATTR_SNP_SECURE_AVIC' undeclared (first use in this function); did you mean 'CC_ATTR_GUEST_SNP_SECURE_TSC'?
301 | if (cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
| ^~~~~~~~~~~~~~~~~~~~~~~
| CC_ATTR_GUEST_SNP_SECURE_TSC arch/x86/hyperv/hv_apic.c:301:28: note: each undeclared identifier is reported only once for each function it appears in
cc1: some warnings being treated as errors
vim +58 arch/x86/hyperv/hv_apic.c
55
56 void hv_enable_coco_interrupt(unsigned int cpu, unsigned int vector, bool set)
57 {
> 58 apic_update_vector(cpu, vector, set);
59 }
60 Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
RE: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
In reply to Tianyu LanFrom: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 38 lines
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 <[email protected]>---
Change since v3
- Addhv_enable_coco_interrupt()as wrapper ofapic_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(+)arch/x86/hyperv/hv_apic.c +5
-0@@ -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;drivers/hv/hv.c +0
-0
drivers/hv/hv.c line 23
Quoted 4 lines
drivers/hv/hv.c +1
-0@@ -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! :-)
drivers/hv/hv.c void hv_synic_enable_regs(unsigned int cpu) · line 314
Quoted 8 lines
drivers/hv/hv.c +1
-0#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.
Quoted 34 lines
drivers/hv/hv.c +0
-0shared_sint.vector = vmbus_interrupt; shared_sint.masked = false;drivers/hv/hv_common.c +5
-0@@ -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 */ include/asm-generic/mshyperv.h +1
-1@@ -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
Re: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic interrupt injected from Hyper-V
Quoted 49 lines · Michael Kelley
From: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 38 lines
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 <[email protected]>---
Change since v3
- Addhv_enable_coco_interrupt()as wrapper ofapic_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(+)arch/x86/hyperv/hv_apic.c +5
-0@@ -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;drivers/hv/hv.c +0
-0drivers/hv/hv.c line 23
Quoted 4 lines
drivers/hv/hv.c +1
-0@@ -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.
Quoted 2 lines
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.
Quoted 4 lines
Quoted 4 lines
drivers/hv/hv.c +0
-0#include <linux/set_memory.h> #include "hyperv_vmbus.h"
Quoted 12 lines
drivers/hv/hv.c void hv_synic_enable_regs(unsigned int cpu) · line 314
Quoted 5 lines
drivers/hv/hv.c +1
-0@@ -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 disablingvmbus_interruptcauses a problem, I'm curious about the details.
Yes, that makes sense and will add it.
Quoted 36 lines
Quoted 35 lines
drivers/hv/hv.c +0
-0shared_sint.vector = vmbus_interrupt; shared_sint.masked = false;drivers/hv/hv_common.c +5
-0@@ -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 */ include/asm-generic/mshyperv.h +1
-1@@ -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
Signature · 2 lines
Thanks Tianyu Lan
RFC PATCH v3 3/4 x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
In reply to Tianyu LanFrom: Tianyu Lan <[email protected]>
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.
--- arch/x86/kernel/cpu/mshyperv.c | 2 ++ 1 file changed, 2 insertions(+)
arch/x86/kernel/cpu/mshyperv.c +2 -0
@@ -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;
Signature · 1 line
2.25.1
RE: [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
From: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 1 line
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.
Quoted 25 lines
Hyper-V doesn't support auto-eoi with Secure AVIC. So set the
HV_DEPRECATING_AEOI_RECOMMENDEDflag
to force writing the EIO register after handling an interrupt.Signed-off-by Tianyu Lan <[email protected]>--- arch/x86/kernel/cpu/mshyperv.c | 2 ++ 1 file changed, 2 insertions(+)arch/x86/kernel/cpu/mshyperv.c +2
-1@@ -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
Re: [RFC PATCH V3 3/4] x86/Hyper-V: Don't use auto-eoi when Secure AVIC is available
Quoted 29 lines · Michael Kelley
From: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 1 line
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.Quoted 20 lines
Hyper-V doesn't support auto-eoi with Secure AVIC. So set the
HV_DEPRECATING_AEOI_RECOMMENDEDflag
to force writing the EIO register after handling an interrupt.Signed-off-by Tianyu Lan <[email protected]>--- arch/x86/kernel/cpu/mshyperv.c | 2 ++ 1 file changed, 2 insertions(+)arch/x86/kernel/cpu/mshyperv.c +2
-0@@ -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 ;
Quoted 6 lines
Quoted 5 lines
arch/x86/kernel/cpu/mshyperv.c +0
-1if (ms_hyperv.hints &HV_X64_HYPERV_NESTED ) { hv_nested = true; --2.25.1
Hi Michael:
Thanks for your review. Will update.
Signature · 2 lines
Thanks Tianyu Lan
RFC PATCH v3 4/4 x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts
In reply to Tianyu LanFrom: Tianyu Lan <[email protected]>
When Secure AVIC is enabled, call Secure AVIC function to allow Hyper-V to inject STIMER0 interrupt.
--- arch/x86/hyperv/hv_init.c | 7 +++++++ 1 file changed, 7 insertions(+)
arch/x86/hyperv/hv_init.c +7 -0
@@ -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]) {
Signature · 1 line
2.25.1
RE: [RFC PATCH V3 4/4] x86/hyperv: Allow Hyper-V to inject STIMER0 interrupts
From: Tianyu Lan <[email protected]> Sent: Wednesday, July 23, 2025 12:03 PM
Quoted 35 lines
When Secure AVIC is enabled, call Secure AVIC function to allow Hyper-V to inject STIMER0 interrupt.
Signed-off-by Tianyu Lan <[email protected]>--- arch/x86/hyperv/hv_init.c | 7 +++++++ 1 file changed, 7 insertions(+)arch/x86/hyperv/hv_init.c +7
-1@@ -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]) { --
Quoted 2 lines
2.25.1