]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
Fix sparc64 niagara optimized RAID xor asm
authorDavid Miller <davem@davemloft.net>
Tue, 23 Oct 2007 10:12:00 +0000 (03:12 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 16 Nov 2007 16:22:56 +0000 (08:22 -0800)
patch d060db63fd38a8a75f666576ef9999c28cdc31cf in mainline.

[SPARC64]: Fix register usage in xor_raid_4().

Some typos led to using %i6/%i7 instead of %l6/%l7 in loads which is
really really bad because those are the frame pointer and return PC.

Based upon a raid5 crash report by Bertrand Joel.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/sparc64/lib/xor.S

index a79c8888170d938a2d60b033b19cce5e0a214a8b..f44f58f40234c51962bd22cd15d119bcc99651b5 100644 (file)
@@ -491,12 +491,12 @@ xor_niagara_4:            /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
        ldda            [%i1 + 0x10] %asi, %i2  /* %i2/%i3 = src1 + 0x10 */
        xor             %g2, %i4, %g2
        xor             %g3, %i5, %g3
-       ldda            [%i7 + 0x10] %asi, %i4  /* %i4/%i5 = src2 + 0x10 */
+       ldda            [%l7 + 0x10] %asi, %i4  /* %i4/%i5 = src2 + 0x10 */
        xor             %l0, %g2, %l0
        xor             %l1, %g3, %l1
        stxa            %l0, [%i0 + 0x00] %asi
        stxa            %l1, [%i0 + 0x08] %asi
-       ldda            [%i6 + 0x10] %asi, %g2  /* %g2/%g3 = src3 + 0x10 */
+       ldda            [%l6 + 0x10] %asi, %g2  /* %g2/%g3 = src3 + 0x10 */
        ldda            [%i0 + 0x10] %asi, %l0  /* %l0/%l1 = dest + 0x10 */
 
        xor             %i4, %i2, %i4
@@ -504,12 +504,12 @@ xor_niagara_4:            /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
        ldda            [%i1 + 0x20] %asi, %i2  /* %i2/%i3 = src1 + 0x20 */
        xor             %g2, %i4, %g2
        xor             %g3, %i5, %g3
-       ldda            [%i7 + 0x20] %asi, %i4  /* %i4/%i5 = src2 + 0x20 */
+       ldda            [%l7 + 0x20] %asi, %i4  /* %i4/%i5 = src2 + 0x20 */
        xor             %l0, %g2, %l0
        xor             %l1, %g3, %l1
        stxa            %l0, [%i0 + 0x10] %asi
        stxa            %l1, [%i0 + 0x18] %asi
-       ldda            [%i6 + 0x20] %asi, %g2  /* %g2/%g3 = src3 + 0x20 */
+       ldda            [%l6 + 0x20] %asi, %g2  /* %g2/%g3 = src3 + 0x20 */
        ldda            [%i0 + 0x20] %asi, %l0  /* %l0/%l1 = dest + 0x20 */
 
        xor             %i4, %i2, %i4
@@ -517,12 +517,12 @@ xor_niagara_4:            /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
        ldda            [%i1 + 0x30] %asi, %i2  /* %i2/%i3 = src1 + 0x30 */
        xor             %g2, %i4, %g2
        xor             %g3, %i5, %g3
-       ldda            [%i7 + 0x30] %asi, %i4  /* %i4/%i5 = src2 + 0x30 */
+       ldda            [%l7 + 0x30] %asi, %i4  /* %i4/%i5 = src2 + 0x30 */
        xor             %l0, %g2, %l0
        xor             %l1, %g3, %l1
        stxa            %l0, [%i0 + 0x20] %asi
        stxa            %l1, [%i0 + 0x28] %asi
-       ldda            [%i6 + 0x30] %asi, %g2  /* %g2/%g3 = src3 + 0x30 */
+       ldda            [%l6 + 0x30] %asi, %g2  /* %g2/%g3 = src3 + 0x30 */
        ldda            [%i0 + 0x30] %asi, %l0  /* %l0/%l1 = dest + 0x30 */
 
        prefetch        [%i1 + 0x40], #one_read