mirror of
https://github.com/torvalds/linux.git
synced 2026-05-29 17:43:52 +02:00
posix-timers: Initialize cache early and move pointer into __timer_data
Move posix_timers_cache initialization to posixtimer_init(). At that point the memory subsystem is already up and running. Also move the cache pointer to the __timer_data variable to avoid potential false sharing, since it never was marked as __ro_after_init. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/all/20250402133114.253901-1-edumazet@google.com
This commit is contained in:
parent
0af2f6be1b
commit
0df6db767a
|
|
@ -30,8 +30,6 @@
|
|||
#include "timekeeping.h"
|
||||
#include "posix-timers.h"
|
||||
|
||||
static struct kmem_cache *posix_timers_cache;
|
||||
|
||||
/*
|
||||
* Timers are managed in a hash table for lockless lookup. The hash key is
|
||||
* constructed from current::signal and the timer ID and the timer is
|
||||
|
|
@ -49,10 +47,12 @@ struct timer_hash_bucket {
|
|||
static struct {
|
||||
struct timer_hash_bucket *buckets;
|
||||
unsigned long mask;
|
||||
} __timer_data __ro_after_init __aligned(2*sizeof(long));
|
||||
struct kmem_cache *cache;
|
||||
} __timer_data __ro_after_init __aligned(4*sizeof(long));
|
||||
|
||||
#define timer_buckets (__timer_data.buckets)
|
||||
#define timer_hashmask (__timer_data.mask)
|
||||
#define timer_buckets (__timer_data.buckets)
|
||||
#define timer_hashmask (__timer_data.mask)
|
||||
#define posix_timers_cache (__timer_data.cache)
|
||||
|
||||
static const struct k_clock * const posix_clocks[];
|
||||
static const struct k_clock *clockid_to_kclock(const clockid_t id);
|
||||
|
|
@ -283,14 +283,6 @@ static int posix_get_hrtimer_res(clockid_t which_clock, struct timespec64 *tp)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static __init int init_posix_timers(void)
|
||||
{
|
||||
posix_timers_cache = kmem_cache_create("posix_timers_cache", sizeof(struct k_itimer),
|
||||
__alignof__(struct k_itimer), SLAB_ACCOUNT, NULL);
|
||||
return 0;
|
||||
}
|
||||
__initcall(init_posix_timers);
|
||||
|
||||
/*
|
||||
* The siginfo si_overrun field and the return value of timer_getoverrun(2)
|
||||
* are of type int. Clamp the overrun value to INT_MAX
|
||||
|
|
@ -1556,6 +1548,11 @@ static int __init posixtimer_init(void)
|
|||
unsigned long i, size;
|
||||
unsigned int shift;
|
||||
|
||||
posix_timers_cache = kmem_cache_create("posix_timers_cache",
|
||||
sizeof(struct k_itimer),
|
||||
__alignof__(struct k_itimer),
|
||||
SLAB_ACCOUNT, NULL);
|
||||
|
||||
if (IS_ENABLED(CONFIG_BASE_SMALL))
|
||||
size = 512;
|
||||
else
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user