diff options
| author | 2005-06-22 13:07:28 -0400 | |
|---|---|---|
| committer | 2005-06-22 13:07:28 -0400 | |
| commit | ff40c6d3d1437ecdf295b8e39adcb06c3d6021ef (patch) | |
| tree | 3666d029b4bd4df2909dbefd9c7a09e6042b7d32 /include/linux/genalloc.h | |
| parent | [libata] C/H/S support, for older devices (diff) | |
| parent | Merge rsync://oss.sgi.com/git/xfs-2.6 (diff) | |
| download | linux-dev-ff40c6d3d1437ecdf295b8e39adcb06c3d6021ef.tar.xz linux-dev-ff40c6d3d1437ecdf295b8e39adcb06c3d6021ef.zip | |
Merge upstream kernel changes into 'C/H/S support' branch of libata.
Diffstat (limited to 'include/linux/genalloc.h')
| -rw-r--r-- | include/linux/genalloc.h | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h new file mode 100644 index 000000000000..7fd0576a4454 --- /dev/null +++ b/include/linux/genalloc.h @@ -0,0 +1,40 @@ +/* + * Basic general purpose allocator for managing special purpose memory + * not managed by the regular kmalloc/kfree interface. + * Uses for this includes on-device special memory, uncached memory + * etc. + * + * This code is based on the buddy allocator found in the sym53c8xx_2 + * driver, adapted for general purpose use. + * + * This source code is licensed under the GNU General Public License, + * Version 2. See the file COPYING for more details. + */ + +#include <linux/spinlock.h> + +#define ALLOC_MIN_SHIFT 5 /* 32 bytes minimum */ +/* + * Link between free memory chunks of a given size. + */ +struct gen_pool_link { + struct gen_pool_link *next; +}; + +/* + * Memory pool descriptor. + */ +struct gen_pool { + spinlock_t lock; + unsigned long (*get_new_chunk)(struct gen_pool *); + struct gen_pool *next; + struct gen_pool_link *h; + unsigned long private; + int max_chunk_shift; +}; + +unsigned long gen_pool_alloc(struct gen_pool *poolp, int size); +void gen_pool_free(struct gen_pool *mp, unsigned long ptr, int size); +struct gen_pool *gen_pool_create(int nr_chunks, int max_chunk_shift, + unsigned long (*fp)(struct gen_pool *), + unsigned long data); |
