public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Sandeen <sandeen@sandeen.net>
To: xfs-oss <xfs@oss.sgi.com>
Subject: Re: [PATCH] re-remove xfs custom bitops
Date: Tue, 13 May 2008 11:35:44 -0500	[thread overview]
Message-ID: <4829C360.5060500@sandeen.net> (raw)
In-Reply-To: <480EB397.1040304@sandeen.net>

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

> 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-13 16:35 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 [this message]
2008-05-15  8:45   ` Donald Douwsma
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=4829C360.5060500@sandeen.net \
    --to=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