diff options
-rw-r--r-- | include/linux/genalloc.h | 4 | ||||
-rw-r--r-- | lib/genalloc.c | 20 |
2 files changed, 24 insertions, 0 deletions
diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h index 1c2fdaa2ffc3..3cd0934d62ba 100644 --- a/include/linux/genalloc.h +++ b/include/linux/genalloc.h | |||
@@ -110,6 +110,10 @@ extern void gen_pool_set_algo(struct gen_pool *pool, genpool_algo_t algo, | |||
110 | extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, | 110 | extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, |
111 | unsigned long start, unsigned int nr, void *data); | 111 | unsigned long start, unsigned int nr, void *data); |
112 | 112 | ||
113 | extern unsigned long gen_pool_first_fit_order_align(unsigned long *map, | ||
114 | unsigned long size, unsigned long start, unsigned int nr, | ||
115 | void *data); | ||
116 | |||
113 | extern unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size, | 117 | extern unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size, |
114 | unsigned long start, unsigned int nr, void *data); | 118 | unsigned long start, unsigned int nr, void *data); |
115 | 119 | ||
diff --git a/lib/genalloc.c b/lib/genalloc.c index 38d2db82228c..166f17b9f169 100644 --- a/lib/genalloc.c +++ b/lib/genalloc.c | |||
@@ -481,6 +481,26 @@ unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size, | |||
481 | EXPORT_SYMBOL(gen_pool_first_fit); | 481 | EXPORT_SYMBOL(gen_pool_first_fit); |
482 | 482 | ||
483 | /** | 483 | /** |
484 | * gen_pool_first_fit_order_align - find the first available region | ||
485 | * of memory matching the size requirement. The region will be aligned | ||
486 | * to the order of the size specified. | ||
487 | * @map: The address to base the search on | ||
488 | * @size: The bitmap size in bits | ||
489 | * @start: The bitnumber to start searching at | ||
490 | * @nr: The number of zeroed bits we're looking for | ||
491 | * @data: additional data - unused | ||
492 | */ | ||
493 | unsigned long gen_pool_first_fit_order_align(unsigned long *map, | ||
494 | unsigned long size, unsigned long start, | ||
495 | unsigned int nr, void *data) | ||
496 | { | ||
497 | unsigned long align_mask = roundup_pow_of_two(nr) - 1; | ||
498 | |||
499 | return bitmap_find_next_zero_area(map, size, start, nr, align_mask); | ||
500 | } | ||
501 | EXPORT_SYMBOL(gen_pool_first_fit_order_align); | ||
502 | |||
503 | /** | ||
484 | * gen_pool_best_fit - find the best fitting region of memory | 504 | * gen_pool_best_fit - find the best fitting region of memory |
485 | * macthing the size requirement (no alignment constraint) | 505 | * macthing the size requirement (no alignment constraint) |
486 | * @map: The address to base the search on | 506 | * @map: The address to base the search on |