Patch "lib: bitmap: add alignment offset for bitmap_find_next_zero_area()" has been added to the 3.18-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
lib: bitmap: add alignment offset for bitmap_find_next_zero_area()
to the 3.18-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
lib-bitmap-add-alignment-offset-for-bitmap_find_next_zero_area.patch
and it can be found in the queue-3.18 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
5e19b013f55a884c59a14391b22138899d1cc4ccMon Sep 17 00:00:00 2001
From: Michal Nazarewicz <[email protected]>
Date: Fri, 12 Dec 2014 16:54:45 -0800
Subject: lib: bitmap: add alignment offset for bitmap_find_next_zero_area()
From: Michal Nazarewicz <[email protected]>
commit 5e19b013f55a884c59a14391b22138899d1cc4cc upstream.
Add a bitmap_find_next_zero_area_off() function which works like bitmap_find_next_zero_area() function except it allows an offset to be specified when alignment is checked. This lets caller request a bit such that its number plus the offset is aligned according to the mask.
--- include/linux/bitmap.h | 36 +++++++++++++++++++++++++++++++----- lib/bitmap.c | 24 +++++++++++++----------- 2 files changed, 44 insertions(+), 16 deletions(-)
include/linux/bitmap.h +31 -5
@@ -45,6 +45,7 @@* bitmap_set(dst, pos, nbits) Set specified bit area * bitmap_clear(dst, pos, nbits) Clear specified bit area * bitmap_find_next_zero_area(buf, len, pos, n, mask) Find bit free area +* bitmap_find_next_zero_area_off(buf, len, pos, n, mask) as above * bitmap_shift_right(dst, src, n, nbits) *dst = *src >> n * bitmap_shift_left(dst, src, n, nbits) *dst = *src << n * bitmap_remap(dst, src, old, new, nbits) *dst = map(old, new)(src)
@@ -114,11 +115,36 @@ extern int __bitmap_weight(const unsigneextern void bitmap_set (unsigned long *map,unsigned int start,int len);extern void bitmap_clear (unsigned long *map,unsigned int start,int len); -extern unsigned long bitmap_find_next_zero_area (unsigned long *map, -unsigned long size, -unsigned long start, -unsigned int nr, -unsigned long align_mask); + +extern unsigned long bitmap_find_next_zero_area_off (unsigned long *map, +unsigned long size, +unsigned long start, +unsigned int nr, +unsigned long align_mask, +unsigned long align_offset); + +/** +* bitmap_find_next_zero_area - find a contiguous aligned zero area +* @map: The address to base the search on +* @size: The bitmap size in bits +* @start: The bitnumber to start searching at +* @nr: The number of zeroed bits we're looking for +* @align_mask: Alignment mask for zero area +* +* The @align_mask should be one less than a power of 2; the effect is that +* the bit offset of all zero areas this function finds is multiples of that +* power of 2. A @align_mask of 0 means no alignment is required. +*/ +static inline unsigned long +bitmap_find_next_zero_area (unsigned long *map, +unsigned long size, +unsigned long start, +unsigned int nr, +unsigned long align_mask) +{ +return bitmap_find_next_zero_area_off (map, size, start, nr, + align_mask,0 ); +}extern int bitmap_scnprintf (char *buf,unsigned int len,const unsigned long *src,int nbits);
lib/bitmap.c +13 -11
@@ -326,30 +326,32 @@ void bitmap_clear(unsigned long *map, un }EXPORT_SYMBOL (bitmap_clear); -/* -* bitmap_find_next_zero_area - find a contiguous aligned zero area +/** +* bitmap_find_next_zero_area_off - find a contiguous aligned zero area * @map: The address to base the search on * @size: The bitmap size in bits * @start: The bitnumber to start searching at * @nr: The number of zeroed bits we're looking for * @align_mask: Alignment mask for zero area +* @align_offset: Alignment offset for zero area. * * The @align_mask should be one less than a power of 2; the effect is that -* the bit offset of all zero areas this function finds is multiples of that -* power of 2. A @align_mask of 0 means no alignment is required. +* the bit offset of all zero areas this function finds plus @align_offset +* is multiple of that power of 2. */ -unsigned long bitmap_find_next_zero_area (unsigned long *map, -unsigned long size, -unsigned long start, -unsigned int nr, -unsigned long align_mask) +unsigned long bitmap_find_next_zero_area_off (unsigned long *map, +unsigned long size, +unsigned long start, +unsigned int nr, +unsigned long align_mask, +unsigned long align_offset) {unsigned long index, end, i; again: index =find_next_zero_bit (map, size, start);/* Align allocation */ - index =__ALIGN_MASK (index, align_mask); + index =__ALIGN_MASK (index + align_offset, align_mask) - align_offset; end = index + nr;if (end > size)
@@ -361,7 +363,7 @@ again: }return index; } -EXPORT_SYMBOL (bitmap_find_next_zero_area); +EXPORT_SYMBOL (bitmap_find_next_zero_area_off);/* * Bitmap printing & parsing functions: first version by Nadia Yvette Chambers,
Patches currently in stable-queue which might be from [email protected] are
queue-3.18/lib-bitmap-add-alignment-offset-for-bitmap_find_next_zero_area.patch queue-3.18/mm-cma-fix-cma-aligned-offset-calculation.patch queue-3.18/mm-cma-align-to-physical-address-not-cma-region-position.patch queue-3.18/mm-cma-split-cma-reserved-in-dmesg-log.patch queue-3.18/mm-cma-fix-totalcma_pages-to-include-dt-defined-cma-regions.patch queue-3.18/mm-cma-make-kmemleak-ignore-cma-regions.patch queue-3.18/mm-cma-constify-and-use-correct-signness-in-mm-cma.c.patch