diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2013-07-02 20:22:37 +0200 |
---|---|---|
committer | Paolo Bonzini <pbonzini@redhat.com> | 2013-10-17 17:24:15 +0200 |
commit | c76bc480e2d70762d02373678942c98fb193b9e5 (patch) | |
tree | 248be3c187fd0288e5d64f8bf4b1fc4fab588a6e | |
parent | 518420dfec2f082cfecbc6eec79fcc91388cf751 (diff) | |
download | qemu-c76bc480e2d70762d02373678942c98fb193b9e5.tar.gz qemu-c76bc480e2d70762d02373678942c98fb193b9e5.tar.bz2 qemu-c76bc480e2d70762d02373678942c98fb193b9e5.zip |
portio: Allow to mark portio lists as coalesced MMIO flushing
This will enable us to remove all remaining explicit calls of
qemu_flush_coalesced_mmio_buffer in IO handlers.
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
-rw-r--r-- | include/exec/ioport.h | 2 | ||||
-rw-r--r-- | ioport.c | 9 |
2 files changed, 11 insertions, 0 deletions
diff --git a/include/exec/ioport.h b/include/exec/ioport.h index b3848be684..3bd6722627 100644 --- a/include/exec/ioport.h +++ b/include/exec/ioport.h @@ -64,11 +64,13 @@ typedef struct PortioList { struct MemoryRegion **regions; void *opaque; const char *name; + bool flush_coalesced_mmio; } PortioList; void portio_list_init(PortioList *piolist, Object *owner, const struct MemoryRegionPortio *callbacks, void *opaque, const char *name); +void portio_list_set_flush_coalesced(PortioList *piolist); void portio_list_destroy(PortioList *piolist); void portio_list_add(PortioList *piolist, struct MemoryRegion *address_space, @@ -139,6 +139,12 @@ void portio_list_init(PortioList *piolist, piolist->opaque = opaque; piolist->owner = owner; piolist->name = name; + piolist->flush_coalesced_mmio = false; +} + +void portio_list_set_flush_coalesced(PortioList *piolist) +{ + piolist->flush_coalesced_mmio = true; } void portio_list_destroy(PortioList *piolist) @@ -231,6 +237,9 @@ static void portio_list_add_1(PortioList *piolist, */ memory_region_init_io(&mrpio->mr, piolist->owner, &portio_ops, mrpio, piolist->name, off_high - off_low); + if (piolist->flush_coalesced_mmio) { + memory_region_set_flush_coalesced(&mrpio->mr); + } memory_region_add_subregion(piolist->address_space, start + off_low, &mrpio->mr); piolist->regions[piolist->nr] = &mrpio->mr; |