[Top][All Lists]

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

Re: [Qemu-ppc] [Qemu-devel] [PULL for-2.0 2/7] raven: Implement non-cont

From: Hervé Poussineau
Subject: Re: [Qemu-ppc] [Qemu-devel] [PULL for-2.0 2/7] raven: Implement non-contiguous I/O region
Date: Sat, 05 Apr 2014 22:26:44 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20131103 Icedove/17.0.10

Hi Andreas,

Le sam. 05 avril 2014 17:41:43 CEST, Andreas Färber a écrit :
Hi Hervé,

Am 20.03.2014 00:36, schrieb Andreas Färber:
From: Hervé Poussineau <address@hidden>

Remove now duplicated code from prep board.

Signed-off-by: Hervé Poussineau <address@hidden>
Signed-off-by: Andreas Färber <address@hidden>
  hw/pci-host/prep.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++
  hw/ppc/prep.c      | 94 ++----------------------------------------------------
  2 files changed, 88 insertions(+), 91 deletions(-)

I'm facing endianness-test failures in -rc1 on both openSUSE ppc/ppc64
and OSX ppc64 (below) as well as "broken pipe" on OSX ppc.

$ make check-qtest-ppc V=1
   /ppc/endianness/prep:                                              **
assertion failed (isa_inw(test, 0xe2) == 0x8765): (0x00004321 == 0x00008765)
   /ppc/endianness/split/prep:                                        **
assertion failed (isa_inw(test, 0xe2) == 0x8765): (0x00004321 == 0x00008765)
   /ppc/endianness/combine/prep:                                      **
assertion failed (isa_inw(test, 0xea) == 0x8765): (0x00004321 == 0x00008765)
FAIL: tests/endianness-test

On x86 everything is fine. git-bisect points to this commit.

There is one "FIXME: handle endianness switch" in here, but I don't spot
such code where it's being moved from either.

My suspect is the cpu_inw() -> ldl_p() change, but I'm unsure whether
the code or the test is wrong...

Code removed in this commit was using DEVICE_NATIVE_ENDIAN, and then using cpu_inl, which does a ldl_p. Code added in this commit is using DEVICE_LITTLE_ENDIAN, and then is using ldl_p. So, yes, it seems that endianness of memory region does change things. Native endian means native endian of the guest of of the host?

I also checked tests/endianness-test.c.
The failing test is:
   isa_outl(test, 0xe0, 0x87654321);
   g_assert_cmphex(isa_inl(test, 0xe0), ==, 0x87654321);
   g_assert_cmphex(isa_inw(test, 0xe2), ==, 0x8765);
   g_assert_cmphex(isa_inw(test, 0xe0), ==, 0x4321);
which seems perfectly valid as ISA is little-endian.

However, PReP is marked as bswap= true in this file, which means that values are inverted before writing and after reading them. Paolo, what does it mean? It is supposed to be true for big endian machines, and false for little endian machines ?


reply via email to

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