Messages in this thread Patch in this message | | | From | Peter Hilber <> | Subject | [RFC PATCH 3/4] x86/tsc: Use bool, not pointer, for ART availability | Date | Fri, 18 Aug 2023 03:12:54 +0200 |
| |
So far, ART availability has been implicitly encoded in art_related_clocksource, which is NULL if ART is not available.
Replace art_related_clocksource by bool have_art to explicitly indicate ART availability.
This should reduce the changes during a tree-wide switch of struct system_counterval_t.cs to enum clocksource_ids (when the clocksource pointer will not be needed any more).
Signed-off-by: Peter Hilber <peter.hilber@opensynergy.com> --- arch/x86/kernel/tsc.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c index 132045be76d0..e56cc4e97d0d 100644 --- a/arch/x86/kernel/tsc.c +++ b/arch/x86/kernel/tsc.c @@ -54,7 +54,7 @@ static int __read_mostly tsc_force_recalibrate; static u32 art_to_tsc_numerator; static u32 art_to_tsc_denominator; static u64 art_to_tsc_offset; -static struct clocksource *art_related_clocksource; +static bool have_art; struct cyc2ns { struct cyc2ns_data data[2]; /* 0 + 2*16 = 32 */ @@ -1312,8 +1312,10 @@ struct system_counterval_t convert_art_to_tsc(u64 art) do_div(tmp, art_to_tsc_denominator); res += tmp + art_to_tsc_offset; - return (struct system_counterval_t) {.cs = art_related_clocksource, - .cycles = res}; + return (struct system_counterval_t) { + .cs = have_art ? &clocksource_tsc : NULL, + .cycles = res + }; } EXPORT_SYMBOL(convert_art_to_tsc); @@ -1350,8 +1352,10 @@ struct system_counterval_t convert_art_ns_to_tsc(u64 art_ns) do_div(tmp, USEC_PER_SEC); res += tmp; - return (struct system_counterval_t) { .cs = art_related_clocksource, - .cycles = res}; + return (struct system_counterval_t) { + .cs = have_art ? &clocksource_tsc : NULL, + .cycles = res + }; } EXPORT_SYMBOL(convert_art_ns_to_tsc); @@ -1458,7 +1462,7 @@ static void tsc_refine_calibration_work(struct work_struct *work) goto unreg; if (boot_cpu_has(X86_FEATURE_ART)) - art_related_clocksource = &clocksource_tsc; + have_art = true; clocksource_register_khz(&clocksource_tsc, tsc_khz); unreg: clocksource_unregister(&clocksource_tsc_early); @@ -1484,7 +1488,7 @@ static int __init init_tsc_clocksource(void) */ if (boot_cpu_has(X86_FEATURE_TSC_KNOWN_FREQ)) { if (boot_cpu_has(X86_FEATURE_ART)) - art_related_clocksource = &clocksource_tsc; + have_art = true; clocksource_register_khz(&clocksource_tsc, tsc_khz); clocksource_unregister(&clocksource_tsc_early); -- 2.39.2
| |