With this, e1000 tells memory core that it can be protected by refcnt, and can protected by local lock
Signed-off-by: Liu Ping Fan <pingf...@linux.vnet.ibm.com> --- hw/e1000.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-) diff --git a/hw/e1000.c b/hw/e1000.c index 72c2324..9929fe6 100644 --- a/hw/e1000.c +++ b/hw/e1000.c @@ -1082,9 +1082,40 @@ e1000_mmio_read(void *opaque, target_phys_addr_t addr, unsigned size) return ret; } +static void e1000_mmio_lock(MemoryRegion *mr) +{ + E1000State *d = container_of(mr, E1000State, mmio); + qemu_mutex_lock(&d->e1000_lock); +} + +static void e1000_mmio_unlock(MemoryRegion *mr) +{ + E1000State *d = container_of(mr, E1000State, mmio); + qemu_mutex_unlock(&d->e1000_lock); +} + +static int e1000_mmio_ref(MemoryRegion *mr) +{ + E1000State *e1000 = container_of(mr, E1000State, mmio); + + object_ref(OBJECT(e1000)); + return 1; +} + +static void e1000_mmio_unref(MemoryRegion *mr) +{ + E1000State *e1000 = container_of(mr, E1000State, mmio); + + object_unref(OBJECT(e1000)); +} + static const MemoryRegionOps e1000_mmio_ops = { .read = e1000_mmio_read, .write = e1000_mmio_write, + .ref = e1000_mmio_ref, + .unref = e1000_mmio_unref, + .lock = e1000_mmio_lock, + .unlock = e1000_mmio_unlock, .endianness = DEVICE_LITTLE_ENDIAN, .impl = { .min_access_size = 4, -- 1.7.4.4