if (clock_mode == VDSO_CLOCKMODE_NONE)
return 0;
- /*
- * If FEAT_ECV is available, use the self-synchronizing counter.
- * Otherwise the isb is required to prevent that the counter value
- * is speculated.
- */
- asm volatile(
- ALTERNATIVE("isb\n"
- "mrs %0, cntvct_el0",
- "nop\n"
- __mrs_s("%0", SYS_CNTVCTSS_EL0),
- ARM64_HAS_ECV)
- : "=r" (res)
- :
- : "memory");
-
- arch_counter_enforce_ordering(res);
-
- return res;
+ return __arch_counter_get_cntvct();
}
+#if IS_ENABLED(CONFIG_CC_IS_GCC) && IS_ENABLED(CONFIG_PAGE_SIZE_64KB)
+static __always_inline const struct vdso_time_data *__arch_get_vdso_u_time_data(void)
+{
+ const struct vdso_time_data *ret = &vdso_u_time_data;
+
+ /* Work around invalid absolute relocations */
+ OPTIMIZER_HIDE_VAR(ret);
+
+ return ret;
+}
+#define __arch_get_vdso_u_time_data __arch_get_vdso_u_time_data
+#endif /* IS_ENABLED(CONFIG_CC_IS_GCC) && IS_ENABLED(CONFIG_PAGE_SIZE_64KB) */
+
#endif /* !__ASSEMBLY__ */
#endif /* __ASM_VDSO_GETTIMEOFDAY_H */
PROVIDE(__pi___memmove = __pi_memmove);
PROVIDE(__pi___memset = __pi_memset);
- PROVIDE(__pi_id_aa64isar1_override = id_aa64isar1_override);
- PROVIDE(__pi_id_aa64isar2_override = id_aa64isar2_override);
- PROVIDE(__pi_id_aa64mmfr0_override = id_aa64mmfr0_override);
- PROVIDE(__pi_id_aa64mmfr1_override = id_aa64mmfr1_override);
- PROVIDE(__pi_id_aa64mmfr2_override = id_aa64mmfr2_override);
- PROVIDE(__pi_id_aa64pfr0_override = id_aa64pfr0_override);
- PROVIDE(__pi_id_aa64pfr1_override = id_aa64pfr1_override);
- PROVIDE(__pi_id_aa64smfr0_override = id_aa64smfr0_override);
- PROVIDE(__pi_id_aa64zfr0_override = id_aa64zfr0_override);
- PROVIDE(__pi_arm64_sw_feature_override = arm64_sw_feature_override);
- PROVIDE(__pi_arm64_use_ng_mappings = arm64_use_ng_mappings);
- PROVIDE(__pi__ctype = _ctype);
- PROVIDE(__pi_memstart_offset_seed = memstart_offset_seed);
+ PI_EXPORT_SYM(id_aa64isar1_override);
+ PI_EXPORT_SYM(id_aa64isar2_override);
+ PI_EXPORT_SYM(id_aa64mmfr0_override);
+ PI_EXPORT_SYM(id_aa64mmfr1_override);
+ PI_EXPORT_SYM(id_aa64mmfr2_override);
+ PI_EXPORT_SYM(id_aa64pfr0_override);
+ PI_EXPORT_SYM(id_aa64pfr1_override);
+ PI_EXPORT_SYM(id_aa64smfr0_override);
+ PI_EXPORT_SYM(id_aa64zfr0_override);
+ PI_EXPORT_SYM(arm64_sw_feature_override);
+ PI_EXPORT_SYM(arm64_use_ng_mappings);
-#ifdef CONFIG_CAVIUM_ERRATUM_27456
-PI_EXPORT_SYM(cavium_erratum_27456_cpus);
-PI_EXPORT_SYM(is_midr_in_range_list);
-#endif
+ PI_EXPORT_SYM(_ctype);
- PROVIDE(__pi_init_idmap_pg_dir = init_idmap_pg_dir);
- PROVIDE(__pi_init_idmap_pg_end = init_idmap_pg_end);
- PROVIDE(__pi_init_pg_dir = init_pg_dir);
- PROVIDE(__pi_init_pg_end = init_pg_end);
- PROVIDE(__pi_swapper_pg_dir = swapper_pg_dir);
+ PI_EXPORT_SYM(swapper_pg_dir);
- PROVIDE(__pi__text = _text);
- PROVIDE(__pi__stext = _stext);
- PROVIDE(__pi__etext = _etext);
- PROVIDE(__pi___start_rodata = __start_rodata);
- PROVIDE(__pi___inittext_begin = __inittext_begin);
- PROVIDE(__pi___inittext_end = __inittext_end);
- PROVIDE(__pi___initdata_begin = __initdata_begin);
- PROVIDE(__pi___initdata_end = __initdata_end);
- PROVIDE(__pi__data = _data);
- PROVIDE(__pi___bss_start = __bss_start);
- PROVIDE(__pi__end = _end);
+ PI_EXPORT_SYM(_text);
+ PI_EXPORT_SYM(_stext);
+ PI_EXPORT_SYM(_etext);
+ PI_EXPORT_SYM(__start_rodata);
+ PI_EXPORT_SYM(__inittext_begin);
+ PI_EXPORT_SYM(__inittext_end);
+ PI_EXPORT_SYM(__initdata_begin);
+ PI_EXPORT_SYM(__initdata_end);
+ PI_EXPORT_SYM(_data);
#ifdef CONFIG_KVM