On Wed, Jul 25, 2012 at 8:27 PM, Avi Kivity <avi@xxxxxxxxxx> wrote: > On 07/25/2012 01:58 PM, Avi Kivity wrote: >>> 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); >> >> Does the devtree lock also protect the data structures accessed by >> phys_page_find()? Seems wrong. > > The right way is to object_ref() in core_region_add() and object_unref() > in core_region_del(). We're guaranteed that mr->object is alive during > _add(), and DeviceClass::unmap() ensures that the extra ref doesn't > block destruction. > OK, I see. I will try in this way. But when memory_region_destroy()->..->core_region_del(), should we reset the lp.ptr to phys_section_unassigned , otherwise, if using removed target_phys_addr_t, we will still get the pointer to invalid MemoryRegion? Thanx, pingfan > -- > error compiling committee.c: too many arguments to function > > -- 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