Skip to contentSkip to conversation

FAILED: patch "[PATCH] parisc: Fix double-word compare and exchange in LWS code on" failed to apply to 3.18-stable tree

PATCH [email protected] 2 participants 3 messages Oct 23, 2017 – Oct 24, 2017

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 3.18-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 374b3bf8e8b519f61eb9775888074c6e46b3bf0c Mon Sep 17 00:00:00 2001

From: John David Anglin <[email protected]>
Date: Sat, 30 Sep 2017 17:24:23 -0400
Subject: [PATCH] parisc: Fix double-word compare and exchange in LWS code on
32-bit kernels

As discussed on the debian-hppa list, double-wordcompare and exchange operations fail on 32-bit kernels. Looking at the code, I realized that the ",ma" completer does the wrong thing in the "ldw,ma 4(%r26), %r29" instruction. This increments %r26 and causes the following store to write to the wrong location.

Note by Helge Deller:
The patch applies cleanly to stable kernel series if this upstream commit is merged in advance:
f4125cfdb300 ("parisc: Avoid trashing sr2 and sr3 in LWS code").

Fixes 89206491201c ("parisc: Implement new LWS CAS supporting 64 bit operations.")
arch/parisc/kernel/syscall.S +3 -3
index 23de307c3052..41e60a9c7db2 100644
@@ -742,7 +742,7 @@ lws_compare_and_swap_2:
 10:	ldd	0(%r25), %r25
 11:	ldd	0(%r24), %r24
 #else
-	/* Load new value into r22/r23 - high/low */
+	/* Load old value into r22/r23 - high/low */
 10:	ldw	0(%r25), %r22
 11:	ldw	4(%r25), %r23
 	/* Load new value into fr4 for atomic store later */
@@ -834,11 +834,11 @@ cas2_action:
 	copy	%r0, %r28
 #else
 	/* Compare first word */
-19:	ldw,ma	0(%r26), %r29
+19:	ldw	0(%r26), %r29
 	sub,=	%r29, %r22, %r0
 	b,n	cas2_end
 	/* Compare second word */
-20:	ldw,ma	4(%r26), %r29
+20:	ldw	4(%r26), %r29
 	sub,=	%r29, %r23, %r0
 	b,n	cas2_end
 	/* Perform the store */
maintainer
#1 lore raw

Hi Greg,

Quoted 4 lines · On 23.10.2017 14:47, [email protected] wrote:

The patch below does not apply to the 3.18-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]>.

Please pull in this trivial commit first:
f4125cfdb300 ("parisc: Avoid trashing sr2 and sr3 in LWS code").

Then this patch here applies cleanly.

Thanks,
Helge

Quoted 58 lines

thanks,

greg k-h

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

From 374b3bf8e8b519f61eb9775888074c6e46b3bf0c Mon Sep 17 00:00:00 2001
From: John David Anglin <[email protected]>
Date: Sat, 30 Sep 2017 17:24:23 -0400
Subject: [PATCH] parisc: Fix double-word compare and exchange in LWS code on
32-bit kernels

As discussed on the debian-hppa list, double-wordcompare and exchange operations fail on 32-bit kernels. Looking at the code, I realized that the ",ma" completer does the wrong thing in the "ldw,ma 4(%r26), %r29" instruction. This increments %r26 and causes the following store to write to the wrong location.

Note by Helge Deller:
The patch applies cleanly to stable kernel series if this upstream commit is merged in advance:
f4125cfdb300 ("parisc: Avoid trashing sr2 and sr3 in LWS code").

Fixes 89206491201c ("parisc: Implement new LWS CAS supporting 64 bit operations.")
arch/parisc/kernel/syscall.S +3 -3
index 23de307c3052..41e60a9c7db2 100644
@@ -742,7 +742,7 @@ lws_compare_and_swap_2:
  10:	ldd	0(%r25), %r25
  11:	ldd	0(%r24), %r24
  #else
-	/* Load new value into r22/r23 - high/low */
+	/* Load old value into r22/r23 - high/low */
  10:	ldw	0(%r25), %r22
  11:	ldw	4(%r25), %r23
  	/* Load new value into fr4 for atomic store later */
@@ -834,11 +834,11 @@ cas2_action:
  	copy	%r0, %r28
  #else
  	/* Compare first word */
-19:	ldw,ma	0(%r26), %r29
+19:	ldw	0(%r26), %r29
  	sub,=	%r29, %r22, %r0
  	b,n	cas2_end
  	/* Compare second word */
-20:	ldw,ma	4(%r26), %r29
+20:	ldw	4(%r26), %r29
  	sub,=	%r29, %r23, %r0
  	b,n	cas2_end
  	/* Perform the store */
author maintainer
#2 lore raw
Quoted 8 lines · Helge Deller

Hi Greg,

Quoted 4 lines · On 23.10.2017 14:47, [email protected] wrote:

The patch below does not apply to the 3.18-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]>.

Quoted 4 lines

Please pull in this trivial commit first:
f4125cfdb300 ("parisc: Avoid trashing sr2 and sr3 in LWS code").

Then this patch here applies cleanly.

Ah, thanks, now done for 4.4 as well.

greg k-h