From: Michael Kelley <mikelley@microsoft.com> To: Mark Rutland <Mark.Rutland@arm.com> Cc: "will@kernel.org" <will@kernel.org>, "catalin.marinas@arm.com" <catalin.marinas@arm.com>, "lorenzo.pieralisi@arm.com" <lorenzo.pieralisi@arm.com>, "sudeep.holla@arm.com" <sudeep.holla@arm.com>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>, "linux-efi@vger.kernel.org" <linux-efi@vger.kernel.org>, "arnd@arndb.de" <arnd@arndb.de>, "wei.liu@kernel.org" <wei.liu@kernel.org>, "ardb@kernel.org" <ardb@kernel.org>, "daniel.lezcano@linaro.org" <daniel.lezcano@linaro.org>, KY Srinivasan <kys@microsoft.com> Subject: RE: [PATCH v10 3/7] arm64: hyperv: Add Hyper-V clocksource/clockevent support Date: Fri, 14 May 2021 15:35:15 +0000 [thread overview] Message-ID: <MWHPR21MB15932B44EC1E55614B219F5ED7509@MWHPR21MB1593.namprd21.prod.outlook.com> (raw) In-Reply-To: <20210514123711.GB30645@C02TD0UTHF1T.local> From: Mark Rutland <mark.rutland@arm.com> Sent: Friday, May 14, 2021 5:37 AM > > Hi Michael, > > On Wed, May 12, 2021 at 10:37:43AM -0700, Michael Kelley wrote: > > Add architecture specific definitions and functions needed > > by the architecture independent Hyper-V clocksource driver. > > Update the Hyper-V clocksource driver to be initialized > > on ARM64. > > Previously we've said that for a clocksource we must use the architected > counter, since that's necessary for things like the VDSO to work > correctly and efficiently. > > Given that, I'm a bit confused that we're registering a per-cpu > clocksource that is in part based on the architected counter. Likewise, > I don't entirely follow why it's necessary to PV the clock_event_device. > > Are the architected counter and timer reliable without this PV > infrastructure? Why do we need to PV either of those? > > Thanks, > Mark. > For the clocksource, we have a requirement to live migrate VMs between Hyper-V hosts running on hardware that may have different arch counter frequencies (it's not conformant to the ARM v8.6 1 GHz requirement). The Hyper-V virtualization does scaling to handle the frequency difference. And yes, there's a tradeoff with vDSO not working, though we have an out-of-tree vDSO implementation that we can use when necessary. For clockevents, the only timer interrupt that Hyper-V provides in a guest VM is its virtualized "STIMER" interrupt. There's no virtualization of the ARM arch timer in the guest. Michael > > > > Signed-off-by: Michael Kelley <mikelley@microsoft.com> > > Reviewed-by: Sunil Muthuswamy <sunilmut@microsoft.com> > > --- > > arch/arm64/include/asm/mshyperv.h | 12 ++++++++++++ > > drivers/clocksource/hyperv_timer.c | 14 ++++++++++++++ > > 2 files changed, 26 insertions(+) > > > > diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h > > index c448704..b17299c 100644 > > --- a/arch/arm64/include/asm/mshyperv.h > > +++ b/arch/arm64/include/asm/mshyperv.h > > @@ -21,6 +21,7 @@ > > #include <linux/types.h> > > #include <linux/arm-smccc.h> > > #include <asm/hyperv-tlfs.h> > > +#include <clocksource/arm_arch_timer.h> > > > > /* > > * Declare calls to get and set Hyper-V VP register values on ARM64, which > > @@ -41,6 +42,17 @@ static inline u64 hv_get_register(unsigned int reg) > > return hv_get_vpreg(reg); > > } > > > > +/* Define the interrupt ID used by STIMER0 Direct Mode interrupts. This > > + * value can't come from ACPI tables because it is needed before the > > + * Linux ACPI subsystem is initialized. > > + */ > > +#define HYPERV_STIMER0_VECTOR 31 > > + > > +static inline u64 hv_get_raw_timer(void) > > +{ > > + return arch_timer_read_counter(); > > +} > > + > > /* SMCCC hypercall parameters */ > > #define HV_SMCCC_FUNC_NUMBER 1 > > #define HV_FUNC_ID ARM_SMCCC_CALL_VAL( \ > > diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c > > index 977fd05..270ad9c 100644 > > --- a/drivers/clocksource/hyperv_timer.c > > +++ b/drivers/clocksource/hyperv_timer.c > > @@ -569,3 +569,17 @@ void __init hv_init_clocksource(void) > > hv_setup_sched_clock(read_hv_sched_clock_msr); > > } > > EXPORT_SYMBOL_GPL(hv_init_clocksource); > > + > > +/* Initialize everything on ARM64 */ > > +static int __init hyperv_timer_init(struct acpi_table_header *table) > > +{ > > + if (!hv_is_hyperv_initialized()) > > + return -EINVAL; > > + > > + hv_init_clocksource(); > > + if (hv_stimer_alloc(true)) > > + return -EINVAL; > > + > > + return 0; > > +} > > +TIMER_ACPI_DECLARE(hyperv, ACPI_SIG_GTDT, hyperv_timer_init); > > -- > > 1.8.3.1 > >
WARNING: multiple messages have this Message-ID (diff)
From: Michael Kelley <mikelley@microsoft.com> To: Mark Rutland <Mark.Rutland@arm.com> Cc: "will@kernel.org" <will@kernel.org>, "catalin.marinas@arm.com" <catalin.marinas@arm.com>, "lorenzo.pieralisi@arm.com" <lorenzo.pieralisi@arm.com>, "sudeep.holla@arm.com" <sudeep.holla@arm.com>, "linux-arm-kernel@lists.infradead.org" <linux-arm-kernel@lists.infradead.org>, "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>, "linux-hyperv@vger.kernel.org" <linux-hyperv@vger.kernel.org>, "linux-efi@vger.kernel.org" <linux-efi@vger.kernel.org>, "arnd@arndb.de" <arnd@arndb.de>, "wei.liu@kernel.org" <wei.liu@kernel.org>, "ardb@kernel.org" <ardb@kernel.org>, "daniel.lezcano@linaro.org" <daniel.lezcano@linaro.org>, KY Srinivasan <kys@microsoft.com> Subject: RE: [PATCH v10 3/7] arm64: hyperv: Add Hyper-V clocksource/clockevent support Date: Fri, 14 May 2021 15:35:15 +0000 [thread overview] Message-ID: <MWHPR21MB15932B44EC1E55614B219F5ED7509@MWHPR21MB1593.namprd21.prod.outlook.com> (raw) In-Reply-To: <20210514123711.GB30645@C02TD0UTHF1T.local> From: Mark Rutland <mark.rutland@arm.com> Sent: Friday, May 14, 2021 5:37 AM > > Hi Michael, > > On Wed, May 12, 2021 at 10:37:43AM -0700, Michael Kelley wrote: > > Add architecture specific definitions and functions needed > > by the architecture independent Hyper-V clocksource driver. > > Update the Hyper-V clocksource driver to be initialized > > on ARM64. > > Previously we've said that for a clocksource we must use the architected > counter, since that's necessary for things like the VDSO to work > correctly and efficiently. > > Given that, I'm a bit confused that we're registering a per-cpu > clocksource that is in part based on the architected counter. Likewise, > I don't entirely follow why it's necessary to PV the clock_event_device. > > Are the architected counter and timer reliable without this PV > infrastructure? Why do we need to PV either of those? > > Thanks, > Mark. > For the clocksource, we have a requirement to live migrate VMs between Hyper-V hosts running on hardware that may have different arch counter frequencies (it's not conformant to the ARM v8.6 1 GHz requirement). The Hyper-V virtualization does scaling to handle the frequency difference. And yes, there's a tradeoff with vDSO not working, though we have an out-of-tree vDSO implementation that we can use when necessary. For clockevents, the only timer interrupt that Hyper-V provides in a guest VM is its virtualized "STIMER" interrupt. There's no virtualization of the ARM arch timer in the guest. Michael > > > > Signed-off-by: Michael Kelley <mikelley@microsoft.com> > > Reviewed-by: Sunil Muthuswamy <sunilmut@microsoft.com> > > --- > > arch/arm64/include/asm/mshyperv.h | 12 ++++++++++++ > > drivers/clocksource/hyperv_timer.c | 14 ++++++++++++++ > > 2 files changed, 26 insertions(+) > > > > diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h > > index c448704..b17299c 100644 > > --- a/arch/arm64/include/asm/mshyperv.h > > +++ b/arch/arm64/include/asm/mshyperv.h > > @@ -21,6 +21,7 @@ > > #include <linux/types.h> > > #include <linux/arm-smccc.h> > > #include <asm/hyperv-tlfs.h> > > +#include <clocksource/arm_arch_timer.h> > > > > /* > > * Declare calls to get and set Hyper-V VP register values on ARM64, which > > @@ -41,6 +42,17 @@ static inline u64 hv_get_register(unsigned int reg) > > return hv_get_vpreg(reg); > > } > > > > +/* Define the interrupt ID used by STIMER0 Direct Mode interrupts. This > > + * value can't come from ACPI tables because it is needed before the > > + * Linux ACPI subsystem is initialized. > > + */ > > +#define HYPERV_STIMER0_VECTOR 31 > > + > > +static inline u64 hv_get_raw_timer(void) > > +{ > > + return arch_timer_read_counter(); > > +} > > + > > /* SMCCC hypercall parameters */ > > #define HV_SMCCC_FUNC_NUMBER 1 > > #define HV_FUNC_ID ARM_SMCCC_CALL_VAL( \ > > diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c > > index 977fd05..270ad9c 100644 > > --- a/drivers/clocksource/hyperv_timer.c > > +++ b/drivers/clocksource/hyperv_timer.c > > @@ -569,3 +569,17 @@ void __init hv_init_clocksource(void) > > hv_setup_sched_clock(read_hv_sched_clock_msr); > > } > > EXPORT_SYMBOL_GPL(hv_init_clocksource); > > + > > +/* Initialize everything on ARM64 */ > > +static int __init hyperv_timer_init(struct acpi_table_header *table) > > +{ > > + if (!hv_is_hyperv_initialized()) > > + return -EINVAL; > > + > > + hv_init_clocksource(); > > + if (hv_stimer_alloc(true)) > > + return -EINVAL; > > + > > + return 0; > > +} > > +TIMER_ACPI_DECLARE(hyperv, ACPI_SIG_GTDT, hyperv_timer_init); > > -- > > 1.8.3.1 > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-05-14 15:35 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-05-12 17:37 [PATCH v10 0/7] Enable Linux guests on Hyper-V on ARM64 Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 1/7] asm-generic: hyperv: Fix incorrect architecture dependencies Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 2/7] arm64: hyperv: Add Hyper-V hypercall and register access utilities Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-14 12:52 ` Mark Rutland 2021-05-14 12:52 ` Mark Rutland 2021-05-14 15:14 ` Michael Kelley 2021-05-14 15:14 ` Michael Kelley 2021-05-17 11:44 ` Mark Rutland 2021-05-17 11:44 ` Mark Rutland 2021-05-17 16:41 ` Michael Kelley 2021-05-17 16:41 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 3/7] arm64: hyperv: Add Hyper-V clocksource/clockevent support Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-14 12:37 ` Mark Rutland 2021-05-14 12:37 ` Mark Rutland 2021-05-14 15:35 ` Michael Kelley [this message] 2021-05-14 15:35 ` Michael Kelley 2021-05-17 13:08 ` Mark Rutland 2021-05-17 13:08 ` Mark Rutland 2021-05-17 17:27 ` Michael Kelley 2021-05-17 17:27 ` Michael Kelley 2021-05-18 17:00 ` Mark Rutland 2021-05-18 17:00 ` Mark Rutland 2021-06-08 15:36 ` Michael Kelley 2021-06-08 15:36 ` Michael Kelley 2021-06-10 16:45 ` Mark Rutland 2021-06-10 16:45 ` Mark Rutland 2021-06-14 2:42 ` Michael Kelley 2021-06-14 2:42 ` Michael Kelley 2021-06-16 20:17 ` Michael Kelley 2021-06-16 20:17 ` Michael Kelley 2021-06-22 9:54 ` Mark Rutland 2021-06-22 9:54 ` Mark Rutland 2021-06-23 8:56 ` Marc Zyngier 2021-06-23 8:56 ` Marc Zyngier 2021-06-28 2:21 ` Michael Kelley 2021-06-28 2:21 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 4/7] arm64: hyperv: Add kexec and panic handlers Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 5/7] arm64: hyperv: Initialize hypervisor on boot Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-13 15:16 ` Wei Liu 2021-05-13 15:16 ` Wei Liu 2021-05-12 17:37 ` [PATCH v10 6/7] arm64: efi: Export screen_info Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-12 17:37 ` [PATCH v10 7/7] Drivers: hv: Enable Hyper-V code to be built on ARM64 Michael Kelley 2021-05-12 17:37 ` Michael Kelley 2021-05-13 13:17 ` [PATCH v10 0/7] Enable Linux guests on Hyper-V " Sudeep Holla 2021-05-13 13:17 ` Sudeep Holla
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=MWHPR21MB15932B44EC1E55614B219F5ED7509@MWHPR21MB1593.namprd21.prod.outlook.com \ --to=mikelley@microsoft.com \ --cc=Mark.Rutland@arm.com \ --cc=ardb@kernel.org \ --cc=arnd@arndb.de \ --cc=catalin.marinas@arm.com \ --cc=daniel.lezcano@linaro.org \ --cc=kys@microsoft.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-efi@vger.kernel.org \ --cc=linux-hyperv@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=lorenzo.pieralisi@arm.com \ --cc=sudeep.holla@arm.com \ --cc=wei.liu@kernel.org \ --cc=will@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.