From: Boqun Feng <boqun.feng@gmail.com>
To: linux-hyperv@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: Michael Kelley <mikelley@microsoft.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Thomas Gleixner <tglx@linutronix.de>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
Sasha Levin <sashal@kernel.org>,
xen-devel@lists.xenproject.org,
Stefano Stabellini <sstabellini@kernel.org>,
Boqun Feng <boqun.feng@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Mark Rutland <mark.rutland@arm.com>,
Marc Zyngier <maz@kernel.org>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Allison Randal <allison@lohutok.net>,
Enrico Weigelt <info@metux.net>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Huacai Chen <chenhc@lemote.com>
Subject: [RFC 3/6] arm/arm64: clocksource: Introduce vclock_mode
Date: Mon, 16 Dec 2019 08:19:19 +0800 [thread overview]
Message-ID: <20191216001922.23008-4-boqun.feng@gmail.com> (raw)
In-Reply-To: <20191216001922.23008-1-boqun.feng@gmail.com>
Similar to x86, use a vclock_mode in arch_clocksource_data to differ
clocksoures use different read function in vDSO.
No functional changes, only preparation for support vDSO in ARM64 on
Hyper-V.
Note: the changes for arm are only because arm and arm64 share the same
code in the arch timer driver and require arch_clocksource_data having
the same field.
Signed-off-by: Boqun Feng (Microsoft) <boqun.feng@gmail.com>
---
arch/arm/include/asm/clocksource.h | 6 +++++-
arch/arm/kernel/vdso.c | 1 -
arch/arm64/include/asm/clocksource.h | 6 +++++-
arch/arm64/include/asm/mshyperv.h | 2 +-
arch/arm64/include/asm/vdso/compat_gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/vsyscall.h | 4 +---
drivers/clocksource/arm_arch_timer.c | 8 ++++----
8 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
index 0b350a7e26f3..017c5ab6e587 100644
--- a/arch/arm/include/asm/clocksource.h
+++ b/arch/arm/include/asm/clocksource.h
@@ -1,8 +1,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
index c89ac1b9d28b..09e46ec420fe 100644
--- a/arch/arm/kernel/vdso.c
+++ b/arch/arm/kernel/vdso.c
@@ -263,4 +263,3 @@ void arm_install_vdso(struct mm_struct *mm, unsigned long addr)
if (!IS_ERR(vma))
mm->context.vdso = addr;
}
-
diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
index 0ece64a26c8c..fbe80057468c 100644
--- a/arch/arm64/include/asm/clocksource.h
+++ b/arch/arm64/include/asm/clocksource.h
@@ -2,8 +2,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h
index 9cc4aeddf2d0..0afb00e3501d 100644
--- a/arch/arm64/include/asm/mshyperv.h
+++ b/arch/arm64/include/asm/mshyperv.h
@@ -90,7 +90,7 @@ extern void hv_get_vpreg_128(u32 reg, struct hv_get_vp_register_output *result);
#define hv_set_reference_tsc(val) \
hv_set_vpreg(HV_REGISTER_REFERENCE_TSC, val)
#define hv_set_clocksource_vdso(val) \
- ((val).archdata.vdso_direct = false)
+ ((val).archdata.vclock_mode = VCLOCK_NONE)
#if IS_ENABLED(CONFIG_HYPERV)
#define hv_enable_stimer0_percpu_irq(irq) enable_percpu_irq(irq, 0)
diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index c50ee1b7d5cd..630d04c3c92e 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#include <asm/vdso/compat_barrier.h>
@@ -117,10 +118,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index b08f476b72b4..e6e3fe0488c7 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#define __VDSO_USE_SYSCALL ULLONG_MAX
@@ -71,10 +72,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/vsyscall.h b/arch/arm64/include/asm/vdso/vsyscall.h
index 0c20a7c1bee5..07f78b0da498 100644
--- a/arch/arm64/include/asm/vdso/vsyscall.h
+++ b/arch/arm64/include/asm/vdso/vsyscall.h
@@ -24,9 +24,7 @@ struct vdso_data *__arm64_get_k_vdso_data(void)
static __always_inline
int __arm64_get_clock_mode(struct timekeeper *tk)
{
- u32 use_syscall = !tk->tkr_mono.clock->archdata.vdso_direct;
-
- return use_syscall;
+ return tk->tkr_mono.clock->archdata.vclock_mode;
}
#define __arch_get_clock_mode __arm64_get_clock_mode
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 9a5464c625b4..9b8d4d00b53b 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI;
static bool arch_timer_c3stop;
static bool arch_timer_mem_use_virtual;
static bool arch_counter_suspend_stop;
-static bool vdso_default = true;
+static int vdso_default = VCLOCK_CNTVCT;
static cpumask_t evtstrm_available = CPU_MASK_NONE;
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
@@ -560,8 +560,8 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
* change both the default value and the vdso itself.
*/
if (wa->read_cntvct_el0) {
- clocksource_counter.archdata.vdso_direct = false;
- vdso_default = false;
+ clocksource_counter.archdata.vclock_mode = VCLOCK_NONE;
+ vdso_default = VCLOCK_NONE;
}
}
@@ -979,7 +979,7 @@ static void __init arch_counter_register(unsigned type)
}
arch_timer_read_counter = rd;
- clocksource_counter.archdata.vdso_direct = vdso_default;
+ clocksource_counter.archdata.vclock_mode = vdso_default;
} else {
arch_timer_read_counter = arch_counter_get_cntvct_mem;
}
--
2.24.0
WARNING: multiple messages have this Message-ID (diff)
From: Boqun Feng <boqun.feng@gmail.com>
To: linux-hyperv@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: Sasha Levin <sashal@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
Enrico Weigelt <info@metux.net>,
Catalin Marinas <catalin.marinas@arm.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Russell King <linux@armlinux.org.uk>,
Michael Kelley <mikelley@microsoft.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Marc Zyngier <maz@kernel.org>, Huacai Chen <chenhc@lemote.com>,
xen-devel@lists.xenproject.org,
Thomas Gleixner <tglx@linutronix.de>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Will Deacon <will@kernel.org>, Boqun Feng <boqun.feng@gmail.com>,
Allison Randal <allison@lohutok.net>
Subject: [Xen-devel] [RFC 3/6] arm/arm64: clocksource: Introduce vclock_mode
Date: Mon, 16 Dec 2019 08:19:19 +0800 [thread overview]
Message-ID: <20191216001922.23008-4-boqun.feng@gmail.com> (raw)
In-Reply-To: <20191216001922.23008-1-boqun.feng@gmail.com>
Similar to x86, use a vclock_mode in arch_clocksource_data to differ
clocksoures use different read function in vDSO.
No functional changes, only preparation for support vDSO in ARM64 on
Hyper-V.
Note: the changes for arm are only because arm and arm64 share the same
code in the arch timer driver and require arch_clocksource_data having
the same field.
Signed-off-by: Boqun Feng (Microsoft) <boqun.feng@gmail.com>
---
arch/arm/include/asm/clocksource.h | 6 +++++-
arch/arm/kernel/vdso.c | 1 -
arch/arm64/include/asm/clocksource.h | 6 +++++-
arch/arm64/include/asm/mshyperv.h | 2 +-
arch/arm64/include/asm/vdso/compat_gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/vsyscall.h | 4 +---
drivers/clocksource/arm_arch_timer.c | 8 ++++----
8 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
index 0b350a7e26f3..017c5ab6e587 100644
--- a/arch/arm/include/asm/clocksource.h
+++ b/arch/arm/include/asm/clocksource.h
@@ -1,8 +1,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
index c89ac1b9d28b..09e46ec420fe 100644
--- a/arch/arm/kernel/vdso.c
+++ b/arch/arm/kernel/vdso.c
@@ -263,4 +263,3 @@ void arm_install_vdso(struct mm_struct *mm, unsigned long addr)
if (!IS_ERR(vma))
mm->context.vdso = addr;
}
-
diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
index 0ece64a26c8c..fbe80057468c 100644
--- a/arch/arm64/include/asm/clocksource.h
+++ b/arch/arm64/include/asm/clocksource.h
@@ -2,8 +2,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h
index 9cc4aeddf2d0..0afb00e3501d 100644
--- a/arch/arm64/include/asm/mshyperv.h
+++ b/arch/arm64/include/asm/mshyperv.h
@@ -90,7 +90,7 @@ extern void hv_get_vpreg_128(u32 reg, struct hv_get_vp_register_output *result);
#define hv_set_reference_tsc(val) \
hv_set_vpreg(HV_REGISTER_REFERENCE_TSC, val)
#define hv_set_clocksource_vdso(val) \
- ((val).archdata.vdso_direct = false)
+ ((val).archdata.vclock_mode = VCLOCK_NONE)
#if IS_ENABLED(CONFIG_HYPERV)
#define hv_enable_stimer0_percpu_irq(irq) enable_percpu_irq(irq, 0)
diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index c50ee1b7d5cd..630d04c3c92e 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#include <asm/vdso/compat_barrier.h>
@@ -117,10 +118,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index b08f476b72b4..e6e3fe0488c7 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#define __VDSO_USE_SYSCALL ULLONG_MAX
@@ -71,10 +72,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/vsyscall.h b/arch/arm64/include/asm/vdso/vsyscall.h
index 0c20a7c1bee5..07f78b0da498 100644
--- a/arch/arm64/include/asm/vdso/vsyscall.h
+++ b/arch/arm64/include/asm/vdso/vsyscall.h
@@ -24,9 +24,7 @@ struct vdso_data *__arm64_get_k_vdso_data(void)
static __always_inline
int __arm64_get_clock_mode(struct timekeeper *tk)
{
- u32 use_syscall = !tk->tkr_mono.clock->archdata.vdso_direct;
-
- return use_syscall;
+ return tk->tkr_mono.clock->archdata.vclock_mode;
}
#define __arch_get_clock_mode __arm64_get_clock_mode
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 9a5464c625b4..9b8d4d00b53b 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI;
static bool arch_timer_c3stop;
static bool arch_timer_mem_use_virtual;
static bool arch_counter_suspend_stop;
-static bool vdso_default = true;
+static int vdso_default = VCLOCK_CNTVCT;
static cpumask_t evtstrm_available = CPU_MASK_NONE;
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
@@ -560,8 +560,8 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
* change both the default value and the vdso itself.
*/
if (wa->read_cntvct_el0) {
- clocksource_counter.archdata.vdso_direct = false;
- vdso_default = false;
+ clocksource_counter.archdata.vclock_mode = VCLOCK_NONE;
+ vdso_default = VCLOCK_NONE;
}
}
@@ -979,7 +979,7 @@ static void __init arch_counter_register(unsigned type)
}
arch_timer_read_counter = rd;
- clocksource_counter.archdata.vdso_direct = vdso_default;
+ clocksource_counter.archdata.vclock_mode = vdso_default;
} else {
arch_timer_read_counter = arch_counter_get_cntvct_mem;
}
--
2.24.0
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel
WARNING: multiple messages have this Message-ID (diff)
From: Boqun Feng <boqun.feng@gmail.com>
To: linux-hyperv@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org
Cc: Sasha Levin <sashal@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Vincenzo Frascino <vincenzo.frascino@arm.com>,
Stephen Hemminger <sthemmin@microsoft.com>,
Enrico Weigelt <info@metux.net>,
Catalin Marinas <catalin.marinas@arm.com>,
Haiyang Zhang <haiyangz@microsoft.com>,
Daniel Lezcano <daniel.lezcano@linaro.org>,
Russell King <linux@armlinux.org.uk>,
Michael Kelley <mikelley@microsoft.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Geert Uytterhoeven <geert@linux-m68k.org>,
Marc Zyngier <maz@kernel.org>, Huacai Chen <chenhc@lemote.com>,
xen-devel@lists.xenproject.org,
Thomas Gleixner <tglx@linutronix.de>,
"K. Y. Srinivasan" <kys@microsoft.com>,
Will Deacon <will@kernel.org>, Boqun Feng <boqun.feng@gmail.com>,
Allison Randal <allison@lohutok.net>
Subject: [RFC 3/6] arm/arm64: clocksource: Introduce vclock_mode
Date: Mon, 16 Dec 2019 08:19:19 +0800 [thread overview]
Message-ID: <20191216001922.23008-4-boqun.feng@gmail.com> (raw)
In-Reply-To: <20191216001922.23008-1-boqun.feng@gmail.com>
Similar to x86, use a vclock_mode in arch_clocksource_data to differ
clocksoures use different read function in vDSO.
No functional changes, only preparation for support vDSO in ARM64 on
Hyper-V.
Note: the changes for arm are only because arm and arm64 share the same
code in the arch timer driver and require arch_clocksource_data having
the same field.
Signed-off-by: Boqun Feng (Microsoft) <boqun.feng@gmail.com>
---
arch/arm/include/asm/clocksource.h | 6 +++++-
arch/arm/kernel/vdso.c | 1 -
arch/arm64/include/asm/clocksource.h | 6 +++++-
arch/arm64/include/asm/mshyperv.h | 2 +-
arch/arm64/include/asm/vdso/compat_gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/gettimeofday.h | 5 +++--
arch/arm64/include/asm/vdso/vsyscall.h | 4 +---
drivers/clocksource/arm_arch_timer.c | 8 ++++----
8 files changed, 22 insertions(+), 15 deletions(-)
diff --git a/arch/arm/include/asm/clocksource.h b/arch/arm/include/asm/clocksource.h
index 0b350a7e26f3..017c5ab6e587 100644
--- a/arch/arm/include/asm/clocksource.h
+++ b/arch/arm/include/asm/clocksource.h
@@ -1,8 +1,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm/kernel/vdso.c b/arch/arm/kernel/vdso.c
index c89ac1b9d28b..09e46ec420fe 100644
--- a/arch/arm/kernel/vdso.c
+++ b/arch/arm/kernel/vdso.c
@@ -263,4 +263,3 @@ void arm_install_vdso(struct mm_struct *mm, unsigned long addr)
if (!IS_ERR(vma))
mm->context.vdso = addr;
}
-
diff --git a/arch/arm64/include/asm/clocksource.h b/arch/arm64/include/asm/clocksource.h
index 0ece64a26c8c..fbe80057468c 100644
--- a/arch/arm64/include/asm/clocksource.h
+++ b/arch/arm64/include/asm/clocksource.h
@@ -2,8 +2,12 @@
#ifndef _ASM_CLOCKSOURCE_H
#define _ASM_CLOCKSOURCE_H
+#define VCLOCK_NONE 0 /* No vDSO clock available. */
+#define VCLOCK_CNTVCT 1 /* vDSO should use cntvcnt */
+#define VCLOCK_MAX 1
+
struct arch_clocksource_data {
- bool vdso_direct; /* Usable for direct VDSO access? */
+ int vclock_mode;
};
#endif
diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h
index 9cc4aeddf2d0..0afb00e3501d 100644
--- a/arch/arm64/include/asm/mshyperv.h
+++ b/arch/arm64/include/asm/mshyperv.h
@@ -90,7 +90,7 @@ extern void hv_get_vpreg_128(u32 reg, struct hv_get_vp_register_output *result);
#define hv_set_reference_tsc(val) \
hv_set_vpreg(HV_REGISTER_REFERENCE_TSC, val)
#define hv_set_clocksource_vdso(val) \
- ((val).archdata.vdso_direct = false)
+ ((val).archdata.vclock_mode = VCLOCK_NONE)
#if IS_ENABLED(CONFIG_HYPERV)
#define hv_enable_stimer0_percpu_irq(irq) enable_percpu_irq(irq, 0)
diff --git a/arch/arm64/include/asm/vdso/compat_gettimeofday.h b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
index c50ee1b7d5cd..630d04c3c92e 100644
--- a/arch/arm64/include/asm/vdso/compat_gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/compat_gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#include <asm/vdso/compat_barrier.h>
@@ -117,10 +118,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/gettimeofday.h b/arch/arm64/include/asm/vdso/gettimeofday.h
index b08f476b72b4..e6e3fe0488c7 100644
--- a/arch/arm64/include/asm/vdso/gettimeofday.h
+++ b/arch/arm64/include/asm/vdso/gettimeofday.h
@@ -8,6 +8,7 @@
#ifndef __ASSEMBLY__
#include <asm/unistd.h>
+#include <asm/clocksource.h>
#include <uapi/linux/time.h>
#define __VDSO_USE_SYSCALL ULLONG_MAX
@@ -71,10 +72,10 @@ static __always_inline u64 __arch_get_hw_counter(s32 clock_mode)
u64 res;
/*
- * clock_mode == 0 implies that vDSO are enabled otherwise
+ * clock_mode == VCLOCK_NONE implies that vDSO are disabled so
* fallback on syscall.
*/
- if (clock_mode)
+ if (clock_mode == VCLOCK_NONE)
return __VDSO_USE_SYSCALL;
/*
diff --git a/arch/arm64/include/asm/vdso/vsyscall.h b/arch/arm64/include/asm/vdso/vsyscall.h
index 0c20a7c1bee5..07f78b0da498 100644
--- a/arch/arm64/include/asm/vdso/vsyscall.h
+++ b/arch/arm64/include/asm/vdso/vsyscall.h
@@ -24,9 +24,7 @@ struct vdso_data *__arm64_get_k_vdso_data(void)
static __always_inline
int __arm64_get_clock_mode(struct timekeeper *tk)
{
- u32 use_syscall = !tk->tkr_mono.clock->archdata.vdso_direct;
-
- return use_syscall;
+ return tk->tkr_mono.clock->archdata.vclock_mode;
}
#define __arch_get_clock_mode __arm64_get_clock_mode
diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 9a5464c625b4..9b8d4d00b53b 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -69,7 +69,7 @@ static enum arch_timer_ppi_nr arch_timer_uses_ppi = ARCH_TIMER_VIRT_PPI;
static bool arch_timer_c3stop;
static bool arch_timer_mem_use_virtual;
static bool arch_counter_suspend_stop;
-static bool vdso_default = true;
+static int vdso_default = VCLOCK_CNTVCT;
static cpumask_t evtstrm_available = CPU_MASK_NONE;
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
@@ -560,8 +560,8 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
* change both the default value and the vdso itself.
*/
if (wa->read_cntvct_el0) {
- clocksource_counter.archdata.vdso_direct = false;
- vdso_default = false;
+ clocksource_counter.archdata.vclock_mode = VCLOCK_NONE;
+ vdso_default = VCLOCK_NONE;
}
}
@@ -979,7 +979,7 @@ static void __init arch_counter_register(unsigned type)
}
arch_timer_read_counter = rd;
- clocksource_counter.archdata.vdso_direct = vdso_default;
+ clocksource_counter.archdata.vclock_mode = vdso_default;
} else {
arch_timer_read_counter = arch_counter_get_cntvct_mem;
}
--
2.24.0
_______________________________________________
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:[~2019-12-16 0:19 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-16 0:19 [RFC 0/6] vDSO support for Hyper-V guest on ARM64 Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` [RFC 1/6] arm64: hyperv: Allow hv_get_raw_timer() definition to be overridden Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` [RFC 2/6] arm64: vdso: Add support for multiple vDSO data pages Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` Boqun Feng [this message]
2019-12-16 0:19 ` [RFC 3/6] arm/arm64: clocksource: Introduce vclock_mode Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` [RFC 4/6] arm64: vdso: hyperv: Map tsc page into vDSO if enabled Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` [RFC 5/6] arm64: hyperv: Enable userspace to read cntvct Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-16 0:19 ` [RFC 6/6] arm64: hyperv: Enable vDSO Boqun Feng
2019-12-16 0:19 ` Boqun Feng
2019-12-16 0:19 ` [Xen-devel] " Boqun Feng
2019-12-17 14:10 ` Vitaly Kuznetsov
2019-12-17 14:10 ` Vitaly Kuznetsov
2019-12-17 14:10 ` [Xen-devel] " Vitaly Kuznetsov
2019-12-18 5:47 ` Boqun Feng
2019-12-18 5:47 ` Boqun Feng
2019-12-18 5:47 ` [Xen-devel] " Boqun Feng
2020-01-23 10:48 ` [RFC 0/6] vDSO support for Hyper-V guest on ARM64 Vincenzo Frascino
2020-01-23 10:48 ` Vincenzo Frascino
2020-01-23 10:48 ` [Xen-devel] " Vincenzo Frascino
2020-01-24 6:32 ` Boqun Feng
2020-01-24 6:32 ` Boqun Feng
2020-01-24 6:32 ` [Xen-devel] " Boqun Feng
2020-01-24 10:24 ` Vincenzo Frascino
2020-01-24 10:24 ` Vincenzo Frascino
2020-01-24 10:24 ` [Xen-devel] " Vincenzo Frascino
2020-01-28 5:58 ` Boqun Feng
2020-01-28 5:58 ` Boqun Feng
2020-01-28 5:58 ` [Xen-devel] " Boqun Feng
2020-01-28 11:48 ` Marc Zyngier
2020-01-28 11:48 ` Marc Zyngier
2020-01-28 11:48 ` [Xen-devel] " Marc Zyngier
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=20191216001922.23008-4-boqun.feng@gmail.com \
--to=boqun.feng@gmail.com \
--cc=allison@lohutok.net \
--cc=catalin.marinas@arm.com \
--cc=chenhc@lemote.com \
--cc=daniel.lezcano@linaro.org \
--cc=geert@linux-m68k.org \
--cc=haiyangz@microsoft.com \
--cc=info@metux.net \
--cc=kys@microsoft.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hyperv@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=mikelley@microsoft.com \
--cc=sashal@kernel.org \
--cc=sstabellini@kernel.org \
--cc=sthemmin@microsoft.com \
--cc=tglx@linutronix.de \
--cc=vincenzo.frascino@arm.com \
--cc=will@kernel.org \
--cc=xen-devel@lists.xenproject.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: link
Be 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.