qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05
@ 2013-09-05 17:17 Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 1/5] exec: fix writing to MMIO area with non-power-of-two length Paolo Bonzini
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: anthony

Anthony,

the following changes since commit aaa6a40194e9f204cb853f64ef3c1e170bb014e8:

  Merge remote-tracking branch 'afaerber/tags/qom-cpu-for-anthony' into staging (2013-09-03 12:33:32 -0500)

are available in the git repository at:

  git://github.com/bonzini/qemu.git iommu-for-anthony

for you to fetch changes up to 2641689a37144b201814f39046e36eb285498cbe:

  exec: do tcg_commit only when tcg_enabled (2013-09-05 18:11:52 +0200)

Mostly small fixes, all except one queued for stable.

Paolo
----------------------------------------------------------------
Hu Tao (1):
      exec: check offset_within_address_space for register subpage

Jan Kiszka (2):
      memory: Provide separate handling of unassigned io ports accesses
      Revert "memory: Return -1 again on reads from unsigned regions"

Paolo Bonzini (1):
      exec: fix writing to MMIO area with non-power-of-two length

liguang (1):
      exec: do tcg_commit only when tcg_enabled

 exec.c                | 12 +++++++++---
 include/exec/ioport.h |  4 ++++
 ioport.c              | 16 ++++++++++++++++
 memory.c              |  2 +-
 4 files changed, 30 insertions(+), 4 deletions(-)
-- 
1.8.3.1

^ permalink raw reply	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 1/5] exec: fix writing to MMIO area with non-power-of-two length
  2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
@ 2013-09-05 17:17 ` Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 2/5] exec: check offset_within_address_space for register subpage Paolo Bonzini
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: qemu-stable, anthony

The problem is introduced by commit 2332616 (exec: Support 64-bit
operations in address_space_rw, 2013-07-08).  Before that commit,
memory_access_size would only return 1/2/4.

Since alignment is already handled above, reduce l to the largest
power of two that is smaller than l.

Cc: qemu-stable@nongnu.org
Reported-by: Oleksii Shevchuk <alxchk@gmail.com>
Tested-by: Oleksii Shevchuk <alxchk@gmail.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 exec.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/exec.c b/exec.c
index 87b0b39..b52ec80 100644
--- a/exec.c
+++ b/exec.c
@@ -1913,6 +1913,9 @@ static int memory_access_size(MemoryRegion *mr, unsigned l, hwaddr addr)
     if (l > access_size_max) {
         l = access_size_max;
     }
+    if (l & (l - 1)) {
+        l = 1 << (qemu_fls(l) - 1);
+    }
 
     return l;
 }
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 2/5] exec: check offset_within_address_space for register subpage
  2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 1/5] exec: fix writing to MMIO area with non-power-of-two length Paolo Bonzini
@ 2013-09-05 17:17 ` Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 3/5] memory: Provide separate handling of unassigned io ports accesses Paolo Bonzini
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Hu Tao, qemu-stable, Blue Swirl, anthony,
	Andreas Färber, Richard Henderson

From: Hu Tao <hutao@cn.fujitsu.com>

If offset_within_address_space falls in a page, then we register a
subpage. So check offset_within_address_space rather than
offset_within_region.

Cc: qemu-stable@nongnu.org
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Richard Henderson <rth@twiddle.net>
Cc: "Andreas Färber" <afaerber@suse.de>
Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: Blue Swirl <blauwirbel@gmail.com>
Signed-off-by: Hu Tao <hutao@cn.fujitsu.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 exec.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/exec.c b/exec.c
index b52ec80..e6f04d8 100644
--- a/exec.c
+++ b/exec.c
@@ -854,7 +854,7 @@ static void mem_add(MemoryListener *listener, MemoryRegionSection *section)
         now = remain;
         if (int128_lt(remain.size, page_size)) {
             register_subpage(d, &now);
-        } else if (remain.offset_within_region & ~TARGET_PAGE_MASK) {
+        } else if (remain.offset_within_address_space & ~TARGET_PAGE_MASK) {
             now.size = page_size;
             register_subpage(d, &now);
         } else {
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 3/5] memory: Provide separate handling of unassigned io ports accesses
  2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 1/5] exec: fix writing to MMIO area with non-power-of-two length Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 2/5] exec: check offset_within_address_space for register subpage Paolo Bonzini
@ 2013-09-05 17:17 ` Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 4/5] Revert "memory: Return -1 again on reads from unsigned regions" Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 5/5] exec: do tcg_commit only when tcg_enabled Paolo Bonzini
  4 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: Jan Kiszka, qemu-stable, anthony

From: Jan Kiszka <jan.kiszka@siemens.com>

Accesses to unassigned io ports shall return -1 on read and be ignored
on write. Ensure these properties via dedicated ops, decoupling us from
the memory core's handling of unassigned accesses.

Cc: qemu-stable@nongnu.org
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 exec.c                |  3 ++-
 include/exec/ioport.h |  4 ++++
 ioport.c              | 16 ++++++++++++++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/exec.c b/exec.c
index e6f04d8..3859b02 100644
--- a/exec.c
+++ b/exec.c
@@ -1805,7 +1805,8 @@ static void memory_map_init(void)
     address_space_init(&address_space_memory, system_memory, "memory");
 
     system_io = g_malloc(sizeof(*system_io));
-    memory_region_init(system_io, NULL, "io", 65536);
+    memory_region_init_io(system_io, NULL, &unassigned_io_ops, NULL, "io",
+                          65536);
     address_space_init(&address_space_io, system_io, "I/O");
 
     memory_listener_register(&core_memory_listener, &address_space_memory);
diff --git a/include/exec/ioport.h b/include/exec/ioport.h
index bdd4e96..b3848be 100644
--- a/include/exec/ioport.h
+++ b/include/exec/ioport.h
@@ -45,6 +45,10 @@ typedef struct MemoryRegionPortio {
 
 #define PORTIO_END_OF_LIST() { }
 
+#ifndef CONFIG_USER_ONLY
+extern const MemoryRegionOps unassigned_io_ops;
+#endif
+
 void cpu_outb(pio_addr_t addr, uint8_t val);
 void cpu_outw(pio_addr_t addr, uint16_t val);
 void cpu_outl(pio_addr_t addr, uint32_t val);
diff --git a/ioport.c b/ioport.c
index 79b7f1a..707cce8 100644
--- a/ioport.c
+++ b/ioport.c
@@ -44,6 +44,22 @@ typedef struct MemoryRegionPortioList {
     MemoryRegionPortio ports[];
 } MemoryRegionPortioList;
 
+static uint64_t unassigned_io_read(void *opaque, hwaddr addr, unsigned size)
+{
+    return -1ULL;
+}
+
+static void unassigned_io_write(void *opaque, hwaddr addr, uint64_t val,
+                                unsigned size)
+{
+}
+
+const MemoryRegionOps unassigned_io_ops = {
+    .read = unassigned_io_read,
+    .write = unassigned_io_write,
+    .endianness = DEVICE_NATIVE_ENDIAN,
+};
+
 void cpu_outb(pio_addr_t addr, uint8_t val)
 {
     LOG_IOPORT("outb: %04"FMT_pioaddr" %02"PRIx8"\n", addr, val);
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 4/5] Revert "memory: Return -1 again on reads from unsigned regions"
  2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
                   ` (2 preceding siblings ...)
  2013-09-05 17:17 ` [Qemu-devel] [PULL 3/5] memory: Provide separate handling of unassigned io ports accesses Paolo Bonzini
@ 2013-09-05 17:17 ` Paolo Bonzini
  2013-09-05 17:17 ` [Qemu-devel] [PULL 5/5] exec: do tcg_commit only when tcg_enabled Paolo Bonzini
  4 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: Jan Kiszka, qemu-stable, anthony

From: Jan Kiszka <jan.kiszka@siemens.com>

This reverts commit 9b8c69243585a32d14b9bb9fcd52c37b0b5a1b71.

The commit was wrong: We only return -1 on invalid accesses, not on
valid but unbacked ones. This broke various corner cases.

Cc: qemu-stable@nongnu.org
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 memory.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/memory.c b/memory.c
index 886f838..5a10fd0 100644
--- a/memory.c
+++ b/memory.c
@@ -872,7 +872,7 @@ static uint64_t unassigned_mem_read(void *opaque, hwaddr addr,
     if (current_cpu != NULL) {
         cpu_unassigned_access(current_cpu, addr, false, false, 0, size);
     }
-    return -1ULL;
+    return 0;
 }
 
 static void unassigned_mem_write(void *opaque, hwaddr addr,
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [Qemu-devel] [PULL 5/5] exec: do tcg_commit only when tcg_enabled
  2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
                   ` (3 preceding siblings ...)
  2013-09-05 17:17 ` [Qemu-devel] [PULL 4/5] Revert "memory: Return -1 again on reads from unsigned regions" Paolo Bonzini
@ 2013-09-05 17:17 ` Paolo Bonzini
  4 siblings, 0 replies; 6+ messages in thread
From: Paolo Bonzini @ 2013-09-05 17:17 UTC (permalink / raw)
  To: qemu-devel; +Cc: liguang, anthony

From: liguang <lig.fnst@cn.fujitsu.com>

Signed-off-by: liguang <lig.fnst@cn.fujitsu.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 exec.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/exec.c b/exec.c
index 3859b02..030118e 100644
--- a/exec.c
+++ b/exec.c
@@ -1810,7 +1810,9 @@ static void memory_map_init(void)
     address_space_init(&address_space_io, system_io, "I/O");
 
     memory_listener_register(&core_memory_listener, &address_space_memory);
-    memory_listener_register(&tcg_memory_listener, &address_space_memory);
+    if (tcg_enabled()) {
+        memory_listener_register(&tcg_memory_listener, &address_space_memory);
+    }
 }
 
 MemoryRegion *get_system_memory(void)
-- 
1.8.3.1

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-09-05 17:18 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-05 17:17 [Qemu-devel] [PULL 0/5] Memory patches for 2013-09-05 Paolo Bonzini
2013-09-05 17:17 ` [Qemu-devel] [PULL 1/5] exec: fix writing to MMIO area with non-power-of-two length Paolo Bonzini
2013-09-05 17:17 ` [Qemu-devel] [PULL 2/5] exec: check offset_within_address_space for register subpage Paolo Bonzini
2013-09-05 17:17 ` [Qemu-devel] [PULL 3/5] memory: Provide separate handling of unassigned io ports accesses Paolo Bonzini
2013-09-05 17:17 ` [Qemu-devel] [PULL 4/5] Revert "memory: Return -1 again on reads from unsigned regions" Paolo Bonzini
2013-09-05 17:17 ` [Qemu-devel] [PULL 5/5] exec: do tcg_commit only when tcg_enabled Paolo Bonzini

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).