RE: [PATCH 1/4] drivers/clocksource/hyper-v: Introduce a pointer to TSC page
From: Michael Kelley (LINUX)
Date: Wed Nov 02 2022 - 14:56:49 EST
From: Stanislav Kinsburskii <skinsburskii@xxxxxxxxxxxxxxxxxxx> Sent: Tuesday, November 1, 2022 10:31 AM
>
> Will be used later keep the address of the remapped page for the root
> partition.
s/later keep/later to keep/
I'd like to see a more robust commit message, and not a partial
sentence that is a continuation of the commit title. Something along the
lines of:
When Linux is running in the root partition of the Microsoft Hypervisor,
the memory for the TSC page is provided by the hypervisor, so the TSC
page address can't be the address of a Linux global variable.
Introduce a global variable to contain the TSC page address. For a guest VM,
it defaults to the address of the Linux global variable. If running in the root
partition, a later patch overrides to be the address of the page provided by
the hypervisor.
>
> Signed-off-by: Stanislav Kinsburskiy <stanislav.kinsburskiy@xxxxxxxxx>
> CC: "K. Y. Srinivasan" <kys@xxxxxxxxxxxxx>
> CC: Haiyang Zhang <haiyangz@xxxxxxxxxxxxx>
> CC: Wei Liu <wei.liu@xxxxxxxxxx>
> CC: Dexuan Cui <decui@xxxxxxxxxxxxx>
> CC: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
> CC: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
> CC: linux-hyperv@xxxxxxxxxxxxxxx
> CC: linux-kernel@xxxxxxxxxxxxxxx
> ---
> drivers/clocksource/hyperv_timer.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c
> index 11332c82d1af..c4dbf40a3d3e 100644
> --- a/drivers/clocksource/hyperv_timer.c
> +++ b/drivers/clocksource/hyperv_timer.c
> @@ -366,9 +366,11 @@ static union {
> u8 reserved[PAGE_SIZE];
> } tsc_pg __aligned(PAGE_SIZE);
>
> +static struct ms_hyperv_tsc_page *tsc_page = &tsc_pg.page;
> +
> struct ms_hyperv_tsc_page *hv_get_tsc_page(void)
> {
> - return &tsc_pg.page;
> + return tsc_page;
> }
> EXPORT_SYMBOL_GPL(hv_get_tsc_page);
>
> @@ -406,7 +408,7 @@ static void suspend_hv_clock_tsc(struct clocksource *arg)
>
> static void resume_hv_clock_tsc(struct clocksource *arg)
> {
> - phys_addr_t phys_addr = virt_to_phys(&tsc_pg);
> + phys_addr_t phys_addr = virt_to_phys(tsc_page);
> union hv_reference_tsc_msr tsc_msr;
>
> /* Re-enable the TSC page */
>