|
@@ -793,8 +793,10 @@ static inline struct kmem_cache *__find_general_cachep(size_t size,
|
|
* has cs_{dma,}cachep==NULL. Thus no special case
|
|
* has cs_{dma,}cachep==NULL. Thus no special case
|
|
* for large kmalloc calls required.
|
|
* for large kmalloc calls required.
|
|
*/
|
|
*/
|
|
|
|
+#ifdef CONFIG_ZONE_DMA
|
|
if (unlikely(gfpflags & GFP_DMA))
|
|
if (unlikely(gfpflags & GFP_DMA))
|
|
return csizep->cs_dmacachep;
|
|
return csizep->cs_dmacachep;
|
|
|
|
+#endif
|
|
return csizep->cs_cachep;
|
|
return csizep->cs_cachep;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1493,13 +1495,15 @@ void __init kmem_cache_init(void)
|
|
ARCH_KMALLOC_FLAGS|SLAB_PANIC,
|
|
ARCH_KMALLOC_FLAGS|SLAB_PANIC,
|
|
NULL, NULL);
|
|
NULL, NULL);
|
|
}
|
|
}
|
|
-
|
|
|
|
- sizes->cs_dmacachep = kmem_cache_create(names->name_dma,
|
|
|
|
|
|
+#ifdef CONFIG_ZONE_DMA
|
|
|
|
+ sizes->cs_dmacachep = kmem_cache_create(
|
|
|
|
+ names->name_dma,
|
|
sizes->cs_size,
|
|
sizes->cs_size,
|
|
ARCH_KMALLOC_MINALIGN,
|
|
ARCH_KMALLOC_MINALIGN,
|
|
ARCH_KMALLOC_FLAGS|SLAB_CACHE_DMA|
|
|
ARCH_KMALLOC_FLAGS|SLAB_CACHE_DMA|
|
|
SLAB_PANIC,
|
|
SLAB_PANIC,
|
|
NULL, NULL);
|
|
NULL, NULL);
|
|
|
|
+#endif
|
|
sizes++;
|
|
sizes++;
|
|
names++;
|
|
names++;
|
|
}
|
|
}
|
|
@@ -2321,7 +2325,7 @@ kmem_cache_create (const char *name, size_t size, size_t align,
|
|
cachep->slab_size = slab_size;
|
|
cachep->slab_size = slab_size;
|
|
cachep->flags = flags;
|
|
cachep->flags = flags;
|
|
cachep->gfpflags = 0;
|
|
cachep->gfpflags = 0;
|
|
- if (flags & SLAB_CACHE_DMA)
|
|
|
|
|
|
+ if (CONFIG_ZONE_DMA_FLAG && (flags & SLAB_CACHE_DMA))
|
|
cachep->gfpflags |= GFP_DMA;
|
|
cachep->gfpflags |= GFP_DMA;
|
|
cachep->buffer_size = size;
|
|
cachep->buffer_size = size;
|
|
cachep->reciprocal_buffer_size = reciprocal_value(size);
|
|
cachep->reciprocal_buffer_size = reciprocal_value(size);
|
|
@@ -2643,10 +2647,12 @@ static void cache_init_objs(struct kmem_cache *cachep,
|
|
|
|
|
|
static void kmem_flagcheck(struct kmem_cache *cachep, gfp_t flags)
|
|
static void kmem_flagcheck(struct kmem_cache *cachep, gfp_t flags)
|
|
{
|
|
{
|
|
- if (flags & GFP_DMA)
|
|
|
|
- BUG_ON(!(cachep->gfpflags & GFP_DMA));
|
|
|
|
- else
|
|
|
|
- BUG_ON(cachep->gfpflags & GFP_DMA);
|
|
|
|
|
|
+ if (CONFIG_ZONE_DMA_FLAG) {
|
|
|
|
+ if (flags & GFP_DMA)
|
|
|
|
+ BUG_ON(!(cachep->gfpflags & GFP_DMA));
|
|
|
|
+ else
|
|
|
|
+ BUG_ON(cachep->gfpflags & GFP_DMA);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
static void *slab_get_obj(struct kmem_cache *cachep, struct slab *slabp,
|
|
static void *slab_get_obj(struct kmem_cache *cachep, struct slab *slabp,
|