37 lines
1.0 KiB
Diff
37 lines
1.0 KiB
Diff
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Subject: slub: delay ctor until the object is requested
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/3.12/patches-3.12.6-rt9.tar.xz
|
|
|
|
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
|
|
@@ -1363,8 +1363,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)
|
|
@@ -2470,6 +2472,10 @@ static __always_inline void *slab_alloc_
|
|
|
|
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);
|
|
|