On Mon, 7 Feb 2005 22:34:44 -0500 (EST) Jurij Smakov <[EMAIL PROTECTED]> wrote:
> dev_ifconf[518]: i=0 ifr=00000001efffacf8 ifr32=00000000efffd898 > > alloc_size is the amount allocated by compat_alloc_user_space(). The only > "strange" thing I can notice is the ifr address. On a few previous calls > to this function starting ifr (at i=0) looks like that: > > ifr=00000000efffb3b0 > ifr=00000000efffacc0 > ifr=00000000efffb328 > ifr=00000000efffb2b8 > > and so on. The ifr address right before the hang has an extra bit set. Yep, and notice that the "extra bit" is (1 << 32), or the first bit in the upper 32-bits of the 64-bit kernel pointer. In short, we get garbage from the upper 32-bits of the stack pointer, and need to mask it out for 32-bit tasks. The fix is obvious, try this: ===== include/asm-sparc64/compat.h 1.17 vs edited ===== --- 1.17/include/asm-sparc64/compat.h 2005-02-02 04:05:45 -08:00 +++ edited/include/asm-sparc64/compat.h 2005-02-07 19:51:15 -08:00 @@ -133,6 +133,8 @@ if (!(test_thread_flag(TIF_32BIT))) usp += STACK_BIAS; + else + usp &= 0xffffffffUL; return (void __user *) (usp - len); } - To unsubscribe from this list: send the line "unsubscribe sparclinux" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html