|
@@ -973,14 +973,10 @@ struct kmem_cache *__init create_kmalloc_cache(const char *name,
|
|
|
return s;
|
|
|
}
|
|
|
|
|
|
-struct kmem_cache *kmalloc_caches[KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
|
|
|
+struct kmem_cache *
|
|
|
+kmalloc_caches[NR_KMALLOC_TYPES][KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
|
|
|
EXPORT_SYMBOL(kmalloc_caches);
|
|
|
|
|
|
-#ifdef CONFIG_ZONE_DMA
|
|
|
-struct kmem_cache *kmalloc_dma_caches[KMALLOC_SHIFT_HIGH + 1] __ro_after_init;
|
|
|
-EXPORT_SYMBOL(kmalloc_dma_caches);
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* Conversion table for small slabs sizes / 8 to the index in the
|
|
|
* kmalloc array. This is necessary for slabs < 192 since we have non power
|
|
@@ -1040,12 +1036,7 @@ struct kmem_cache *kmalloc_slab(size_t size, gfp_t flags)
|
|
|
index = fls(size - 1);
|
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_ZONE_DMA
|
|
|
- if (unlikely((flags & GFP_DMA)))
|
|
|
- return kmalloc_dma_caches[index];
|
|
|
-
|
|
|
-#endif
|
|
|
- return kmalloc_caches[index];
|
|
|
+ return kmalloc_caches[kmalloc_type(flags)][index];
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1119,7 +1110,8 @@ void __init setup_kmalloc_cache_index_table(void)
|
|
|
|
|
|
static void __init new_kmalloc_cache(int idx, slab_flags_t flags)
|
|
|
{
|
|
|
- kmalloc_caches[idx] = create_kmalloc_cache(kmalloc_info[idx].name,
|
|
|
+ kmalloc_caches[KMALLOC_NORMAL][idx] = create_kmalloc_cache(
|
|
|
+ kmalloc_info[idx].name,
|
|
|
kmalloc_info[idx].size, flags, 0,
|
|
|
kmalloc_info[idx].size);
|
|
|
}
|
|
@@ -1132,9 +1124,10 @@ static void __init new_kmalloc_cache(int idx, slab_flags_t flags)
|
|
|
void __init create_kmalloc_caches(slab_flags_t flags)
|
|
|
{
|
|
|
int i;
|
|
|
+ int type = KMALLOC_NORMAL;
|
|
|
|
|
|
for (i = KMALLOC_SHIFT_LOW; i <= KMALLOC_SHIFT_HIGH; i++) {
|
|
|
- if (!kmalloc_caches[i])
|
|
|
+ if (!kmalloc_caches[type][i])
|
|
|
new_kmalloc_cache(i, flags);
|
|
|
|
|
|
/*
|
|
@@ -1142,9 +1135,9 @@ void __init create_kmalloc_caches(slab_flags_t flags)
|
|
|
* These have to be created immediately after the
|
|
|
* earlier power of two caches
|
|
|
*/
|
|
|
- if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[1] && i == 6)
|
|
|
+ if (KMALLOC_MIN_SIZE <= 32 && !kmalloc_caches[type][1] && i == 6)
|
|
|
new_kmalloc_cache(1, flags);
|
|
|
- if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[2] && i == 7)
|
|
|
+ if (KMALLOC_MIN_SIZE <= 64 && !kmalloc_caches[type][2] && i == 7)
|
|
|
new_kmalloc_cache(2, flags);
|
|
|
}
|
|
|
|
|
@@ -1153,7 +1146,7 @@ void __init create_kmalloc_caches(slab_flags_t flags)
|
|
|
|
|
|
#ifdef CONFIG_ZONE_DMA
|
|
|
for (i = 0; i <= KMALLOC_SHIFT_HIGH; i++) {
|
|
|
- struct kmem_cache *s = kmalloc_caches[i];
|
|
|
+ struct kmem_cache *s = kmalloc_caches[KMALLOC_NORMAL][i];
|
|
|
|
|
|
if (s) {
|
|
|
unsigned int size = kmalloc_size(i);
|
|
@@ -1161,8 +1154,8 @@ void __init create_kmalloc_caches(slab_flags_t flags)
|
|
|
"dma-kmalloc-%u", size);
|
|
|
|
|
|
BUG_ON(!n);
|
|
|
- kmalloc_dma_caches[i] = create_kmalloc_cache(n,
|
|
|
- size, SLAB_CACHE_DMA | flags, 0, 0);
|
|
|
+ kmalloc_caches[KMALLOC_DMA][i] = create_kmalloc_cache(
|
|
|
+ n, size, SLAB_CACHE_DMA | flags, 0, 0);
|
|
|
}
|
|
|
}
|
|
|
#endif
|