linux-mips
[Top] [All Lists]

Re: [Oops] Indy R4600 Oops(es) w/ 2.4.19-rc1

To: linux-mips@oss.sgi.com
Subject: Re: [Oops] Indy R4600 Oops(es) w/ 2.4.19-rc1
From: Jan-Benedict Glaw <jbglaw@lug-owl.de>
Date: Mon, 1 Jul 2002 11:43:59 +0200
Cc: Ralf Baechle <ralf@oss.sgi.com>
In-reply-to: <20020701091321.GO17216@lug-owl.de>
Mail-followup-to: linux-mips@oss.sgi.com, Ralf Baechle <ralf@oss.sgi.com>
References: <20020629220513.GC17216@lug-owl.de> <20020630174717.GI17216@lug-owl.de> <20020701091321.GO17216@lug-owl.de>
Sender: owner-linux-mips@oss.sgi.com
User-agent: Mutt/1.4i
On Mon, 2002-07-01 11:13:22 +0200, Jan-Benedict Glaw <jbglaw@lug-owl.de>
wrote in message <20020701091321.GO17216@lug-owl.de>:
> On Sun, 2002-06-30 19:47:17 +0200, Jan-Benedict Glaw <jbglaw@lug-owl.de>
> wrote in message <20020630174717.GI17216@lug-owl.de>:
> > On Sun, 2002-06-30 00:05:13 +0200, Jan-Benedict Glaw <jbglaw@lug-owl.de>
> > wrote in message <20020629220513.GC17216@lug-owl.de>:
> > [...]
> > >   10:   bc600060  0xbc600060
> > > Code;  88016ce0 <r4k_flush_cache_range_d32i32+e4/16c>
> > >   14:   bc600080  0xbc600080
> > 
> > Well, I've bulid the same kernel with CONFIG_MIPS_UNCACHED and the box
> > is running^Wsnailing fine with it. I'm experiencing a little peformance
> > drop (100 BogoMips -> 2.79 BogoMips), but it comes up in finite time:-)
> 
> I've got some mail that support for my early R4600 (well, the bug fixes
> for it...) got removed some time ago. I've looked at the diff of r1.3
> (2.4.16) and r1.3.2.3 (2.4.19-rc1) and it seems that mostly calls to
> __save_and_cli() and __restore_flags() got removed. Reading <asm/war.h>,
> it really seems that this is causing my problem.
> 
> Ralf, would you accept a patch adding these lines again surrounded by
> #ifdef CONFIG_CPU_R4X00 ... #endif /* CONFIG_CPU_R4X00 */? The current
> state however isn't that fine: running uncached is no fun:-(

Okay, stupid idea. All these flush functions seem to be never called in
parallel or recursive, so if might be possible to have a global flags
variable and instead of always calling __save..() and __restore..(),
we bulid a pair of inline functions doing this. This wouldn't give
any penalty for !CONFIG_CPU_R4X00 and doesn't obscure the code so much
as all those #ifdef and #endif's would do... I'll test my suggestion
as fast as I reach my Indy again (is powered down at home...).

#ifdef CONFIG_CPU_R4X00
long buggy_r4600_flags;
#endif /* CONFIG_CPU_R4X00 */


static inline void
r4600_bug_start()
{
#ifdef CONFIG_CPU_R4x00
        __save_and_cli(buggy_r4600_flags);
#endif /* CONFIG_CPU_R4x00 */
        return;
}

static inline void
r4600_bug_finish()
{
#ifdef CONFIG_CPU_R4x00
        __restore_flags(buggy_r4600_flags);
#endif /* CONFIG_CPU_R4x00 */
        return;
}

MfG, JBG

-- 
Jan-Benedict Glaw   .   jbglaw@lug-owl.de   .   +49-172-7608481
         -- New APT-Proxy written in shell script --
           http://lug-owl.de/~jbglaw/software/ap2/

Attachment: pgpPmR8zQoisa.pgp
Description: PGP signature

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