Commit fb61bdb2 authored by Thomas Weißschuh's avatar Thomas Weißschuh Committed by Thomas Gleixner
Browse files

vdso/gettimeofday: Return bool from clock_gettime() helpers



The internal helpers are effectively using boolean results,
while pretending to use error numbers.

Switch the return type to bool for more clarity.

Signed-off-by: default avatarThomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250701-vdso-auxclock-v1-6-df7d9f87b9b8@linutronix.de
parent 34f888e3
Loading
Loading
Loading
Loading
+36 −34
Original line number Diff line number Diff line
@@ -82,7 +82,7 @@ const struct vdso_time_data *__arch_get_vdso_u_timens_data(const struct vdso_tim
#endif /* CONFIG_GENERIC_VDSO_DATA_STORE */

static __always_inline
int do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
bool do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
		    clockid_t clk, struct __kernel_timespec *ts)
{
	const struct vdso_time_data *vd = __arch_get_vdso_u_timens_data(vdns);
@@ -103,11 +103,11 @@ int do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *v
		seq = vdso_read_begin(vc);

		if (unlikely(!vdso_clocksource_ok(vc)))
			return -1;
			return false;

		cycles = __arch_get_hw_counter(vc->clock_mode, vd);
		if (unlikely(!vdso_cycles_ok(cycles)))
			return -1;
			return false;
		ns = vdso_calc_ns(vc, cycles, vdso_ts->nsec);
		sec = vdso_ts->sec;
	} while (unlikely(vdso_read_retry(vc, seq)));
@@ -123,7 +123,7 @@ int do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *v
	ts->tv_sec = sec + __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
	ts->tv_nsec = ns;

	return 0;
	return true;
}
#else
static __always_inline
@@ -133,15 +133,15 @@ const struct vdso_time_data *__arch_get_vdso_u_timens_data(const struct vdso_tim
}

static __always_inline
int do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
bool do_hres_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
		    clockid_t clk, struct __kernel_timespec *ts)
{
	return -EINVAL;
	return false;
}
#endif

static __always_inline
int do_hres(const struct vdso_time_data *vd, const struct vdso_clock *vc,
bool do_hres(const struct vdso_time_data *vd, const struct vdso_clock *vc,
	     clockid_t clk, struct __kernel_timespec *ts)
{
	const struct vdso_timestamp *vdso_ts = &vc->basetime[clk];
@@ -150,7 +150,7 @@ int do_hres(const struct vdso_time_data *vd, const struct vdso_clock *vc,

	/* Allows to compile the high resolution parts out */
	if (!__arch_vdso_hres_capable())
		return -1;
		return false;

	do {
		/*
@@ -173,11 +173,11 @@ int do_hres(const struct vdso_time_data *vd, const struct vdso_clock *vc,
		smp_rmb();

		if (unlikely(!vdso_clocksource_ok(vc)))
			return -1;
			return false;

		cycles = __arch_get_hw_counter(vc->clock_mode, vd);
		if (unlikely(!vdso_cycles_ok(cycles)))
			return -1;
			return false;
		ns = vdso_calc_ns(vc, cycles, vdso_ts->nsec);
		sec = vdso_ts->sec;
	} while (unlikely(vdso_read_retry(vc, seq)));
@@ -189,12 +189,12 @@ int do_hres(const struct vdso_time_data *vd, const struct vdso_clock *vc,
	ts->tv_sec = sec + __iter_div_u64_rem(ns, NSEC_PER_SEC, &ns);
	ts->tv_nsec = ns;

	return 0;
	return true;
}

#ifdef CONFIG_TIME_NS
static __always_inline
int do_coarse_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
bool do_coarse_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
		      clockid_t clk, struct __kernel_timespec *ts)
{
	const struct vdso_time_data *vd = __arch_get_vdso_u_timens_data(vdns);
@@ -223,19 +223,19 @@ int do_coarse_timens(const struct vdso_time_data *vdns, const struct vdso_clock
	 */
	ts->tv_sec = sec + __iter_div_u64_rem(nsec, NSEC_PER_SEC, &nsec);
	ts->tv_nsec = nsec;
	return 0;
	return true;
}
#else
static __always_inline
int do_coarse_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
bool do_coarse_timens(const struct vdso_time_data *vdns, const struct vdso_clock *vcns,
		      clockid_t clk, struct __kernel_timespec *ts)
{
	return -1;
	return false;
}
#endif

static __always_inline
int do_coarse(const struct vdso_time_data *vd, const struct vdso_clock *vc,
bool do_coarse(const struct vdso_time_data *vd, const struct vdso_clock *vc,
	       clockid_t clk, struct __kernel_timespec *ts)
{
	const struct vdso_timestamp *vdso_ts = &vc->basetime[clk];
@@ -258,10 +258,10 @@ int do_coarse(const struct vdso_time_data *vd, const struct vdso_clock *vc,
		ts->tv_nsec = vdso_ts->nsec;
	} while (unlikely(vdso_read_retry(vc, seq)));

	return 0;
	return true;
}

static __always_inline int
static __always_inline bool
__cvdso_clock_gettime_common(const struct vdso_time_data *vd, clockid_t clock,
			     struct __kernel_timespec *ts)
{
@@ -270,7 +270,7 @@ __cvdso_clock_gettime_common(const struct vdso_time_data *vd, clockid_t clock,

	/* Check for negative values or invalid clocks */
	if (unlikely((u32) clock >= MAX_CLOCKS))
		return -1;
		return false;

	/*
	 * Convert the clockid to a bitmask and use it to check which
@@ -284,7 +284,7 @@ __cvdso_clock_gettime_common(const struct vdso_time_data *vd, clockid_t clock,
	else if (msk & VDSO_RAW)
		vc = &vc[CS_RAW];
	else
		return -1;
		return false;

	return do_hres(vd, vc, clock, ts);
}
@@ -293,9 +293,11 @@ static __maybe_unused int
__cvdso_clock_gettime_data(const struct vdso_time_data *vd, clockid_t clock,
			   struct __kernel_timespec *ts)
{
	int ret = __cvdso_clock_gettime_common(vd, clock, ts);
	bool ok;

	if (unlikely(ret))
	ok = __cvdso_clock_gettime_common(vd, clock, ts);

	if (unlikely(!ok))
		return clock_gettime_fallback(clock, ts);
	return 0;
}
@@ -312,18 +314,18 @@ __cvdso_clock_gettime32_data(const struct vdso_time_data *vd, clockid_t clock,
			     struct old_timespec32 *res)
{
	struct __kernel_timespec ts;
	int ret;
	bool ok;

	ret = __cvdso_clock_gettime_common(vd, clock, &ts);
	ok = __cvdso_clock_gettime_common(vd, clock, &ts);

	if (unlikely(ret))
	if (unlikely(!ok))
		return clock_gettime32_fallback(clock, res);

	/* For ret == 0 */
	/* For ok == true */
	res->tv_sec = ts.tv_sec;
	res->tv_nsec = ts.tv_nsec;

	return ret;
	return 0;
}

static __maybe_unused int
@@ -342,7 +344,7 @@ __cvdso_gettimeofday_data(const struct vdso_time_data *vd,
	if (likely(tv != NULL)) {
		struct __kernel_timespec ts;

		if (do_hres(vd, &vc[CS_HRES_COARSE], CLOCK_REALTIME, &ts))
		if (!do_hres(vd, &vc[CS_HRES_COARSE], CLOCK_REALTIME, &ts))
			return gettimeofday_fallback(tv, tz);

		tv->tv_sec = ts.tv_sec;