Skip to content

Commit

Permalink
lib/vdso: Avoid highres update if clocksource is not VDSO capable
Browse files Browse the repository at this point in the history
If the current clocksource is not VDSO capable there is no point in
updating the high resolution parts of the VDSO data.

Replace the architecture specific check with a check for a VDSO capable
clocksource and skip the update if there is none.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Reviewed-by: Vincenzo Frascino <vincenzo.frascino@arm.com>
Link: https://lkml.kernel.org/r/20200207124403.563379423@linutronix.de
  • Loading branch information
Thomas Gleixner committed Feb 17, 2020
1 parent f86fd32 commit c7a1810
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 17 deletions.
7 changes: 0 additions & 7 deletions arch/arm/include/asm/vdso/vsyscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ struct vdso_data *__arm_get_k_vdso_data(void)
}
#define __arch_get_k_vdso_data __arm_get_k_vdso_data

static __always_inline
bool __arm_update_vdso_data(void)
{
return cntvct_ok;
}
#define __arch_update_vdso_data __arm_update_vdso_data

static __always_inline
void __arm_sync_vdso_data(struct vdso_data *vdata)
{
Expand Down
7 changes: 0 additions & 7 deletions include/asm-generic/vdso/vsyscall.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,6 @@ static __always_inline struct vdso_data *__arch_get_k_vdso_data(void)
}
#endif /* __arch_get_k_vdso_data */

#ifndef __arch_update_vdso_data
static __always_inline bool __arch_update_vdso_data(void)
{
return true;
}
#endif /* __arch_update_vdso_data */

#ifndef __arch_update_vsyscall
static __always_inline void __arch_update_vsyscall(struct vdso_data *vdata,
struct timekeeper *tk)
Expand Down
6 changes: 3 additions & 3 deletions kernel/time/vsyscall.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ void update_vsyscall(struct timekeeper *tk)
WRITE_ONCE(vdata[CS_HRES_COARSE].hrtimer_res, hrtimer_resolution);

/*
* Architectures can opt out of updating the high resolution part
* of the VDSO.
* If the current clocksource is not VDSO capable, then spare the
* update of the high reolution parts.
*/
if (__arch_update_vdso_data())
if (clock_mode != VDSO_CLOCKMODE_NONE)
update_vdso_data(vdata, tk);

__arch_update_vsyscall(vdata, tk);
Expand Down

0 comments on commit c7a1810

Please sign in to comment.