On Wed, Jul 25, 2012 at 4:31 AM, Liu Ping Fan <qemulist@xxxxxxxxx> wrote: > @@ -3396,13 +3420,25 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, > uint32_t val; > target_phys_addr_t page; > MemoryRegionSection *section; > + Object *bk; > > while (len > 0) { > page = addr & TARGET_PAGE_MASK; > l = (page + TARGET_PAGE_SIZE) - addr; > if (l > len) > l = len; > + > + qemu_rwlock_rdlock_devtree(); > section = phys_page_find(page >> TARGET_PAGE_BITS); > + if (!(memory_region_is_ram(section->mr) || > + memory_region_is_romd(section->mr)) && !is_write) { > + bk = get_backend(section->mr, addr); > + object_ref(bk); > + } else if (!memory_region_is_ram(section->mr) && is_write) { > + bk = get_backend(section->mr, addr); > + object_ref(bk); > + } > + qemu_rwlock_unlock_devtree(); > > if (is_write) { > if (!memory_region_is_ram(section->mr)) { > @@ -3426,6 +3462,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf, > io_mem_write(section->mr, addr1, val, 1); > l = 1; > } > + object_unref(bk); Currently object_ref()/object_unref() are not atomic. Will you send another patch to perform atomic increment/decrement or how will per-device synchronization work? Stefan -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html