Commit 79940ddb authored by Marc Zyngier's avatar Marc Zyngier Committed by Greg Kroah-Hartman

ARM: vdso: Remove dependency with the arch_timer driver internals

[ Upstream commit 1f5b62f0 ]

The VDSO code uses the kernel helper that was originally designed
to abstract the access between 32 and 64bit systems. It worked so
far because this function is declared as 'inline'.

As we're about to revamp that part of the code, the VDSO would
break. Let's fix it by doing what should have been done from
the start, a proper system register access.
Reviewed-by: default avatarMark Rutland <mark.rutland@arm.com>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 146579dd
...@@ -67,6 +67,8 @@ ...@@ -67,6 +67,8 @@
#define BPIALL __ACCESS_CP15(c7, 0, c5, 6) #define BPIALL __ACCESS_CP15(c7, 0, c5, 6)
#define ICIALLU __ACCESS_CP15(c7, 0, c5, 0) #define ICIALLU __ACCESS_CP15(c7, 0, c5, 0)
#define CNTVCT __ACCESS_CP15_64(1, c14)
extern unsigned long cr_alignment; /* defined in entry-armv.S */ extern unsigned long cr_alignment; /* defined in entry-armv.S */
static inline unsigned long get_cr(void) static inline unsigned long get_cr(void)
......
...@@ -18,9 +18,9 @@ ...@@ -18,9 +18,9 @@
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/hrtimer.h> #include <linux/hrtimer.h>
#include <linux/time.h> #include <linux/time.h>
#include <asm/arch_timer.h>
#include <asm/barrier.h> #include <asm/barrier.h>
#include <asm/bug.h> #include <asm/bug.h>
#include <asm/cp15.h>
#include <asm/page.h> #include <asm/page.h>
#include <asm/unistd.h> #include <asm/unistd.h>
#include <asm/vdso_datapage.h> #include <asm/vdso_datapage.h>
...@@ -123,7 +123,8 @@ static notrace u64 get_ns(struct vdso_data *vdata) ...@@ -123,7 +123,8 @@ static notrace u64 get_ns(struct vdso_data *vdata)
u64 cycle_now; u64 cycle_now;
u64 nsec; u64 nsec;
cycle_now = arch_counter_get_cntvct(); isb();
cycle_now = read_sysreg(CNTVCT);
cycle_delta = (cycle_now - vdata->cs_cycle_last) & vdata->cs_mask; cycle_delta = (cycle_now - vdata->cs_cycle_last) & vdata->cs_mask;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment