Le 17/06/2015 19:09, Paolo Bonzini a écrit :


On 17/06/2015 10:33, Paolo Bonzini wrote:
On 16/06/2015 19:48, Aurelien Jarno wrote:
The code assumes that if you don't have an IOMMU, the address range in
the underlying memory region is linear.

I think this is exactly what Peter Crosthwaite's infamous :) "exec:
Respect as_translate_internal length clamp" patch was trying to fix.
However, address_space_translate_internal uses section->mr->size instead
of section->size.  I'll post a patch once I'm through the email deluge
from 1 week of absence.

Can you test this?

Sure. It works well for my test case. Thanks Paolo!

However, it breaks PC machines.
mtree gives:
    0000000000000cf8-0000000000000cfb (prio 0, RW): pci-conf-idx
    0000000000000cf9-0000000000000cf9 (prio 1, RW): piix3-reset-control
"make check" wants to write 4 bytes to 0xcf8. Your patch makes it write only 1 
byte, and bad things happen.



diff --git a/exec.c b/exec.c
index 76bfc4a..fabb8bb 100644
--- a/exec.c
+++ b/exec.c
@@ -350,7 +350,7 @@
address_space_translate_internal(AddressSpaceDispatch *d, hwaddr addr,
hwaddr *x
      /* Compute offset within MemoryRegion */
      *xlat = addr + section->offset_within_region;

-    diff = int128_sub(section->mr->size, int128_make64(addr));
+    diff = int128_sub(section->size, int128_make64(addr));
      *plen = int128_get64(int128_min(diff, int128_make64(*plen)));
      return section;
  }

Paolo



Reply via email to