[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20191216001922.23008-2-boqun.feng@gmail.com>
Date: Mon, 16 Dec 2019 08:19:17 +0800
From: Boqun Feng <boqun.feng@...il.com>
To: linux-hyperv@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org
Cc: Michael Kelley <mikelley@...rosoft.com>,
Vincenzo Frascino <vincenzo.frascino@....com>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Thomas Gleixner <tglx@...utronix.de>,
"K. Y. Srinivasan" <kys@...rosoft.com>,
Haiyang Zhang <haiyangz@...rosoft.com>,
Stephen Hemminger <sthemmin@...rosoft.com>,
Sasha Levin <sashal@...nel.org>,
xen-devel@...ts.xenproject.org,
Stefano Stabellini <sstabellini@...nel.org>,
Boqun Feng <boqun.feng@...il.com>
Subject: [RFC 1/6] arm64: hyperv: Allow hv_get_raw_timer() definition to be overridden
In order to support vDSO, hv_read_tsc_page() should be able to be called
from userspace if tsc page mapped. As a result, hv_get_raw_timer(),
called by hv_read_tsc_page() requires to be called by both kernel and
vDSO. Currently, it's defined as arch_timer_read_counter(), which is a
function pointer initialized (using a kernel address) by the arch timer
driver, therefore not usable in vDSO.
Fix this by allowing a previous definition to override the default one,
so that in vDSO code, we can define it as a function callable in
userspace.
Signed-off-by: Boqun Feng (Microsoft) <boqun.feng@...il.com>
---
arch/arm64/include/asm/mshyperv.h | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/include/asm/mshyperv.h b/arch/arm64/include/asm/mshyperv.h
index a8468a611912..9cc4aeddf2d0 100644
--- a/arch/arm64/include/asm/mshyperv.h
+++ b/arch/arm64/include/asm/mshyperv.h
@@ -97,8 +97,15 @@ extern void hv_get_vpreg_128(u32 reg, struct hv_get_vp_register_output *result);
#define hv_disable_stimer0_percpu_irq(irq) disable_percpu_irq(irq)
#endif
-/* ARM64 specific code to read the hardware clock */
+/*
+ * ARM64 specific code to read the hardware clock.
+ *
+ * This could be used in both kernel space and userspace (vDSO), so make it
+ * possible for a previous definition to override the default one.
+ */
+#ifndef hv_get_raw_timer
#define hv_get_raw_timer() arch_timer_read_counter()
+#endif
#include <asm-generic/mshyperv.h>
--
2.24.0
Powered by blists - more mailing lists