[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAMvTesCYNs+rEaktH_vjrxDXWgcZnfa8YF3jVcOkPN8YoSyQdw@mail.gmail.com>
Date: Sat, 26 Jul 2025 04:06:48 +0800
From: Tianyu Lan <ltykernel@...il.com>
To: Michael Kelley <mhklinux@...look.com>
Cc: "kys@...rosoft.com" <kys@...rosoft.com>, "haiyangz@...rosoft.com" <haiyangz@...rosoft.com>,
"wei.liu@...nel.org" <wei.liu@...nel.org>, "decui@...rosoft.com" <decui@...rosoft.com>,
"tglx@...utronix.de" <tglx@...utronix.de>, "mingo@...hat.com" <mingo@...hat.com>, "bp@...en8.de" <bp@...en8.de>,
"dave.hansen@...ux.intel.com" <dave.hansen@...ux.intel.com>, "x86@...nel.org" <x86@...nel.org>,
"hpa@...or.com" <hpa@...or.com>, "arnd@...db.de" <arnd@...db.de>,
"Neeraj.Upadhyay@....com" <Neeraj.Upadhyay@....com>, Tianyu Lan <tiala@...rosoft.com>,
"linux-arch@...r.kernel.org" <linux-arch@...r.kernel.org>,
"linux-hyperv@...r.kernel.org" <linux-hyperv@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>
Subject: Re: [RFC PATCH V3 2/4] Drivers: hv: Allow vmbus message synic
interrupt injected from Hyper-V
On Fri, Jul 25, 2025 at 7:34 AM Michael Kelley <mhklinux@...look.com> wrote:
>
> From: Tianyu Lan <ltykernel@...il.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@...rosoft.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
Powered by blists - more mailing lists