hrtimers: Replace hrtimer_clock_to_base_table with switch-case
Clang and GCC complain about overlapped initialisers in the hrtimer_clock_to_base_table definition. With `make W=1` and CONFIG_WERROR=y (which is default nowadays) this breaks the build: CC kernel/time/hrtimer.o kernel/time/hrtimer.c:124:21: error: initializer overrides prior initialization of this subobject [-Werror,-Winitializer-overrides] 124 | [CLOCK_REALTIME] = HRTIMER_BASE_REALTIME, kernel/time/hrtimer.c:122:27: note: previous initialization is here 122 | [0 ... MAX_CLOCKS - 1] = HRTIMER_MAX_CLOCK_BASES, (and similar for CLOCK_MONOTONIC, CLOCK_BOOTTIME, and CLOCK_TAI). hrtimer_clockid_to_base(), which uses the table, is only used in __hrtimer_init(), which is not a hotpath. Therefore replace the table lookup with a switch case in hrtimer_clockid_to_base() to avoid this warning. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/all/20250214134424.3367619-1-andriy.shevchenko@linux.intel.com
This commit is contained in:
committed by
Thomas Gleixner
parent
2ea97b76d6
commit
4441b976df
@@ -117,16 +117,6 @@ DEFINE_PER_CPU(struct hrtimer_cpu_base, hrtimer_bases) =
|
||||
.csd = CSD_INIT(retrigger_next_event, NULL)
|
||||
};
|
||||
|
||||
static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = {
|
||||
/* Make sure we catch unsupported clockids */
|
||||
[0 ... MAX_CLOCKS - 1] = HRTIMER_MAX_CLOCK_BASES,
|
||||
|
||||
[CLOCK_REALTIME] = HRTIMER_BASE_REALTIME,
|
||||
[CLOCK_MONOTONIC] = HRTIMER_BASE_MONOTONIC,
|
||||
[CLOCK_BOOTTIME] = HRTIMER_BASE_BOOTTIME,
|
||||
[CLOCK_TAI] = HRTIMER_BASE_TAI,
|
||||
};
|
||||
|
||||
static inline bool hrtimer_base_is_online(struct hrtimer_cpu_base *base)
|
||||
{
|
||||
if (!IS_ENABLED(CONFIG_HOTPLUG_CPU))
|
||||
@@ -1587,14 +1577,19 @@ u64 hrtimer_next_event_without(const struct hrtimer *exclude)
|
||||
|
||||
static inline int hrtimer_clockid_to_base(clockid_t clock_id)
|
||||
{
|
||||
if (likely(clock_id < MAX_CLOCKS)) {
|
||||
int base = hrtimer_clock_to_base_table[clock_id];
|
||||
|
||||
if (likely(base != HRTIMER_MAX_CLOCK_BASES))
|
||||
return base;
|
||||
switch (clock_id) {
|
||||
case CLOCK_REALTIME:
|
||||
return HRTIMER_BASE_REALTIME;
|
||||
case CLOCK_MONOTONIC:
|
||||
return HRTIMER_BASE_MONOTONIC;
|
||||
case CLOCK_BOOTTIME:
|
||||
return HRTIMER_BASE_BOOTTIME;
|
||||
case CLOCK_TAI:
|
||||
return HRTIMER_BASE_TAI;
|
||||
default:
|
||||
WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
|
||||
return HRTIMER_BASE_MONOTONIC;
|
||||
}
|
||||
WARN(1, "Invalid clockid %d. Using MONOTONIC\n", clock_id);
|
||||
return HRTIMER_BASE_MONOTONIC;
|
||||
}
|
||||
|
||||
static enum hrtimer_restart hrtimer_dummy_timeout(struct hrtimer *unused)
|
||||
|
||||
Reference in New Issue
Block a user