On 2013-05-26 11:01, 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 > > And another thing... in "ioport: Switch dispatching to memory core > layer", could you put memory_region_iorange_read/write in > mr->ops->read/write instead of adding an "if" in the dispatch routines? Not trivially because mr->opaque is passed to the read/write handler, but memory_region_iorange_read/write needs the region. Can add more data structures to handles this, but what does it buy us? Jan