public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Fix calculus of bitmap_scnprintf_len()
@ 2008-04-27 20:43 Bert Wesarg
  2008-04-27 21:01 ` Paul Jackson
  0 siblings, 1 reply; 6+ messages in thread
From: Bert Wesarg @ 2008-04-27 20:43 UTC (permalink / raw)
  To: mingo; +Cc: linux-kernel, torvalds, akpm, Bert Wesarg, Mike Travis,
	Paul Jackson

The function bitmap_scnprintf_len() is currently not used, but the returned
value is 4 times larger than needed. This value is also only a good upper
bound. Which should be mentioned in the comment.

The correct number of chars needed for the buffer, exluding any new line and
terminating zero is:

int bitmap_scnprintf_len(int len)
{
	return  /* complete hunks with commas */
	          ((len / CHUNKSZ) * 9)
	        /* partial hunk, 4 bits in one char */
	       + (((len % CHUNKSZ) + 3) / 4)
	        /* one less comma, if no partial hunk */
	       -  !(len % CHUNKSZ);
}

Signed-off-by: Bert Wesarg <bert.wesarg@googlemail.com>
Cc: Mike Travis <travis@sgi.com>
Cc: Paul Jackson <pj@sgi.com>

---
 lib/bitmap.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/lib/bitmap.c b/lib/bitmap.c
index a6939e1..47e6f0f 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -325,7 +325,7 @@ int bitmap_scnprintf_len(unsigned int len)
 	/* we need 9 chars per word for 32 bit words (8 hexdigits + sep/null) */
 	int bitslen = ALIGN(len, CHUNKSZ);
 	int wordlen = CHUNKSZ / 4;
-	int buflen = (bitslen / wordlen) * (wordlen + 1) * sizeof(char);
+	int buflen = (bitslen / CHUNKSZ) * (wordlen + 1);
 
 	return buflen;
 }
-- 
1.5.4


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] Fix calculus of bitmap_scnprintf_len()
  2008-04-27 20:43 [PATCH] Fix calculus of bitmap_scnprintf_len() Bert Wesarg
@ 2008-04-27 21:01 ` Paul Jackson
  2008-04-28  6:14   ` WANG Cong
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Jackson @ 2008-04-27 21:01 UTC (permalink / raw)
  To: Bert Wesarg; +Cc: mingo, linux-kernel, torvalds, akpm, bert.wesarg, travis

Bert wrote:
> The function bitmap_scnprintf_len() is currently not used

How about we just remove that function?

-- 
                  I won't rest till it's the best ...
                  Programmer, Linux Scalability
                  Paul Jackson <pj@sgi.com> 1.940.382.4214

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Fix calculus of bitmap_scnprintf_len()
  2008-04-27 21:01 ` Paul Jackson
@ 2008-04-28  6:14   ` WANG Cong
  2008-04-28 13:13     ` Paul Jackson
  0 siblings, 1 reply; 6+ messages in thread
From: WANG Cong @ 2008-04-28  6:14 UTC (permalink / raw)
  To: Paul Jackson; +Cc: Bert Wesarg, mingo, linux-kernel, torvalds, akpm, travis

On Sun, 27 Apr 2008, Paul Jackson wrote:

> Bert wrote:
>> The function bitmap_scnprintf_len() is currently not used
>
> How about we just remove that function?

I am afraid no. See:

include/linux/cpumask.h:292:    return bitmap_scnprintf_len(len);


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Fix calculus of bitmap_scnprintf_len()
  2008-04-28  6:14   ` WANG Cong
@ 2008-04-28 13:13     ` Paul Jackson
  2008-04-28 17:09       ` Mike Travis
  0 siblings, 1 reply; 6+ messages in thread
From: Paul Jackson @ 2008-04-28 13:13 UTC (permalink / raw)
  To: WANG Cong; +Cc: bert.wesarg, mingo, linux-kernel, torvalds, akpm, travis

Bert wrote:
> The function bitmap_scnprintf_len() is currently not used

Paul Jackson wrote:
> How about we just remove that function?

WANG Cong wrote:
> I am afraid no. See:
> 
> include/linux/cpumask.h:292:    return bitmap_scnprintf_len(len);

Good point.


Then how about we also remove from cpumask.h:

#define cpumask_scnprintf_len(len) \
                        __cpumask_scnprintf_len((len))
static inline int __cpumask_scnprintf_len(int len)
{
        return bitmap_scnprintf_len(len);
}

-- 
                  I won't rest till it's the best ...
                  Programmer, Linux Scalability
                  Paul Jackson <pj@sgi.com> 1.940.382.4214

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Fix calculus of bitmap_scnprintf_len()
  2008-04-28 13:13     ` Paul Jackson
@ 2008-04-28 17:09       ` Mike Travis
  2008-04-28 17:31         ` Bert Wesarg
  0 siblings, 1 reply; 6+ messages in thread
From: Mike Travis @ 2008-04-28 17:09 UTC (permalink / raw)
  To: Paul Jackson; +Cc: WANG Cong, bert.wesarg, mingo, linux-kernel, torvalds, akpm

Paul Jackson wrote:
> Bert wrote:
>> The function bitmap_scnprintf_len() is currently not used
> 
> Paul Jackson wrote:
>> How about we just remove that function?
> 
> WANG Cong wrote:
>> I am afraid no. See:
>>
>> include/linux/cpumask.h:292:    return bitmap_scnprintf_len(len);
> 
> Good point.
> 
> 
> Then how about we also remove from cpumask.h:
> 
> #define cpumask_scnprintf_len(len) \
>                         __cpumask_scnprintf_len((len))
> static inline int __cpumask_scnprintf_len(int len)
> {
>         return bitmap_scnprintf_len(len);
> }
> 

That's fine with me.  A later version of the patch did have
the function removed but it didn't get picked up.  The other
changes there were to use function pointers instead of the
flag variable to select list or mask output format, and the
addition of mask variants for the cpu/{present,possible,
online,system} map outputs.

I'll dig that one back up and resubmit it.

Thanks,
Mike

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Fix calculus of bitmap_scnprintf_len()
  2008-04-28 17:09       ` Mike Travis
@ 2008-04-28 17:31         ` Bert Wesarg
  0 siblings, 0 replies; 6+ messages in thread
From: Bert Wesarg @ 2008-04-28 17:31 UTC (permalink / raw)
  To: Mike Travis; +Cc: Paul Jackson, WANG Cong, mingo, linux-kernel, torvalds, akpm

On Mon, Apr 28, 2008 at 7:09 PM, Mike Travis <travis@sgi.com> wrote:
> Paul Jackson wrote:
>  > Bert wrote:
>  >> The function bitmap_scnprintf_len() is currently not used
>  >
>  > Paul Jackson wrote:
>  >> How about we just remove that function?
>  >
>  > WANG Cong wrote:
>  >> I am afraid no. See:
>  >>
>  >> include/linux/cpumask.h:292:    return bitmap_scnprintf_len(len);
>  >
>  > Good point.
>  >
>  >
>  > Then how about we also remove from cpumask.h:
>  >
>  > #define cpumask_scnprintf_len(len) \
>  >                         __cpumask_scnprintf_len((len))
>  > static inline int __cpumask_scnprintf_len(int len)
>  > {
>  >         return bitmap_scnprintf_len(len);
>  > }
>  >
>
>  That's fine with me.  A later version of the patch did have
>  the function removed but it didn't get picked up.  The other
>  changes there were to use function pointers instead of the
>  flag variable to select list or mask output format, and the
>  addition of mask variants for the cpu/{present,possible,
>  online,system} map outputs.
I'm fine with this too. I did a hasty audit of cpumask_scnprintf()
users, and no one can use these functions.

But one last note to the cpumask_scnprintf_len() macro: this macro
should really not have an argument, it should be forced to NR_CPUS.
Else a user could have a too small buffer for the call to
cpumask_scnprintf(), which always calls bitmap_scnprintf() with
NR_CPUS nbits.

>
>  I'll dig that one back up and resubmit it.
Fine.

Regards.
Bert
>
>  Thanks,
>  Mike
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2008-04-28 17:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-27 20:43 [PATCH] Fix calculus of bitmap_scnprintf_len() Bert Wesarg
2008-04-27 21:01 ` Paul Jackson
2008-04-28  6:14   ` WANG Cong
2008-04-28 13:13     ` Paul Jackson
2008-04-28 17:09       ` Mike Travis
2008-04-28 17:31         ` Bert Wesarg

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox