qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 0/6] hw/arm: Fix smpboot[] on big-endian hosts and remove tsw


From: Philippe Mathieu-Daudé
Subject: Re: [PATCH 0/6] hw/arm: Fix smpboot[] on big-endian hosts and remove tswap32()
Date: Thu, 22 Dec 2022 22:59:19 +0100
User-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.6.0

On 22/12/22 22:55, Philippe Mathieu-Daudé wrote:
ARM CPUs fetch instructions in little-endian.

smpboot[] encoded instructions are written in little-endian.

We call tswap32() on the array. tswap32 function swap a 32-bit
value if the target endianness doesn't match the host one.
Otherwise it is a NOP.

* On a little-endian host, the array is stored as it. tswap32()
   is a NOP, and the vCPU fetches the instructions as it, in
   little-endian.

* On a big-endian host, the array is stored as it. tswap32()
   swap the instructions to little-endian, and the vCPU fetches
   the instructions as it, in little-endian.

Using tswap() on system emulation is a bit odd: while the target
particularities might change the system emulation, the host ones
(such its endianness) shouldn't interfere.

We can simplify by using const_le32() to always store the
instructions in the array in little-endian, removing the need
for the dubious tswap().

Two boards which weren't swapping (aspeed and raspi) are fixed.

Tested running ARM avocado tests on x86_64 and s390x.

Philippe Mathieu-Daudé (6):
   hw/arm/aspeed: Fix smpboot[] on big-endian hosts
   hw/arm/raspi: Fix smpboot[] on big-endian hosts
   hw/arm/exynos4210: Remove tswap32() calls and constify smpboot[]
   hw/arm/npcm7xx: Remove tswap32() calls and constify smpboot[]
   hw/arm/xilinx_zynq: Remove tswap32() calls and constify smpboot[]
   hw/arm/boot: Remove tswap32() calls and constify board_setup_blob[]

  hw/arm/aspeed.c      | 28 ++++++++++++------------
  hw/arm/boot.c        | 52 +++++++++++++++++++-------------------------
  hw/arm/exynos4210.c  | 48 ++++++++++++++++++----------------------
  hw/arm/npcm7xx.c     | 49 +++++++++++++++++------------------------
  hw/arm/raspi.c       | 46 +++++++++++++++++++--------------------
  hw/arm/xilinx_zynq.c | 27 ++++++++++-------------
  6 files changed, 112 insertions(+), 138 deletions(-)

I forgot to mention, checkpatch warns for 11 lines over 80chars, and
errors for 2 over 90chars. Since these are the assembler comments,
I choose to keep it that way for readability.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]