public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Donald Douwsma <donaldd@sgi.com>
To: Eric Sandeen <sandeen@sandeen.net>
Cc: xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] re-remove xfs custom bitops
Date: Thu, 15 May 2008 18:45:53 +1000	[thread overview]
Message-ID: <482BF841.8050704@sgi.com> (raw)
In-Reply-To: <4829C360.5060500@sandeen.net>

Eric Sandeen wrote:
> Eric Sandeen wrote:
>> Once more, with feeling!
>>
>> This re-instates the reverted mod after the ppc panic of
>> Feb '08.  You guys do have ppc boxes in the test farm now right? :)
>>
>> This keeps xfs_lowbit64 as it was since there aren't good
>> generic helpers there ...
>>
>> This should probably keep Dave's signed-off line, there's
>> a bit of my (userspace) testing here but no original work. 
>>
>> This exact patch isn't tested but it's based on a conglomeration
>> of prior testing...
> 
> SGI guys, any takers on this one?
> -Eric

Sorry Eric, havent had chance to run this on all platforms yet.
I want to test it on ppc as well as the usual x86_64/ia64 combinations,
then I'll get it committed.

Don

> 
>> Thanks,
>> -Eric
>>
>> Index: linux-2.6-xfs/fs/xfs/xfs_bit.c
>> ===================================================================
>> --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.c
>> +++ linux-2.6-xfs/fs/xfs/xfs_bit.c
>> @@ -25,109 +25,6 @@
>>   * XFS bit manipulation routines, used in non-realtime code.
>>   */
>>  
>> -#ifndef HAVE_ARCH_HIGHBIT
>> -/*
>> - * Index of high bit number in byte, -1 for none set, 0..7 otherwise.
>> - */
>> -static const char xfs_highbit[256] = {
>> -       -1, 0, 1, 1, 2, 2, 2, 2,			/* 00 .. 07 */
>> -	3, 3, 3, 3, 3, 3, 3, 3,			/* 08 .. 0f */
>> -	4, 4, 4, 4, 4, 4, 4, 4,			/* 10 .. 17 */
>> -	4, 4, 4, 4, 4, 4, 4, 4,			/* 18 .. 1f */
>> -	5, 5, 5, 5, 5, 5, 5, 5,			/* 20 .. 27 */
>> -	5, 5, 5, 5, 5, 5, 5, 5,			/* 28 .. 2f */
>> -	5, 5, 5, 5, 5, 5, 5, 5,			/* 30 .. 37 */
>> -	5, 5, 5, 5, 5, 5, 5, 5,			/* 38 .. 3f */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 40 .. 47 */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 48 .. 4f */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 50 .. 57 */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 58 .. 5f */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 60 .. 67 */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 68 .. 6f */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 70 .. 77 */
>> -	6, 6, 6, 6, 6, 6, 6, 6,			/* 78 .. 7f */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* 80 .. 87 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* 88 .. 8f */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* 90 .. 97 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* 98 .. 9f */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* a0 .. a7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* a8 .. af */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* b0 .. b7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* b8 .. bf */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* c0 .. c7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* c8 .. cf */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* d0 .. d7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* d8 .. df */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* e0 .. e7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* e8 .. ef */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* f0 .. f7 */
>> -	7, 7, 7, 7, 7, 7, 7, 7,			/* f8 .. ff */
>> -};
>> -#endif
>> -
>> -/*
>> - * xfs_highbit32: get high bit set out of 32-bit argument, -1 if none set.
>> - */
>> -inline int
>> -xfs_highbit32(
>> -	__uint32_t	v)
>> -{
>> -#ifdef HAVE_ARCH_HIGHBIT
>> -	return highbit32(v);
>> -#else
>> -	int		i;
>> -
>> -	if (v & 0xffff0000)
>> -		if (v & 0xff000000)
>> -			i = 24;
>> -		else
>> -			i = 16;
>> -	else if (v & 0x0000ffff)
>> -		if (v & 0x0000ff00)
>> -			i = 8;
>> -		else
>> -			i = 0;
>> -	else
>> -		return -1;
>> -	return i + xfs_highbit[(v >> i) & 0xff];
>> -#endif
>> -}
>> -
>> -/*
>> - * xfs_lowbit64: get low bit set out of 64-bit argument, -1 if none set.
>> - */
>> -int
>> -xfs_lowbit64(
>> -	__uint64_t	v)
>> -{
>> -	__uint32_t	w = (__uint32_t)v;
>> -	int		n = 0;
>> -
>> -	if (w) {	/* lower bits */
>> -		n = ffs(w);
>> -	} else {	/* upper bits */
>> -		w = (__uint32_t)(v >> 32);
>> -		if (w && (n = ffs(w)))
>> -			n += 32;
>> -	}
>> -	return n - 1;
>> -}
>> -
>> -/*
>> - * xfs_highbit64: get high bit set out of 64-bit argument, -1 if none set.
>> - */
>> -int
>> -xfs_highbit64(
>> -	__uint64_t	v)
>> -{
>> -	__uint32_t	h = (__uint32_t)(v >> 32);
>> -
>> -	if (h)
>> -		return xfs_highbit32(h) + 32;
>> -	return xfs_highbit32((__uint32_t)v);
>> -}
>> -
>> -
>>  /*
>>   * Return whether bitmap is empty.
>>   * Size is number of words in the bitmap, which is padded to word boundary
>> Index: linux-2.6-xfs/fs/xfs/xfs_bit.h
>> ===================================================================
>> --- linux-2.6-xfs.orig/fs/xfs/xfs_bit.h
>> +++ linux-2.6-xfs/fs/xfs/xfs_bit.h
>> @@ -47,13 +47,39 @@ static inline __uint64_t xfs_mask64lo(in
>>  }
>>  
>>  /* Get high bit set out of 32-bit argument, -1 if none set */
>> -extern int xfs_highbit32(__uint32_t v);
>> -
>> -/* Get low bit set out of 64-bit argument, -1 if none set */
>> -extern int xfs_lowbit64(__uint64_t v);
>> +static inline int xfs_highbit32(__uint32_t v)
>> +{
>> +	return fls(v) - 1;
>> +}
>>  
>>  /* Get high bit set out of 64-bit argument, -1 if none set */
>> -extern int xfs_highbit64(__uint64_t);
>> +static inline int xfs_highbit64(__uint64_t v)
>> +{
>> +	return fls64(v) - 1;
>> +}
>> +
>> +/* Get low bit set out of 32-bit argument, -1 if none set */
>> +static inline int xfs_lowbit32(__uint32_t v)
>> +{
>> +	unsigned long	t = v;
>> +	return (v) ? find_first_bit(&t, 32) : -1;
>> +}
>> +
>> +/* Get low bit set out of 64-bit argument, -1 if none set */
>> +static inline int xfs_lowbit64(__uint64_t v)
>> +{
>> +	__uint32_t	w = (__uint32_t)v;
>> +	int		n = 0;
>> +
>> +	if (w) {	/* lower bits */
>> +		n = ffs(w);
>> +	} else {	/* upper bits */
>> +		w = (__uint32_t)(v >> 32);
>> +		if (w && (n = ffs(w)))
>> +		n += 32;
>> +	}
>> +	return n - 1;
>> +}
>>  
>>  /* Return whether bitmap is empty (1 == empty) */
>>  extern int xfs_bitmap_empty(uint *map, uint size);
>> Index: linux-2.6-xfs/fs/xfs/xfs_rtalloc.c
>> ===================================================================
>> --- linux-2.6-xfs.orig/fs/xfs/xfs_rtalloc.c
>> +++ linux-2.6-xfs/fs/xfs/xfs_rtalloc.c
>> @@ -74,18 +74,6 @@ STATIC int xfs_rtmodify_summary(xfs_moun
>>   */
>>  
>>  /*
>> - * xfs_lowbit32: get low bit set out of 32-bit argument, -1 if none set.
>> - */
>> -STATIC int
>> -xfs_lowbit32(
>> -	__uint32_t	v)
>> -{
>> -	if (v)
>> -		return ffs(v) - 1;
>> -	return -1;
>> -}
>> -
>> -/*
>>   * Allocate space to the bitmap or summary file, and zero it, for growfs.
>>   */
>>  STATIC int				/* error */
>> @@ -450,6 +438,7 @@ xfs_rtallocate_extent_near(
>>  	}
>>  	bbno = XFS_BITTOBLOCK(mp, bno);
>>  	i = 0;
>> +	ASSERT(minlen != 0);
>>  	log2len = xfs_highbit32(minlen);
>>  	/*
>>  	 * Loop over all bitmap blocks (bbno + i is current block).
>> @@ -618,6 +607,8 @@ xfs_rtallocate_extent_size(
>>  	xfs_suminfo_t	sum;		/* summary information for extents */
>>  
>>  	ASSERT(minlen % prod == 0 && maxlen % prod == 0);
>> +	ASSERT(maxlen != 0);
>> +
>>  	/*
>>  	 * Loop over all the levels starting with maxlen.
>>  	 * At each level, look at all the bitmap blocks, to see if there
>> @@ -675,6 +666,9 @@ xfs_rtallocate_extent_size(
>>  		*rtblock = NULLRTBLOCK;
>>  		return 0;
>>  	}
>> +	ASSERT(minlen != 0);
>> +	ASSERT(maxlen != 0);
>> +
>>  	/*
>>  	 * Loop over sizes, from maxlen down to minlen.
>>  	 * This time, when we do the allocations, allow smaller ones
>> @@ -1961,6 +1955,7 @@ xfs_growfs_rt(
>>  				  nsbp->sb_blocksize * nsbp->sb_rextsize);
>>  		nsbp->sb_rextents = nsbp->sb_rblocks;
>>  		do_div(nsbp->sb_rextents, nsbp->sb_rextsize);
>> +		ASSERT(nsbp->sb_rextents != 0);
>>  		nsbp->sb_rextslog = xfs_highbit32(nsbp->sb_rextents);
>>  		nrsumlevels = nmp->m_rsumlevels = nsbp->sb_rextslog + 1;
>>  		nrsumsize =
>>
>>
>>
> 

  reply	other threads:[~2008-05-15  8:45 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-23  3:57 [PATCH] re-remove xfs custom bitops Eric Sandeen
2008-05-13 16:35 ` Eric Sandeen
2008-05-15  8:45   ` Donald Douwsma [this message]
2008-06-28 20:08     ` Eric Sandeen
2008-06-30  9:02       ` Donald Douwsma
2008-07-03  1:58         ` Eric Sandeen
2008-07-03  6:46           ` Donald Douwsma
2008-07-03 15:02             ` Eric Sandeen
2008-07-10  5:03             ` Donald Douwsma
2008-07-10  5:10               ` Eric Sandeen
2008-07-10  6:05               ` Dave Chinner

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=482BF841.8050704@sgi.com \
    --to=donaldd@sgi.com \
    --cc=sandeen@sandeen.net \
    --cc=xfs@oss.sgi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox