|
@@ -1999,6 +1999,7 @@ static struct kmem_cache_node *early_kmem_cache_node_alloc(gfp_t gfpflags,
|
|
|
{
|
|
|
struct page *page;
|
|
|
struct kmem_cache_node *n;
|
|
|
+ unsigned long flags;
|
|
|
|
|
|
BUG_ON(kmalloc_caches->size < sizeof(struct kmem_cache_node));
|
|
|
|
|
@@ -2023,7 +2024,14 @@ static struct kmem_cache_node *early_kmem_cache_node_alloc(gfp_t gfpflags,
|
|
|
#endif
|
|
|
init_kmem_cache_node(n);
|
|
|
atomic_long_inc(&n->nr_slabs);
|
|
|
+ /*
|
|
|
+ * lockdep requires consistent irq usage for each lock
|
|
|
+ * so even though there cannot be a race this early in
|
|
|
+ * the boot sequence, we still disable irqs.
|
|
|
+ */
|
|
|
+ local_irq_save(flags);
|
|
|
add_partial(n, page, 0);
|
|
|
+ local_irq_restore(flags);
|
|
|
return n;
|
|
|
}
|
|
|
|