Skip to contentSkip to conversation

FAILED: patch "[PATCH] powerpc/32: Fix again csum_partial_copy_generic()" failed to apply to 4.7-stable tree

PATCH [email protected] 2 participants 4 messages Sep 22, 2016

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

Quoted 1 line

From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001

From: Christophe Leroy <[email protected]>
Date: Fri, 26 Aug 2016 16:45:13 +0200
Subject: [PATCH] powerpc/32: Fix again csum_partial_copy_generic()

Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()") introduced a bug when destination address is odd and len is lower than cacheline size.

In that case the resulting csum value doesn't have to be rotated one byte because the cache-aligned copy part is skipped so no alignment is performed.

Fixes 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
arch/powerpc/lib/checksum_32.S +4 -3
index 0a57fe6d49cc..aa8214f30c92 100644
@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
 	stw	r7,12(r1)
 	stw	r8,8(r1)
 
-	rlwinm	r0,r4,3,0x8
-	rlwnm	r6,r6,r0,0,31	/* odd destination address: rotate one byte */
-	cmplwi	cr7,r0,0	/* is destination address even ? */
 	addic	r12,r6,0
 	addi	r6,r4,-4
 	neg	r0,r4
 	addi	r4,r3,-4
 	andi.	r0,r0,CACHELINE_MASK	/* # bytes to start of cache line */
+	crset	4*cr7+eq
 	beq	58f
 
 	cmplw	0,r5,r0			/* is this more than total to do? */
 	blt	63f			/* if not much to do */
+	rlwinm	r7,r6,3,0x8
+	rlwnm	r12,r12,r7,0,31	/* odd destination address: rotate one byte */
+	cmplwi	cr7,r7,0	/* is destination address even ? */
 	andi.	r8,r0,3			/* get it word-aligned first */
 	mtctr	r8
 	beq+	61f
#1 lore raw

Hi Greg,

The reason it doesn't apply is probably that it first requires commit 1bc8b816cb8058c31f61fe78442f10a43209e582 ("powerpc/32: Fix csum_partial_copy_generic()")

Thanks,
Christophe

Le 22/09/2016 � 14:45, [email protected] a �crit :

Quoted 60 lines

The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001
From: Christophe Leroy <[email protected]>
Date: Fri, 26 Aug 2016 16:45:13 +0200
Subject: [PATCH] powerpc/32: Fix again csum_partial_copy_generic()

Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()") introduced a bug when destination address is odd and len is lower than cacheline size.

In that case the resulting csum value doesn't have to be rotated one byte because the cache-aligned copy part is skipped so no alignment is performed.

Fixes 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()")
arch/powerpc/lib/checksum_32.S +4 -3
index 0a57fe6d49cc..aa8214f30c92 100644
@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
 	stw	r7,12(r1)
 	stw	r8,8(r1)
 
-	rlwinm	r0,r4,3,0x8
-	rlwnm	r6,r6,r0,0,31	/* odd destination address: rotate one byte */
-	cmplwi	cr7,r0,0	/* is destination address even ? */
 	addic	r12,r6,0
 	addi	r6,r4,-4
 	neg	r0,r4
 	addi	r4,r3,-4
 	andi.	r0,r0,CACHELINE_MASK	/* # bytes to start of cache line */
+	crset	4*cr7+eq
 	beq	58f
 
 	cmplw	0,r5,r0			/* is this more than total to do? */
 	blt	63f			/* if not much to do */
+	rlwinm	r7,r6,3,0x8
+	rlwnm	r12,r12,r7,0,31	/* odd destination address: rotate one byte */
+	cmplwi	cr7,r7,0	/* is destination address even ? */
 	andi.	r8,r0,3			/* get it word-aligned first */
 	mtctr	r8
 	beq+	61f
#2 lore raw

Hi again Greg,

I confirm as shown below, it works as soon as you apply both patches:

[root@localhost linux-next]# git checkout v4.7 Extraction des fichiers: 100% (15698/15698), fait.
Note: checking out 'v4.7'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may do so (now or later) by using -b with the checkout command again. Example:

git checkout -b new_branch_name

HEAD est maintenant sur 523d939... Linux 4.7
[root@localhost linux-next]# git cherry-pick 1bc8b816cb8058c31f61fe78442f10a43209e582 [HEAD d�tach�e 0b55e54] powerpc/32: Fix csum_partial_copy_generic()
Date: Tue Aug 2 10:07:05 2016 +0200

 1 file changed, 4 insertions(+), 3 deletions(-)
[root@localhost linux-next]# git cherry-pick 8540571e01f973d321b0821f4f32ed6e9ae8263c
[HEAD d�tach�e 8707ecd] powerpc/32: Fix again csum_partial_copy_generic()
 Date: Fri Aug 26 16:45:13 2016 +0200
 1 file changed, 4 insertions(+), 3 deletions(-)

[root@localhost linux-next]#

Christophe

Le 22/09/2016 � 15:03, Christophe Leroy a �crit :

Quoted 75 lines

Hi Greg,

The reason it doesn't apply is probably that it first requires commit 1bc8b816cb8058c31f61fe78442f10a43209e582 ("powerpc/32: Fix csum_partial_copy_generic()")

Thanks,
Christophe

Le 22/09/2016 � 14:45, [email protected] a �crit :

Quoted 65 lines

The patch below does not apply to the 4.7-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 8540571e01f973d321b0821f4f32ed6e9ae8263c Mon Sep 17 00:00:00 2001
From: Christophe Leroy <[email protected]>
Date: Fri, 26 Aug 2016 16:45:13 +0200
Subject: [PATCH] powerpc/32: Fix again csum_partial_copy_generic()

Commit 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic() based on copy_tofrom_user()") introduced a bug when destination address is odd and len is lower than cacheline size.

In that case the resulting csum value doesn't have to be rotated one byte because the cache-aligned copy part is skipped so no alignment is performed.

Fixes 7aef4136566b0 ("powerpc32: rewrite csum_partial_copy_generic()

based on copy_tofrom_user()")

arch/powerpc/lib/checksum_32.S +0 -2
index 0a57fe6d49cc..aa8214f30c92 100644
@@ -127,18 +127,19 @@ _GLOBAL(csum_partial_copy_generic)
     stw    r7,12(r1)
     stw    r8,8(r1)
 
-    rlwinm    r0,r4,3,0x8
-    rlwnm    r6,r6,r0,0,31    /* odd destination address: rotate one

byte */
- cmplwi cr7,r0,0 /* is destination address even ? */

     addic    r12,r6,0
     addi    r6,r4,-4
     neg    r0,r4
     addi    r4,r3,-4
     andi.    r0,r0,CACHELINE_MASK    /* # bytes to start of cache

line */

arch/powerpc/lib/checksum_32.S +3 -0
+    crset    4*cr7+eq
     beq    58f
 
     cmplw    0,r5,r0            /* is this more than total to do? */
     blt    63f            /* if not much to do */
+    rlwinm    r7,r6,3,0x8
+    rlwnm    r12,r12,r7,0,31    /* odd destination address: rotate

one byte */
+ cmplwi cr7,r7,0 /* is destination address even ? */
andi. r8,r0,3 /* get it word-aligned first */
mtctr r8
beq+ 61f

author maintainer
#3 lore raw
In reply to Christophe Leroy
Quoted 5 lines · Christophe Leroy

Hi Greg,

The reason it doesn't apply is probably that it first requires commit 1bc8b816cb8058c31f61fe78442f10a43209e582 ("powerpc/32: Fix csum_partial_copy_generic()")

Thanks, that worked.

greg k-h