On Wed, Jul 25, 2012 at 5:18 PM, Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > Il 25/07/2012 10:12, liu ping fan ha scritto: >>>> >> + 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 >> We obey the rule: >> rdlock->search->ref_get, >> wrlock->remove ->ref_put >> So can it causes problem if object_ref()/object_unref() are not atomic? > > Yes, two CPUs can perform object_ref at the same time. > > You can find a header file for atomic operations here: > https://github.com/bonzini/qemu/commit/atomics.patch > Got it, thanks > Paolo -- 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