Comments
Patch
@@ -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,
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 <pingfank@linux.vnet.ibm.com> --- hw/e1000.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-)