On Wed, Jul 25, 2012 at 3:43 PM, Stefan Hajnoczi <[email protected]> wrote:
> On Wed, Jul 25, 2012 at 4:31 AM, Liu Ping Fan <[email protected]> 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
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?
Thanx, pingfan
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html