[BACK]Return to genalloc.h CVS log [TXT][DIR] Up to [Development] / linux-2.6-xfs / include / linux

File: [Development] / linux-2.6-xfs / include / linux / genalloc.h (download)

Revision 1.1, Mon Aug 29 15:50:38 2005 UTC (12 years, 2 months ago) by nathans.longdrop.melbourne.sgi.com
Branch: MAIN

Merge up to 2.6.13.
Merge of 2.6.x-xfs-melb:linux:23660a by kenmcd.

/*
 * 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);