[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 27/28] memory: check memory region endianness, not t
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 27/28] memory: check memory region endianness, not target's |
Date: |
Mon, 22 Jul 2013 15:54:37 +0200 |
When combining multiple accesses into a single value, we need to do so
in the device's desired endianness. The target endianness does not have
any influence.
Signed-off-by: Paolo Bonzini <address@hidden>
---
memory.c | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/memory.c b/memory.c
index 77a34dd..b9139c5 100644
--- a/memory.c
+++ b/memory.c
@@ -339,6 +339,15 @@ static void flatview_simplify(FlatView *view)
}
}
+static bool memory_region_big_endian(MemoryRegion *mr)
+{
+#ifdef TARGET_WORDS_BIGENDIAN
+ return mr->ops->endianness != DEVICE_LITTLE_ENDIAN;
+#else
+ return mr->ops->endianness == DEVICE_BIG_ENDIAN;
+#endif
+}
+
static bool memory_region_wrong_endianness(MemoryRegion *mr)
{
#ifdef TARGET_WORDS_BIGENDIAN
@@ -454,13 +463,15 @@ static void access_with_adjusted_size(hwaddr addr,
/* FIXME: support unaligned access? */
access_size = MAX(MIN(size, access_size_max), access_size_min);
access_mask = -1ULL >> (64 - access_size * 8);
- for (i = 0; i < size; i += access_size) {
-#ifdef TARGET_WORDS_BIGENDIAN
- access(mr, addr + i, value, access_size,
- (size - access_size - i) * 8, access_mask);
-#else
- access(mr, addr + i, value, access_size, i * 8, access_mask);
-#endif
+ if (memory_region_big_endian(mr)) {
+ for (i = 0; i < size; i += access_size) {
+ access(mr, addr + i, value, access_size,
+ (size - access_size - i) * 8, access_mask);
+ }
+ } else {
+ for (i = 0; i < size; i += access_size) {
+ access(mr, addr + i, value, access_size, i * 8, access_mask);
+ }
}
}
--
1.8.1.4
- [Qemu-devel] [PATCH 17/28] pc-testdev: remove useless cpu_to_le64/le64_to_cpu, (continued)
- [Qemu-devel] [PATCH 17/28] pc-testdev: remove useless cpu_to_le64/le64_to_cpu, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 18/28] mips: degrade BIOS error to warning, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 20/28] sparc64: unbreak, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 19/28] sh4: unbreak r2d, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 21/28] default-configs: add test device to all machines supporting ISA, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 22/28] default-configs: add SuperIO to SH4, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 23/28] default-configs/ppc64: add all components of i82378 SuperIO chip used by prep, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 26/28] memory: pass MemoryRegion to access_with_adjusted_size, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 24/28] qtest: add test for ISA I/O space endianness, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 27/28] memory: check memory region endianness, not target's,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 25/28] memory: move functions around, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 28/28] pc-testdev: add I/O port to test memory.c auto split/combine, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 02/28] ppc_oldworld: do not use isa_mmio, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 03/28] ppc_newworld: do not use isa_mmio, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 04/28] spapr_pci: remove indirection for I/O port access, Paolo Bonzini, 2013/07/22
- [Qemu-devel] [PATCH 01/28] sh4: do not use isa_mmio, Paolo Bonzini, 2013/07/22
- Re: [Qemu-devel] [PATCH 00/28] Memory API for 1.6: fix I/O port endianness mess, Peter Maydell, 2013/07/22