All of lore.kernel.org
 help / color / mirror / Atom feed
From: mina86@mina86.com (Michal Nazarewicz)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area()
Date: Wed, 05 Nov 2014 22:57:34 +0100	[thread overview]
Message-ID: <xa1ty4rpwbsh.fsf@mina86.com> (raw)
In-Reply-To: <1415218078-10078-1-git-send-email-gregory.0xf0@gmail.com>

On Wed, Nov 05 2014, Gregory Fong wrote:
> From: Michal Nazarewicz <m.nazarewicz@samsung.com>

Please change to mina86 at mina86.com.  My Samsung address is no longer
valid.  Ditto on signed-off-by line.

>
> This commit adds a bitmap_find_next_zero_area_off() function which
> works like bitmap_find_next_zero_area() function expect 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.
>
> Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> CC: Michal Nazarewicz <mina86@mina86.com>
> [gregory.0xf0 at gmail.com: Retrieved from
> https://patchwork.linuxtv.org/patch/6254/ and updated documentation]
> Signed-off-by: Gregory Fong <gregory.0xf0@gmail.com>
> ---
>  include/linux/bitmap.h | 36 +++++++++++++++++++++++++++++++-----
>  lib/bitmap.c           | 24 +++++++++++++-----------
>  2 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
> index e1c8d08..34e020c 100644
> --- a/include/linux/bitmap.h
> +++ b/include/linux/bitmap.h
> @@ -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 unsigned long *bitmap, unsigned int nbits);
>  
>  extern 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);
> diff --git a/lib/bitmap.c b/lib/bitmap.c
> index b499ab6..969ae8f 100644
> --- a/lib/bitmap.c
> +++ b/lib/bitmap.c
> @@ -326,30 +326,32 @@ void bitmap_clear(unsigned long *map, unsigned int start, int len)
>  }
>  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,
> -- 
> 1.9.1
>

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Micha? ?mina86? Nazarewicz    (o o)
ooo +--<mpn@google.com>--<xmpp:mina86@jabber.org>--ooO--(_)--Ooo--

WARNING: multiple messages have this Message-ID (diff)
From: Michal Nazarewicz <mina86@mina86.com>
To: Gregory Fong <gregory.0xf0@gmail.com>, linux-mm@kvack.org
Cc: linux-arm-kernel@lists.infradead.org, f.fainelli@gmail.com,
	Michal Nazarewicz <m.nazarewicz@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jan Kara <jack@suse.cz>, Masanari Iida <standby24x7@gmail.com>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area()
Date: Wed, 05 Nov 2014 22:57:34 +0100	[thread overview]
Message-ID: <xa1ty4rpwbsh.fsf@mina86.com> (raw)
In-Reply-To: <1415218078-10078-1-git-send-email-gregory.0xf0@gmail.com>

On Wed, Nov 05 2014, Gregory Fong wrote:
> From: Michal Nazarewicz <m.nazarewicz@samsung.com>

Please change to mina86@mina86.com.  My Samsung address is no longer
valid.  Ditto on signed-off-by line.

>
> This commit adds a bitmap_find_next_zero_area_off() function which
> works like bitmap_find_next_zero_area() function expect 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.
>
> Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> CC: Michal Nazarewicz <mina86@mina86.com>
> [gregory.0xf0@gmail.com: Retrieved from
> https://patchwork.linuxtv.org/patch/6254/ and updated documentation]
> Signed-off-by: Gregory Fong <gregory.0xf0@gmail.com>
> ---
>  include/linux/bitmap.h | 36 +++++++++++++++++++++++++++++++-----
>  lib/bitmap.c           | 24 +++++++++++++-----------
>  2 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
> index e1c8d08..34e020c 100644
> --- a/include/linux/bitmap.h
> +++ b/include/linux/bitmap.h
> @@ -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 unsigned long *bitmap, unsigned int nbits);
>  
>  extern 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);
> diff --git a/lib/bitmap.c b/lib/bitmap.c
> index b499ab6..969ae8f 100644
> --- a/lib/bitmap.c
> +++ b/lib/bitmap.c
> @@ -326,30 +326,32 @@ void bitmap_clear(unsigned long *map, unsigned int start, int len)
>  }
>  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,
> -- 
> 1.9.1
>

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +--<mpn@google.com>--<xmpp:mina86@jabber.org>--ooO--(_)--Ooo--

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Michal Nazarewicz <mina86@mina86.com>
To: Gregory Fong <gregory.0xf0@gmail.com>, linux-mm@kvack.org
Cc: linux-arm-kernel@lists.infradead.org, f.fainelli@gmail.com,
	Michal Nazarewicz <m.nazarewicz@samsung.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Gregory Fong <gregory.0xf0@gmail.com>,
	Rasmus Villemoes <linux@rasmusvillemoes.dk>,
	Andrew Morton <akpm@linux-foundation.org>,
	Jan Kara <jack@suse.cz>, Masanari Iida <standby24x7@gmail.com>,
	open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/2] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area()
Date: Wed, 05 Nov 2014 22:57:34 +0100	[thread overview]
Message-ID: <xa1ty4rpwbsh.fsf@mina86.com> (raw)
In-Reply-To: <1415218078-10078-1-git-send-email-gregory.0xf0@gmail.com>

On Wed, Nov 05 2014, Gregory Fong wrote:
> From: Michal Nazarewicz <m.nazarewicz@samsung.com>

Please change to mina86@mina86.com.  My Samsung address is no longer
valid.  Ditto on signed-off-by line.

>
> This commit adds a bitmap_find_next_zero_area_off() function which
> works like bitmap_find_next_zero_area() function expect 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.
>
> Signed-off-by: Michal Nazarewicz <m.nazarewicz@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> CC: Michal Nazarewicz <mina86@mina86.com>
> [gregory.0xf0@gmail.com: Retrieved from
> https://patchwork.linuxtv.org/patch/6254/ and updated documentation]
> Signed-off-by: Gregory Fong <gregory.0xf0@gmail.com>
> ---
>  include/linux/bitmap.h | 36 +++++++++++++++++++++++++++++++-----
>  lib/bitmap.c           | 24 +++++++++++++-----------
>  2 files changed, 44 insertions(+), 16 deletions(-)
>
> diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h
> index e1c8d08..34e020c 100644
> --- a/include/linux/bitmap.h
> +++ b/include/linux/bitmap.h
> @@ -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 unsigned long *bitmap, unsigned int nbits);
>  
>  extern 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);
> diff --git a/lib/bitmap.c b/lib/bitmap.c
> index b499ab6..969ae8f 100644
> --- a/lib/bitmap.c
> +++ b/lib/bitmap.c
> @@ -326,30 +326,32 @@ void bitmap_clear(unsigned long *map, unsigned int start, int len)
>  }
>  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,
> -- 
> 1.9.1
>

-- 
Best regards,                                         _     _
.o. | Liege of Serenely Enlightened Majesty of      o' \,=./ `o
..o | Computer Science,  Michał “mina86” Nazarewicz    (o o)
ooo +--<mpn@google.com>--<xmpp:mina86@jabber.org>--ooO--(_)--Ooo--

  parent reply	other threads:[~2014-11-05 21:57 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 20:07 [PATCH 1/2] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area() Gregory Fong
2014-11-05 20:07 ` Gregory Fong
2014-11-05 20:07 ` Gregory Fong
2014-11-05 20:07 ` [PATCH 2/2] mm: cma: Align to physical address, not CMA region position Gregory Fong
2014-11-05 20:07   ` Gregory Fong
2014-11-05 20:07   ` Gregory Fong
2014-11-05 21:58   ` Michal Nazarewicz
2014-11-05 21:58     ` Michal Nazarewicz
2014-11-05 21:58     ` Michal Nazarewicz
2014-11-05 21:57 ` Michal Nazarewicz [this message]
2014-11-05 21:57   ` [PATCH 1/2] lib: bitmap: Added alignment offset for bitmap_find_next_zero_area() Michal Nazarewicz
2014-11-05 21:57   ` Michal Nazarewicz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=xa1ty4rpwbsh.fsf@mina86.com \
    --to=mina86@mina86.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.