[XFS] Undo bit ops cleanup mod due to regression on 32-bit powermac

2008-02-26 Thread Linux Kernel Mailing List
Gitweb: 
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=db69c915e67705daac25cad06d816c09be634de0
Commit: db69c915e67705daac25cad06d816c09be634de0
Parent: 91e229bbad6524aabaac8717b2f559283670c37a
Author: Lachlan McIlroy [EMAIL PROTECTED]
AuthorDate: Tue Feb 26 17:00:14 2008 +1100
Committer:  Lachlan McIlroy [EMAIL PROTECTED]
CommitDate: Tue Feb 26 17:05:37 2008 +1100

[XFS] Undo bit ops cleanup mod due to regression on 32-bit powermac
platform.

SGI-PV: 974005
SGI-Modid: xfs-linux-melb:xfs-kern:30558a

Signed-off-by: Lachlan McIlroy [EMAIL PROTECTED]
---
 fs/xfs/xfs_bit.h |8 
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/xfs/xfs_bit.h b/fs/xfs/xfs_bit.h
index 325a007..0f9fc9a 100644
--- a/fs/xfs/xfs_bit.h
+++ b/fs/xfs/xfs_bit.h
@@ -61,15 +61,15 @@ static inline int xfs_highbit64(__uint64_t v)
 /* Get low bit set out of 32-bit argument, -1 if none set */
 static inline int xfs_lowbit32(__uint32_t v)
 {
-   __uint32_t t = v;
-   return (t) ? find_first_bit((unsigned long *)t, 32) : -1;
+   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)
 {
-   __uint64_t t = v;
-   return (t) ? find_first_bit((unsigned long *)t, 64) : -1;
+   unsigned long   t = v;
+   return (v) ? find_first_bit(t, 64) : -1;
 }
 
 /* Return whether bitmap is empty (1 == empty) */
-
To unsubscribe from this list: send the line unsubscribe git-commits-head in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[XFS] Undo bit ops cleanup mod due to regression on 32-bit powermac

2008-02-26 Thread Linux Kernel Mailing List
Gitweb: 
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=ef8ece55d9b6825c28a5c1a4bd89b94040cb7b32
Commit: ef8ece55d9b6825c28a5c1a4bd89b94040cb7b32
Parent: db69c915e67705daac25cad06d816c09be634de0
Author: Lachlan McIlroy [EMAIL PROTECTED]
AuthorDate: Tue Feb 26 17:00:22 2008 +1100
Committer:  Lachlan McIlroy [EMAIL PROTECTED]
CommitDate: Tue Feb 26 17:05:44 2008 +1100

[XFS] Undo bit ops cleanup mod due to regression on 32-bit powermac
platform.

SGI-PV: 971186
SGI-Modid: xfs-linux-melb:xfs-kern:30559a

Signed-off-by: Lachlan McIlroy [EMAIL PROTECTED]
---
 fs/xfs/xfs_bit.c |  103 ++
 fs/xfs/xfs_bit.h |   27 ++---
 fs/xfs/xfs_rtalloc.c |   19 ++---
 3 files changed, 120 insertions(+), 29 deletions(-)

diff --git a/fs/xfs/xfs_bit.c b/fs/xfs/xfs_bit.c
index 4822884..fab0b6d 100644
--- a/fs/xfs/xfs_bit.c
+++ b/fs/xfs/xfs_bit.c
@@ -25,6 +25,109 @@
  * 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  0x)
+   if (v  0xff00)
+   i = 24;
+   else
+   i = 16;
+   else if (v  0x)
+   if (v  0xff00)
+   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
diff --git a/fs/xfs/xfs_bit.h b/fs/xfs/xfs_bit.h
index 0f9fc9a..082641a 100644
--- a/fs/xfs/xfs_bit.h
+++ b/fs/xfs/xfs_bit.h
@@ -47,30 +47,13 @@ static inline __uint64_t xfs_mask64lo(int n)
 }
 
 /* Get high bit set out of 32-bit