| From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Subject: slub: delay ctor until the object is requested |
| |
| It seems that allocation of plenty objects causes latency on ARM since that |
| code can not be preempted |
| |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| mm/slub.c | 6 ++++++ |
| 1 file changed, 6 insertions(+) |
| |
| --- a/mm/slub.c |
| +++ b/mm/slub.c |
| @@ -1346,8 +1346,10 @@ static void setup_object(struct kmem_cac |
| void *object) |
| { |
| setup_object_debug(s, page, object); |
| +#ifndef CONFIG_PREEMPT_RT_FULL |
| if (unlikely(s->ctor)) |
| s->ctor(object); |
| +#endif |
| } |
| |
| static struct page *new_slab(struct kmem_cache *s, gfp_t flags, int node) |
| @@ -2437,6 +2439,10 @@ redo: |
| |
| if (unlikely(gfpflags & __GFP_ZERO) && object) |
| memset(object, 0, s->object_size); |
| +#ifdef CONFIG_PREEMPT_RT_FULL |
| + if (unlikely(s->ctor) && object) |
| + s->ctor(object); |
| +#endif |
| |
| slab_post_alloc_hook(s, gfpflags, object); |
| |