linux-mips
[Top] [All Lists]

Re: mips64 LOAD_KPTE2 fix

To: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>
Subject: Re: mips64 LOAD_KPTE2 fix
From: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Date: Tue, 3 Jun 2003 14:58:44 +0200 (MET DST)
Cc: anemo@mba.ocn.ne.jp, linux-mips@linux-mips.org, ralf@linux-mips.org
In-reply-to: <20030602.202345.08315331.nemoto@toshiba-tops.co.jp>
Organization: Technical University of Gdansk
Original-recipient: rfc822;linux-mips@linux-mips.org
Reply-to: "Maciej W. Rozycki" <macro@ds2.pg.gda.pl>
Sender: linux-mips-bounce@linux-mips.org
On Mon, 2 Jun 2003, Atsushi Nemoto wrote:

> Please ignore it.  I missed an another fix.  The beqz lacks delay
> slot.  Here is a new patch.
> 
> diff -u linux-mips-cvs/arch/mips64/mm/tlbex-r4k.S 
> linux.new/arch/mips64/mm/tlbex-r4k.S
> --- linux-mips-cvs/arch/mips64/mm/tlbex-r4k.S Mon Apr 28 09:44:54 2003
> +++ linux.new/arch/mips64/mm/tlbex-r4k.S      Mon Jun  2 20:16:41 2003
> @@ -72,9 +72,12 @@
>       /*
>        * Determine that fault address is within vmalloc range.
>        */
> +     bgez    \ptr, \not_vmalloc              # check overflow
> +     nop
>       dla     \tmp, ekptbl
>       sltu    \tmp, \ptr, \tmp
>       beqz    \tmp, \not_vmalloc              # not vmalloc
> +     nop
>       .endm

 The missing delay slot filler might be called a feature, but LOAD_KPTE2
is so far always used near such code it cannot be avoided.  So the "nop"
is correct.  Please pay attention to proper indentation of instructions in
branch delay slots -- this helps avoiding such errors.

 I don't think a separate overflow check is needed, even I see how the
code can fail for large offsets into XKSEG.  How about this patch?  Does
it work for you?  It would not incur unnecessary overhead.

  Maciej

-- 
+  Maciej W. Rozycki, Technical University of Gdansk, Poland   +
+--------------------------------------------------------------+
+        e-mail: macro@ds2.pg.gda.pl, PGP key available        +

patch-mips-2.4.21-pre4-20030505-load_kpte2-0
diff -up --recursive --new-file 
linux-mips-2.4.21-pre4-20030505.macro/arch/mips64/mm/tlbex-r4k.S 
linux-mips-2.4.21-pre4-20030505/arch/mips64/mm/tlbex-r4k.S
--- linux-mips-2.4.21-pre4-20030505.macro/arch/mips64/mm/tlbex-r4k.S    
2003-04-27 02:56:39.000000000 +0000
+++ linux-mips-2.4.21-pre4-20030505/arch/mips64/mm/tlbex-r4k.S  2003-06-03 
12:54:41.000000000 +0000
@@ -73,8 +73,9 @@
         * Determine that fault address is within vmalloc range.
         */
        dla     \tmp, ekptbl
-       sltu    \tmp, \ptr, \tmp
+       slt     \tmp, \ptr, \tmp
        beqz    \tmp, \not_vmalloc              # not vmalloc
+        nop
        .endm
 
 


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