linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: ARM big-endian on current kernels for linux-3.8
Date: Wed, 13 Feb 2013 15:52:20 +0000	[thread overview]
Message-ID: <20130213155220.GC12685@arm.com> (raw)
In-Reply-To: <511B768B.7000302@codethink.co.uk>

On Wed, Feb 13, 2013 at 11:18:35AM +0000, Ben Dooks wrote:
> On 13/02/13 10:24, Matthieu CASTET wrote:
> > Ben Dooks a ?crit :
> >> On 12/02/13 17:13, Russell King - ARM Linux wrote:
> >>> On Fri, Feb 08, 2013 at 11:17:30PM +0000, Ben Dooks wrote:
> >>>> I have been working on getting big-endian kernels working, mainly from
> >>>> little-endian boot envrionments. The following patch series is what I
> >>>> have been working on, mainly on the highbank and axp systems.
> >>> What is missing from this is the justification about why we need this
> >>> additional pain, given that all the supporting userspaces today are all
> >>> LE based.
> >>>
> >>> Sure, I know that telcos have an endless love of big endian and don't
> >>> understand anything else, but getting this working on non-telco socs
> >>> seems to be a little odd.
> >>
> >> Our problem is we have some code that works on a lot of big endian data
> >> but is not easy to re-build to work on ARM little endian. The current
> >> solution is to change to running the system big endian.
> >>
> >> Unfortunately we cannot just run user-space big endian as the MMU is
> >> fetched in the same endian mode as the processor's data.
> >>
> > Which architecture are you using ?
> >
> > On armv7 the mmu endian mode is selected by SCTLR.EE [1], but userspace can
> > change it's endian with setend instruction [2].
> >
> > As the endian state is stored in cpsr, it should be preserved across context switch.
> 
> Ah yes, I got confused as there is also an endian mode for the page
> tables that needs to match the endian mode that the kernel is doing
> loads/stores in.
> 
> However if we had BE userland with LE kernel then things are going to
> get difficult with a BE<>LE syscall issue.

I had an (insane) idea once but no time to pursue. You can enable the
'compat' layer for a 32-bit ARM kernel and define all the compat_* types
to be the same as the native ones. The compat layer has several handlers
for syscalls which pretty much do the conversion between compat and
native structures. The compat structures are read/written from/to user
using get_user/put_user on each member. You then need change the ARM
get_user/put_user code to test a new TIF_BE flag and do a 'rev' on the
data. At this point the native kernel structures would have the correct
little endianness.

I reckon the above would cover 70-80% of the syscalls. You need to chase
other syscalls and update the binfmt_elf.c to cope with BE ELF files.
Probably there are other issues as well.

-- 
Catalin

  reply	other threads:[~2013-02-13 15:52 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-08 23:17 ARM big-endian on current kernels for linux-3.8 Ben Dooks
2013-02-08 23:17 ` [PATCH 01/17] ARM: add CPU_BE8_BOOT_LE configuration Ben Dooks
2013-02-09  4:10   ` Nicolas Pitre
2013-02-09 16:46     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 02/17] ARM: set BE8 if LE in head code Ben Dooks
2013-02-09  3:33   ` Nicolas Pitre
2013-02-09 16:47     ` Ben Dooks
2013-02-09 21:38   ` Rob Herring
2013-02-09 21:56     ` Ben Dooks
2013-02-11 19:35     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 03/17] ARM: fix ARCH_IXP4xx usage of ARCH_SUPPORTS_BIG_ENDIAN Ben Dooks
2013-02-08 23:17 ` [PATCH 04/17] ARM: Add ARCH_SUPPORTS_BIG_ENDIAN Ben Dooks
2013-02-09 11:55   ` Russell King - ARM Linux
2013-02-09 16:55     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 05/17] ARM: fixup_pv_table bug when CPU_ENDIAN_BE8 Ben Dooks
2013-02-09  3:40   ` Nicolas Pitre
2013-02-11 19:11     ` Ben Dooks
2013-02-12 21:45       ` Nicolas Pitre
2013-02-08 23:17 ` [PATCH 06/17] ARM: fixup head for atag verification Ben Dooks
2013-02-09  3:51   ` Nicolas Pitre
2013-02-09 17:09     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 07/17] ARM: twd: data endian fix Ben Dooks
2013-02-08 23:17 ` [PATCH 08/17] ARM: smp_scu: data endian fixes Ben Dooks
2013-02-08 23:17 ` [PATCH 09/17] ARM: add atag32_to_cpu() function Ben Dooks
2013-02-09  3:57   ` Nicolas Pitre
2013-02-09 12:03   ` Russell King - ARM Linux
2013-02-11 19:15     ` Ben Dooks
2013-02-11 19:30       ` Russell King - ARM Linux
2013-02-12 18:46       ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-12 20:34         ` Russell King - ARM Linux
2013-02-08 23:17 ` [PATCH 10/17] ARM: update atag-to-fdt code to be endian agnostic Ben Dooks
2013-02-09  3:57   ` Nicolas Pitre
2013-02-09 12:05   ` Russell King - ARM Linux
2013-02-11 19:16     ` Ben Dooks
2013-02-12 21:53       ` Nicolas Pitre
2013-02-13 11:27         ` Ben Dooks
2013-02-14  4:43           ` Nicolas Pitre
2013-02-15 11:28             ` Ben Dooks
2013-02-08 23:17 ` [PATCH 11/17] ARM: fixup atags " Ben Dooks
2013-02-09  4:03   ` Nicolas Pitre
2013-02-09 12:06   ` Russell King - ARM Linux
2013-02-08 23:17 ` [PATCH 12/17] ARM: fix magic for bootloader in BE8 Ben Dooks
2013-02-09  4:06   ` Nicolas Pitre
2013-02-09 12:08     ` Russell King - ARM Linux
2013-02-12 18:50       ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-12 18:54         ` Ben Dooks
2013-02-12 19:52           ` Jean-Christophe PLAGNIOL-VILLARD
2013-02-11 19:17     ` Ben Dooks
2013-02-12 21:57       ` Nicolas Pitre
2013-02-08 23:17 ` [PATCH 13/17] ARM: pl01x debug code endian fix Ben Dooks
2013-02-09 12:09   ` Russell King - ARM Linux
2013-02-11 19:19     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 14/17] highbank: enable big-endian Ben Dooks
2013-02-09 21:33   ` Rob Herring
2013-02-09 22:00     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 15/17] xgmac: fix printing of hardware version Ben Dooks
2013-02-09 12:10   ` Russell King - ARM Linux
2013-02-09 17:20     ` Ben Dooks
2013-02-09 21:35   ` Rob Herring
2013-02-08 23:17 ` [PATCH 16/17] xgmac: replace __raw with relaxed IO Ben Dooks
2013-02-09 20:59   ` Rob Herring
2013-02-09 22:03     ` Ben Dooks
2013-02-08 23:17 ` [PATCH 17/17] mvebu: support running big-endian Ben Dooks
2013-02-12 17:08 ` ARM big-endian on current kernels for linux-3.8 Thomas Petazzoni
2013-02-12 17:25   ` Ben Dooks
2013-02-12 18:49     ` Thomas Petazzoni
2013-02-12 18:54       ` Ben Dooks
2013-02-13  9:48     ` Thomas Petazzoni
2013-02-12 17:13 ` Russell King - ARM Linux
2013-02-12 17:33   ` Ben Dooks
2013-02-12 22:13     ` Nicolas Pitre
2013-02-13 11:00       ` Ben Dooks
2013-02-13 10:24     ` Matthieu CASTET
2013-02-13 11:18       ` Ben Dooks
2013-02-13 15:52         ` Catalin Marinas [this message]
2013-02-13 16:02           ` Ben Dooks
2013-02-13 16:03           ` Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130213155220.GC12685@arm.com \
    --to=catalin.marinas@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).