From: Glauber Costa <glommer@parallels.com>
To: Christoph Lameter <cl@linux.com>
Cc: Pekka Enberg <penberg@kernel.org>, Joonsoo Kim <js1304@gmail.com>,
linux-mm@kvack.org, David Rientjes <rientjes@google.com>
Subject: Re: CK1 [06/13] Common kmalloc slab index determination
Date: Fri, 28 Sep 2012 12:27:57 +0400 [thread overview]
Message-ID: <50655F8D.5010706@parallels.com> (raw)
In-Reply-To: <0000013a043cdd82-a153095d-219a-467a-b0f2-c799f5ddbb05-000000@email.amazonses.com>
On 09/27/2012 12:20 AM, Christoph Lameter wrote:
> Extract the function to determine the index of the slab within
> the array of kmalloc caches as well as a function to determine
> maximum object size from the nr of the kmalloc slab.
>
> This is used here only to simplify slub bootstrap but will
> be used later also for SLAB.
>
> Signed-off-by: Christoph Lameter <cl@linux.com>
>
> Index: linux/include/linux/slab.h
> ===================================================================
> --- linux.orig/include/linux/slab.h 2012-09-19 09:19:38.904986568 -0500
> +++ linux/include/linux/slab.h 2012-09-19 09:21:27.307238804 -0500
> @@ -178,6 +178,90 @@ unsigned int kmem_cache_size(struct kmem
> #endif
>
> /*
> + * Kmalloc subsystem.
> + */
> +#if defined(ARCH_DMA_MINALIGN) && ARCH_DMA_MINALIGN > 8
> +#define KMALLOC_MIN_SIZE ARCH_DMA_MINALIGN
> +#else
> +#ifdef CONFIG_SLAB
> +#define KMALLOC_MIN_SIZE 32
> +#else
> +#define KMALLOC_MIN_SIZE 8
> +#endif
> +#endif
> +
> +#define KMALLOC_SHIFT_LOW ilog2(KMALLOC_MIN_SIZE)
> +
> +/*
> + * Figure out which kmalloc slab an allocation of a certain size
> + * belongs to.
> + * 0 = zero alloc
> + * 1 = 65 .. 96 bytes
> + * 2 = 120 .. 192 bytes
> + * n = 2^(n-1) .. 2^n -1
> + */
> +static __always_inline int kmalloc_index(size_t size)
> +{
> + if (!size)
> + return 0;
> +
> + if (size <= KMALLOC_MIN_SIZE)
> + return KMALLOC_SHIFT_LOW;
> +
> + if (KMALLOC_MIN_SIZE <= 32 && size > 64 && size <= 96)
> + return 1;
> + if (KMALLOC_MIN_SIZE <= 64 && size > 128 && size <= 192)
> + return 2;
> + if (size <= 8) return 3;
> + if (size <= 16) return 4;
> + if (size <= 32) return 5;
> + if (size <= 64) return 6;
> + if (size <= 128) return 7;
> + if (size <= 256) return 8;
> + if (size <= 512) return 9;
> + if (size <= 1024) return 10;
> + if (size <= 2 * 1024) return 11;
> + if (size <= 4 * 1024) return 12;
> + if (size <= 8 * 1024) return 13;
> + if (size <= 16 * 1024) return 14;
> + if (size <= 32 * 1024) return 15;
> + if (size <= 64 * 1024) return 16;
> + if (size <= 128 * 1024) return 17;
> + if (size <= 256 * 1024) return 18;
> + if (size <= 512 * 1024) return 19;
> + if (size <= 1024 * 1024) return 20;
> + if (size <= 2 * 1024 * 1024) return 21;
> + if (size <= 4 * 1024 * 1024) return 22;
> + if (size <= 8 * 1024 * 1024) return 23;
> + if (size <= 16 * 1024 * 1024) return 24;
> + if (size <= 32 * 1024 * 1024) return 26;
> + if (size <= 64 * 1024 * 1024) return 27;
> + BUG();
> +
> + /* Will never be reached. Needed because the compiler may complain */
> + return -1;
> +}
> +
That is a bunch of branches... can't we use ilog2 for that somehow ?
In any case, you skipped "return 25".
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2012-09-28 8:31 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20120926200005.911809821@linux.com>
2012-09-26 20:01 ` CK1 [02/13] create common functions for boot slab creation Christoph Lameter
2012-09-27 13:22 ` Glauber Costa
2012-09-26 20:01 ` CK1 [01/13] slab: Simplify bootstrap Christoph Lameter
2012-09-26 20:07 ` CK1 [09/13] slab: rename nodelists to node Christoph Lameter
2012-09-28 8:42 ` Glauber Costa
2012-09-28 14:45 ` Christoph Lameter
2012-09-26 20:07 ` CK1 [08/13] slab: Common name for the per node structures Christoph Lameter
2012-09-28 8:38 ` Glauber Costa
2012-09-28 14:21 ` Christoph Lameter
2012-09-26 20:18 ` CK1 [10/13] Do not define KMALLOC array definitions for SLOB Christoph Lameter
2012-09-28 8:44 ` Glauber Costa
2012-09-28 17:11 ` Christoph Lameter
2012-09-26 20:18 ` CK1 [04/13] slab: Use the new create_boot_cache function to simplify bootstrap Christoph Lameter
2012-09-27 13:24 ` Glauber Costa
2012-09-27 14:32 ` Christoph Lameter
2012-09-27 14:33 ` Glauber Costa
2012-09-26 20:18 ` CK1 [07/13] slab: Use common kmalloc_index/kmalloc_size functions Christoph Lameter
2012-09-28 8:36 ` Glauber Costa
2012-09-28 14:20 ` Christoph Lameter
2012-09-26 20:20 ` CK1 [11/13] Common constants for kmalloc boundaries Christoph Lameter
2012-09-26 20:20 ` CK1 [12/13] Common names for the array of kmalloc caches Christoph Lameter
2012-09-26 20:20 ` CK1 [05/13] Common alignment code Christoph Lameter
2012-09-26 20:20 ` CK1 [06/13] Common kmalloc slab index determination Christoph Lameter
2012-09-28 8:27 ` Glauber Costa [this message]
2012-09-28 14:16 ` Christoph Lameter
2012-09-26 20:20 ` CK1 [03/13] slub: Use a statically allocated kmem_cache boot structure for bootstrap Christoph Lameter
2012-09-27 13:25 ` Glauber Costa
2012-09-26 20:29 ` CK1 [13/13] Common function to create the kmalloc array Christoph Lameter
2012-09-28 8:51 ` Glauber Costa
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=50655F8D.5010706@parallels.com \
--to=glommer@parallels.com \
--cc=cl@linux.com \
--cc=js1304@gmail.com \
--cc=linux-mm@kvack.org \
--cc=penberg@kernel.org \
--cc=rientjes@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.