swh:1:snp:c2847dfd741eae21606027cf29250d1ebcd63fb4
Raw File
Tip revision: 8bbde0e6d52265158ee9625f383500c1a7d09ba9 authored by Linus Torvalds on 19 April 2006, 03:00:49 UTC
Linux v2.6.17-rc2
Tip revision: 8bbde0e
genalloc.h
/*
 * 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);
back to top