forked from luck/tmp_suning_uos_patched
4979e86141
The system register CNTVCT_EL0 can be used to retrieve the counter from user space. Add rdtsc() for Arm64. Signed-off-by: Leo Yan <leo.yan@linaro.org> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Gustavo A. R. Silva <gustavoars@kernel.org> Cc: Ian Rogers <irogers@google.com> Cc: Jiri Olsa <jolsa@redhat.com> Cc: John Garry <john.garry@huawei.com> Cc: Kemeng Shi <shikemeng@huawei.com> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Nick Gasson <nick.gasson@arm.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Remi Bernon <rbernon@codeweavers.com> Cc: Stephane Eranian <eranian@google.com> Cc: Steve Maclean <steve.maclean@microsoft.com> Cc: Will Deacon <will@kernel.org> Cc: Zou Wei <zou_wei@huawei.com> Cc: linux-arm-kernel@lists.infradead.org Link: http://lore.kernel.org/lkml/20200914115311.2201-3-leo.yan@linaro.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
22 lines
498 B
C
22 lines
498 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include "../../../util/tsc.h"
|
|
|
|
u64 rdtsc(void)
|
|
{
|
|
u64 val;
|
|
|
|
/*
|
|
* According to ARM DDI 0487F.c, from Armv8.0 to Armv8.5 inclusive, the
|
|
* system counter is at least 56 bits wide; from Armv8.6, the counter
|
|
* must be 64 bits wide. So the system counter could be less than 64
|
|
* bits wide and it is attributed with the flag 'cap_user_time_short'
|
|
* is true.
|
|
*/
|
|
asm volatile("mrs %0, cntvct_el0" : "=r" (val));
|
|
|
|
return val;
|
|
}
|