xfs
[Top] [All Lists]

Re: Hang when mounting XFS root in 2.6.0 tests on x86-64

To: Steve Lord <lord@xxxxxxx>
Subject: Re: Hang when mounting XFS root in 2.6.0 tests on x86-64
From: Andi Kleen <ak@xxxxxxx>
Date: Fri, 22 Aug 2003 11:26:42 +0200
Cc: ak@xxxxxx, clubneon@xxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, linux-xfs@xxxxxxxxxxx
In-reply-to: <1061513734.1622.55.camel@laptop.americas.sgi.com>
References: <n4o5.8ga.21@gated-at.bofh.it> <m3r83en2th.fsf@averell.firstfloor.org> <1061513734.1622.55.camel@laptop.americas.sgi.com>
Sender: linux-xfs-bounce@xxxxxxxxxxx
On 21 Aug 2003 19:55:32 -0500
Steve Lord <lord@xxxxxxx> wrote:

> On Thu, 2003-08-21 at 16:00, Andi Kleen wrote:
> > Chris Meadors <clubneon@xxxxxxxxxxxxxx> writes:
> > 
> > Better report it to linux-xfs@xxxxxxxxxxx (cc'ed) too.
> > 
> > > I'm trying to get a 2.6.0-test kernel to boot on my Opteron system.  It
> > > has SuSE's 2.4.19-SMP kernel on it now, and it boots with that, mounts
> > > the XFS root just fine.  But I build a vanilla 2.6.0-test3 with no
> > > module support, everything included that I would need.  The last line
> > > that it prints during boot is the NET4.0
> > >
> > > Repeated presses of Alt+SysRq+P seems to show RIP looping in xfs_xlatesb
> > > and xfs_lowbit64.
> 
> Seems to suggest a platform specific problem with this code, Andi,
> didn't you write the function behind xfs_lowbit64?

First at least the comment on top of xfs_lowbit64() is not correct.
ffs() only handles an 32bit argument, not 64bit. Hope that isn't a problem.

Hmm, one difference is that the x86-64 ffs will return 32 on zero, while
i386 returns -1.

Does this patch fix it?

--- linux-2.6.0test3-amd64/include/asm-x86_64/bitops.h-o        2003-07-11 
13:34:21.000000000 +0200
+++ linux-2.6.0test3-amd64/include/asm-x86_64/bitops.h  2003-08-22 
11:17:53.000000000 +0200
@@ -466,7 +466,7 @@
 
        __asm__("bsfl %1,%0\n\t"
                "cmovzl %2,%0" 
-               : "=r" (r) : "g" (x), "r" (32));
+               : "=r" (r) : "g" (x), "r" (-1));
        return r+1;
 }
 

If that doesn't help I would also try it with -O1 and possibly a different 
compiler
(e.g. gcc 3.2 if you're using 3.3 or the other way round) to rule out a 
compiler problem
 
-Andi



<Prev in Thread] Current Thread [Next in Thread>