* [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; 14+ 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] 14+ 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 9:43 ` kernel test robot 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, 2 replies; 14+ 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] 14+ 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 9:43 ` kernel test robot 2025-07-24 23:33 ` Michael Kelley 1 sibling, 0 replies; 14+ messages in thread From: kernel test robot @ 2025-07-24 9:43 UTC (permalink / raw) To: Tianyu Lan; +Cc: oe-kbuild-all 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/202507241708.AeqN6zwQ-lkp@intel.com/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/202507241708.AeqN6zwQ-lkp@intel.com/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 <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202507241708.AeqN6zwQ-lkp@intel.com/ 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)) -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 14+ 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 9:43 ` kernel test robot @ 2025-07-24 23:33 ` Michael Kelley 2025-07-25 20:00 ` Tianyu Lan 1 sibling, 1 reply; 14+ 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] 14+ 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; 14+ 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] 14+ 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 10:57 ` kernel test robot 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, 2 replies; 14+ 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] 14+ 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 10:57 ` kernel test robot 2025-07-24 23:34 ` Michael Kelley 1 sibling, 0 replies; 14+ messages in thread From: kernel test robot @ 2025-07-24 10:57 UTC (permalink / raw) To: Tianyu Lan; +Cc: oe-kbuild-all 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/202507241811.sZa8qahb-lkp@intel.com/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/202507241811.sZa8qahb-lkp@intel.com/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 <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202507241811.sZa8qahb-lkp@intel.com/ 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 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki ^ permalink raw reply [flat|nested] 14+ 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 10:57 ` kernel test robot @ 2025-07-24 23:34 ` Michael Kelley 2025-07-25 20:06 ` Tianyu Lan 1 sibling, 1 reply; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ 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; 14+ 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] 14+ messages in thread
end of thread, other threads:[~2025-07-25 20:07 UTC | newest] Thread overview: 14+ 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 9:43 ` kernel test robot 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 10:57 ` kernel test robot 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 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.