Skip to contentSkip to conversation

make kmem_find_general_cachep static in slab.c

PATCH In review Christoph Hellwig 2 participants 3 messages Sep 7, 2004

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 make kmem_find_general_cachep static in slab.c

include/linux/slab.h +0 -1
@@ -55,7 +55,6 @@
 /* prototypes */
 extern void kmem_cache_init(void);
 
-extern kmem_cache_t *kmem_find_general_cachep(size_t, int gfpflags);
 extern kmem_cache_t *kmem_cache_create(const char *, size_t, size_t, unsigned long,
 				       void (*)(void *, kmem_cache_t *, unsigned long),
 				       void (*)(void *, kmem_cache_t *, unsigned long));
mm/slab.c +16 -18
@@ -562,6 +562,22 @@
 	return cachep->array[smp_processor_id()];
 }
 
+static kmem_cache_t * kmem_find_general_cachep (size_t size, int gfpflags)
+{
+	struct cache_sizes *csizep = malloc_sizes;
+
+	/* This function could be moved to the header file, and
+	 * made inline so consumers can quickly determine what
+	 * cache pointer they require.
+	 */
+	for ( ; csizep->cs_size; csizep++) {
+		if (size > csizep->cs_size)
+			continue;
+		break;
+	}
+	return (gfpflags & GFP_DMA) ? csizep->cs_dmacachep : csizep->cs_cachep;
+}
+
 /* Cal the num objs, wastage, and bytes left over for a given slab size. */
 static void cache_estimate (unsigned long gfporder, size_t size, size_t align,
 		 int flags, size_t *left_over, unsigned int *num)
@@ -2554,24 +2570,6 @@
 }
 
 EXPORT_SYMBOL(kmem_cache_size);
-
-kmem_cache_t * kmem_find_general_cachep (size_t size, int gfpflags)
-{
-	struct cache_sizes *csizep = malloc_sizes;
-
-	/* This function could be moved to the header file, and
-	 * made inline so consumers can quickly determine what
-	 * cache pointer they require.
-	 */
-	for ( ; csizep->cs_size; csizep++) {
-		if (size > csizep->cs_size)
-			continue;
-		break;
-	}
-	return (gfpflags & GFP_DMA) ? csizep->cs_dmacachep : csizep->cs_cachep;
-}
-
-EXPORT_SYMBOL(kmem_find_general_cachep);
 
 struct ccupdate_struct {
 	kmem_cache_t *cachep;
#1 lore raw

include/linux/slab.h line 59

Quoted 9 lines · Christoph Hellwig
include/linux/slab.h +0 -1
@@ -55,7 +55,6 @@
 /* prototypes */
 extern void kmem_cache_init(void);
 
-extern kmem_cache_t *kmem_find_general_cachep(size_t, int gfpflags);
 
 

Why?
It's intended for users that want to kmalloc always the same amount of memory.
For example the network layer could call kmem_find_general_cachep once for dev->mtu and then just call kmem_cache_alloc instead of kmalloc. The loop in kmalloc often needs more cpu cycles than the actual alloc.

--
Manfred

#2 lore raw
Quoted 6 lines · Manfred Spraul

Why?
It's intended for users that want to kmalloc always the same amount of memory.
For example the network layer could call kmem_find_general_cachep once for dev->mtu and then just call kmem_cache_alloc instead of kmalloc. The loop in kmalloc often needs more cpu cycles than the actual alloc.

Because there's no single user, and for constant size arguments kmalloc already optimizes very well, so I rather doubt people are ever going to use this one.

Is the basic don't design APIs for a maybe future scheme.