* v3.8-rc issues with big endian @ 2013-02-09 23:15 Ben Dooks 2013-02-09 23:15 ` [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with new macro Ben Dooks ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: Ben Dooks @ 2013-02-09 23:15 UTC (permalink / raw) To: linux-arm-kernel Whilst debugging with big endian ARM on v3.8-rc I came across a problem with the new ASID code (commit b5466f8728527a05a493cc4abe9e6f034a1bbaab) which is causing issues with user-land failing to work. Since the new ASID code is using 64-bit accesses, the ASID ID is now being placed in context->id + 4, which means that the assembly mm code no-longer works. I also noticed and fixed a couple of places where the new mmid macro was not being used, so fixed those too. Tested on a highbank system. [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with new macro 2013-02-09 23:15 v3.8-rc issues with big endian Ben Dooks @ 2013-02-09 23:15 ` Ben Dooks 2013-02-09 23:15 ` [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian Ben Dooks 2013-02-11 4:35 ` v3.8-rc issues with big endian Nicolas Pitre 2 siblings, 0 replies; 7+ messages in thread From: Ben Dooks @ 2013-02-09 23:15 UTC (permalink / raw) To: linux-arm-kernel The mmid macro is meant to be used to get the mm->context.id data from the mm structure, but it seems to have been missed in a cuple of files. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> --- arch/arm/mm/proc-v6.S | 2 +- arch/arm/mm/proc-v7-2level.S | 2 +- arch/arm/mm/proc-v7-3level.S | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 09c5233..bcaaa8d 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S @@ -101,7 +101,7 @@ ENTRY(cpu_v6_dcache_clean_area) ENTRY(cpu_v6_switch_mm) #ifdef CONFIG_MMU mov r2, #0 - ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id + mmid r1, r1 @ get mm->context.id ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) ALT_UP(orr r0, r0, #TTB_FLAGS_UP) mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S index 6d98c13..78f520b 100644 --- a/arch/arm/mm/proc-v7-2level.S +++ b/arch/arm/mm/proc-v7-2level.S @@ -40,7 +40,7 @@ ENTRY(cpu_v7_switch_mm) #ifdef CONFIG_MMU mov r2, #0 - ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id + mmid r1, r1 @ get mm->context.id ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) ALT_UP(orr r0, r0, #TTB_FLAGS_UP) #ifdef CONFIG_ARM_ERRATA_430973 diff --git a/arch/arm/mm/proc-v7-3level.S b/arch/arm/mm/proc-v7-3level.S index 7b56386..50bf1da 100644 --- a/arch/arm/mm/proc-v7-3level.S +++ b/arch/arm/mm/proc-v7-3level.S @@ -47,7 +47,7 @@ */ ENTRY(cpu_v7_switch_mm) #ifdef CONFIG_MMU - ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id + mmid r1, r1 @ get mm->context.id and r3, r1, #0xff mov r3, r3, lsl #(48 - 32) @ ASID mcrr p15, 0, r0, r3, c2 @ set TTB 0 -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian 2013-02-09 23:15 v3.8-rc issues with big endian Ben Dooks 2013-02-09 23:15 ` [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with new macro Ben Dooks @ 2013-02-09 23:15 ` Ben Dooks 2013-02-10 1:10 ` Ben Dooks 2013-02-10 14:14 ` Sergei Shtylyov 2013-02-11 4:35 ` v3.8-rc issues with big endian Nicolas Pitre 2 siblings, 2 replies; 7+ messages in thread From: Ben Dooks @ 2013-02-09 23:15 UTC (permalink / raw) To: linux-arm-kernel Since the new ASID code introduced in b5466f8728527a05a493cc4abe9e6f034a1bbaab uses 64bit operations, when running in BE mode we see the values in mm->context.id swapped around as the lowest word is being stored in mm->context.id + 4, instead of + 0. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> --- arch/arm/mm/proc-macros.S | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S index eb6aa73..5a6a347 100644 --- a/arch/arm/mm/proc-macros.S +++ b/arch/arm/mm/proc-macros.S @@ -40,7 +40,11 @@ * mmid - get context id from mm pointer (mm->context.id) */ .macro mmid, rd, rn +#ifdef __ARMEB__ + ldr \rd, [\rn, #MM_CONTEXT_ID + 4 ] +#else ldr \rd, [\rn, #MM_CONTEXT_ID] +#endif .endm /* -- 1.7.10.4 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian 2013-02-09 23:15 ` [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian Ben Dooks @ 2013-02-10 1:10 ` Ben Dooks 2013-02-10 14:14 ` Sergei Shtylyov 1 sibling, 0 replies; 7+ messages in thread From: Ben Dooks @ 2013-02-10 1:10 UTC (permalink / raw) To: linux-arm-kernel On 09/02/2013 23:15, Ben Dooks wrote: > Since the new ASID code introduced in > b5466f8728527a05a493cc4abe9e6f034a1bbaab > uses 64bit operations, when running in BE mode we see the values in > mm->context.id swapped around as the lowest word is being stored in > mm->context.id + 4, instead of + 0. The one thing I have just realised with this is that we are no-longer going to be storing the mm->context.id data in the sat was a pre the ASID changes, which could confuse debuggers which assume they can read the data. Should we fix this the easy way below, or go and change the code in arch/arm/mm/context.c to deal with re-arranging the atomic64 accesses when in big-endian mode? > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> > --- > arch/arm/mm/proc-macros.S | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S > index eb6aa73..5a6a347 100644 > --- a/arch/arm/mm/proc-macros.S > +++ b/arch/arm/mm/proc-macros.S > @@ -40,7 +40,11 @@ > * mmid - get context id from mm pointer (mm->context.id) > */ > .macro mmid, rd, rn > +#ifdef __ARMEB__ > + ldr \rd, [\rn, #MM_CONTEXT_ID + 4 ] > +#else > ldr \rd, [\rn, #MM_CONTEXT_ID] > +#endif > .endm > > /* ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian 2013-02-09 23:15 ` [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian Ben Dooks 2013-02-10 1:10 ` Ben Dooks @ 2013-02-10 14:14 ` Sergei Shtylyov 2013-02-10 14:17 ` Ben Dooks 1 sibling, 1 reply; 7+ messages in thread From: Sergei Shtylyov @ 2013-02-10 14:14 UTC (permalink / raw) To: linux-arm-kernel Hello. On 10-02-2013 3:15, Ben Dooks wrote: > Since the new ASID code introduced in b5466f8728527a05a493cc4abe9e6f034a1bbaab Plase also specify that commit's summary in parens (or however you like). > uses 64bit operations, when running in BE mode we see the values in > mm->context.id swapped around as the lowest word is being stored in > mm->context.id + 4, instead of + 0. > Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> WBR, Sergei ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian 2013-02-10 14:14 ` Sergei Shtylyov @ 2013-02-10 14:17 ` Ben Dooks 0 siblings, 0 replies; 7+ messages in thread From: Ben Dooks @ 2013-02-10 14:17 UTC (permalink / raw) To: linux-arm-kernel On 10/02/2013 14:14, Sergei Shtylyov wrote: > Hello. > > On 10-02-2013 3:15, Ben Dooks wrote: > >> Since the new ASID code introduced in >> b5466f8728527a05a493cc4abe9e6f034a1bbaab > > Plase also specify that commit's summary in parens (or however you > like). > >> uses 64bit operations, when running in BE mode we see the values in >> mm->context.id swapped around as the lowest word is being stored in >> mm->context.id + 4, instead of + 0. > >> Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> > > WBR, Sergei Thanks, will sort that out and also take into account other feedback and put new patches out today. -- Ben ^ permalink raw reply [flat|nested] 7+ messages in thread
* v3.8-rc issues with big endian 2013-02-09 23:15 v3.8-rc issues with big endian Ben Dooks 2013-02-09 23:15 ` [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with new macro Ben Dooks 2013-02-09 23:15 ` [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian Ben Dooks @ 2013-02-11 4:35 ` Nicolas Pitre 2 siblings, 0 replies; 7+ messages in thread From: Nicolas Pitre @ 2013-02-11 4:35 UTC (permalink / raw) To: linux-arm-kernel On Sat, 9 Feb 2013, Ben Dooks wrote: > Whilst debugging with big endian ARM on v3.8-rc I came across a problem > with the new ASID code (commit b5466f8728527a05a493cc4abe9e6f034a1bbaab) > which is causing issues with user-land failing to work. > > Since the new ASID code is using 64-bit accesses, the ASID ID is now > being placed in context->id + 4, which means that the assembly mm code > no-longer works. > > I also noticed and fixed a couple of places where the new mmid macro was > not being used, so fixed those too. > > Tested on a highbank system. > > [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with > [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian For both patches: Acked-by: Nicolas Pitre <nico@linaro.org> > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel at lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel > ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2013-02-11 4:35 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-02-09 23:15 v3.8-rc issues with big endian Ben Dooks 2013-02-09 23:15 ` [PATCH 1/2] ARM: mm: replace direct access to mm->context.id with new macro Ben Dooks 2013-02-09 23:15 ` [PATCH 2/2] ARM: mm: mm->context.id fix for big-endian Ben Dooks 2013-02-10 1:10 ` Ben Dooks 2013-02-10 14:14 ` Sergei Shtylyov 2013-02-10 14:17 ` Ben Dooks 2013-02-11 4:35 ` v3.8-rc issues with big endian Nicolas Pitre
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).