On 2013-05-26 10:56, Paolo Bonzini wrote: > Il 25/05/2013 13:30, Jan Kiszka ha scritto: >> On 2013-05-25 13:20, Paolo Bonzini wrote: >>> Il 25/05/2013 12:19, Jan Kiszka ha scritto: >>>> addr -= section->offset_within_address_space; - len = >>>> MIN(section->size - addr, len); >>> ^^^^^^^^^^^^^ ^^^^ >>> >>> This is the size of a section minus an offset in the section. >>> >>>> + diff = int128_sub(section->mr->size, >>>> int128_make64(addr)); >>> ^^^^^^^^^^^^^^^^^ ^^^^ >>> >>> This is the size of a region minus the same offset in the >>> section. >>> >>>> + len = MIN(int128_get64(diff), len); >>>> >>>> /* Compute offset within MemoryRegion */ addr += >>>> section->offset_within_region; >>> >>> So this has to be moved above. > >> Right, fixed. > >>> Do you have a branch pushed somewhere that I can test against? > >> git://git.kiszka.org/qemu.git queues/ioport > > Nice patches. Only one thing, how is .impl.unaligned different from > the existing .valid.unaligned? See memory.h: valid controls is an unaligned access traps or gets processed, impl manages if it is passed as-is to the device or broken up and aligned first. Jan