* [PATCH for 3.10-rc] ARM: mvebu: Fix bug in coherency fabric low level init function @ 2013-05-23 8:54 Gregory CLEMENT 2013-05-23 8:54 ` [PATCH] " Gregory CLEMENT 0 siblings, 1 reply; 4+ messages in thread From: Gregory CLEMENT @ 2013-05-23 8:54 UTC (permalink / raw) To: linux-arm-kernel Hello Jason and Andrew, This a new fix for 3.10-rc coming from Marvell. I wasn't impacted (until now) by the bug fixed by this commit, but I trust Nadav with his patch, and I didn't see any flaw in his code. Furthermore, I applied and tested it and saw no regression. So please applied it for 3.10-rc and we can also consider to applied it to 3.8 and 3.9. Thanks Nadav Haklai (1): ARM: mvebu: Fix bug in coherency fabric low level init function arch/arm/mach-mvebu/coherency_ll.S | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) -- 1.8.1.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] ARM: mvebu: Fix bug in coherency fabric low level init function 2013-05-23 8:54 [PATCH for 3.10-rc] ARM: mvebu: Fix bug in coherency fabric low level init function Gregory CLEMENT @ 2013-05-23 8:54 ` Gregory CLEMENT 2013-05-23 17:42 ` Jason Cooper 2013-05-23 18:15 ` Willy Tarreau 0 siblings, 2 replies; 4+ messages in thread From: Gregory CLEMENT @ 2013-05-23 8:54 UTC (permalink / raw) To: linux-arm-kernel From: Nadav Haklai <nadavh@marvell.com> When adding CPU to the SMP group and enabling the coherency on this CPU we must protect the register access. The previous implementation claims to be atomic but doesn't provide any protection against parallel access to the coherency fabric control and configuration registers. This patch fixes this by using the ldrex and strex mechanism. This method should be used in all accesses to those registers. [gregory.clement at free-electrons.com: fixed the commit's topic] Signed-off-by: Nadav Haklai <nadavh@marvell.com> Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> --- arch/arm/mach-mvebu/coherency_ll.S | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/arch/arm/mach-mvebu/coherency_ll.S b/arch/arm/mach-mvebu/coherency_ll.S index 53e8391..5476669 100644 --- a/arch/arm/mach-mvebu/coherency_ll.S +++ b/arch/arm/mach-mvebu/coherency_ll.S @@ -32,15 +32,21 @@ ENTRY(ll_set_cpu_coherent) /* Add CPU to SMP group - Atomic */ add r3, r0, #ARMADA_XP_CFB_CTL_REG_OFFSET - ldr r2, [r3] +1: + ldrex r2, [r3] orr r2, r2, r1 - str r2, [r3] + strex r0, r2, [r3] + cmp r0, #0 + bne 1b /* Enable coherency on CPU - Atomic */ - add r3, r0, #ARMADA_XP_CFB_CFG_REG_OFFSET - ldr r2, [r3] + add r3, r3, #ARMADA_XP_CFB_CFG_REG_OFFSET +1: + ldrex r2, [r3] orr r2, r2, r1 - str r2, [r3] + strex r0, r2, [r3] + cmp r0, #0 + bne 1b dsb -- 1.8.1.2 ^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] ARM: mvebu: Fix bug in coherency fabric low level init function 2013-05-23 8:54 ` [PATCH] " Gregory CLEMENT @ 2013-05-23 17:42 ` Jason Cooper 2013-05-23 18:15 ` Willy Tarreau 1 sibling, 0 replies; 4+ messages in thread From: Jason Cooper @ 2013-05-23 17:42 UTC (permalink / raw) To: linux-arm-kernel On Thu, May 23, 2013 at 10:54:02AM +0200, Gregory CLEMENT wrote: > From: Nadav Haklai <nadavh@marvell.com> > > When adding CPU to the SMP group and enabling the coherency on this > CPU we must protect the register access. > The previous implementation claims to be atomic but doesn't provide > any protection against parallel access to the coherency fabric control > and configuration registers. > > This patch fixes this by using the ldrex and strex mechanism. > This method should be used in all accesses to those registers. > > [gregory.clement at free-electrons.com: fixed the commit's topic] > Signed-off-by: Nadav Haklai <nadavh@marvell.com> > Signed-off-by: Gregory CLEMENT <gregory.clement@free-electrons.com> > --- > arch/arm/mach-mvebu/coherency_ll.S | 16 +++++++++++----- > 1 file changed, 11 insertions(+), 5 deletions(-) Applied to mvebu/fixes thx, Jason. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH] ARM: mvebu: Fix bug in coherency fabric low level init function 2013-05-23 8:54 ` [PATCH] " Gregory CLEMENT 2013-05-23 17:42 ` Jason Cooper @ 2013-05-23 18:15 ` Willy Tarreau 1 sibling, 0 replies; 4+ messages in thread From: Willy Tarreau @ 2013-05-23 18:15 UTC (permalink / raw) To: linux-arm-kernel Hi Gregory, On Thu, May 23, 2013 at 10:54:02AM +0200, Gregory CLEMENT wrote: > From: Nadav Haklai <nadavh@marvell.com> > > When adding CPU to the SMP group and enabling the coherency on this > CPU we must protect the register access. > The previous implementation claims to be atomic but doesn't provide > any protection against parallel access to the coherency fabric control > and configuration registers. > > This patch fixes this by using the ldrex and strex mechanism. > This method should be used in all accesses to those registers. I don't know how to tell whether the fix works since it's unclear to me what issue it fixes, but at least I can say that it doesn't break my armada370 on 3.10-rc2 + latest fixes from your dev branch. Best regards, Willy ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2013-05-23 18:15 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-05-23 8:54 [PATCH for 3.10-rc] ARM: mvebu: Fix bug in coherency fabric low level init function Gregory CLEMENT 2013-05-23 8:54 ` [PATCH] " Gregory CLEMENT 2013-05-23 17:42 ` Jason Cooper 2013-05-23 18:15 ` Willy Tarreau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).