forked from luck/tmp_suning_uos_patched
1946089a10
Patch to allocate the control structures for for ide devices on the node of the device itself (for NUMA systems). The patch depends on the Slab API change patch by Manfred and me (in mm) and the pcidev_to_node patch that I posted today. Does some realignment too. Signed-off-by: Justin M. Forbes <jmforbes@linuxtx.org> Signed-off-by: Christoph Lameter <christoph@lameter.com> Signed-off-by: Pravin Shelar <pravin@calsoftinc.com> Signed-off-by: Shobhit Dayal <shobhit@calsoftinc.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
43 lines
1.3 KiB
C
43 lines
1.3 KiB
C
/*
|
|
* memory buffer pool support
|
|
*/
|
|
#ifndef _LINUX_MEMPOOL_H
|
|
#define _LINUX_MEMPOOL_H
|
|
|
|
#include <linux/wait.h>
|
|
|
|
typedef void * (mempool_alloc_t)(unsigned int __nocast gfp_mask, void *pool_data);
|
|
typedef void (mempool_free_t)(void *element, void *pool_data);
|
|
|
|
typedef struct mempool_s {
|
|
spinlock_t lock;
|
|
int min_nr; /* nr of elements at *elements */
|
|
int curr_nr; /* Current nr of elements at *elements */
|
|
void **elements;
|
|
|
|
void *pool_data;
|
|
mempool_alloc_t *alloc;
|
|
mempool_free_t *free;
|
|
wait_queue_head_t wait;
|
|
} mempool_t;
|
|
|
|
extern mempool_t *mempool_create(int min_nr, mempool_alloc_t *alloc_fn,
|
|
mempool_free_t *free_fn, void *pool_data);
|
|
extern mempool_t *mempool_create_node(int min_nr, mempool_alloc_t *alloc_fn,
|
|
mempool_free_t *free_fn, void *pool_data, int nid);
|
|
|
|
extern int mempool_resize(mempool_t *pool, int new_min_nr,
|
|
unsigned int __nocast gfp_mask);
|
|
extern void mempool_destroy(mempool_t *pool);
|
|
extern void * mempool_alloc(mempool_t *pool, unsigned int __nocast gfp_mask);
|
|
extern void mempool_free(void *element, mempool_t *pool);
|
|
|
|
/*
|
|
* A mempool_alloc_t and mempool_free_t that get the memory from
|
|
* a slab that is passed in through pool_data.
|
|
*/
|
|
void *mempool_alloc_slab(unsigned int __nocast gfp_mask, void *pool_data);
|
|
void mempool_free_slab(void *element, void *pool_data);
|
|
|
|
#endif /* _LINUX_MEMPOOL_H */
|