[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [patch v5 6/8] memory: make mmio dispatch able to be ou
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [patch v5 6/8] memory: make mmio dispatch able to be out of biglock |
Date: |
Mon, 29 Oct 2012 11:41:53 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:16.0) Gecko/20121016 Thunderbird/16.0.1 |
On 10/29/2012 01:48 AM, Liu Ping Fan wrote:
> Without biglock, we try to protect the mr by increase refcnt.
> If we can inc refcnt, go backward and resort to biglock.
>
> Another point is memory radix-tree can be flushed by another
> thread, so we should get the copy of terminal mr to survive
> from such issue.
>
> +static bool memory_region_section_ref(MemoryRegionSection *mrs)
> +{
> + MemoryRegion *mr;
> + bool ret = false;
> +
> + mr = mrs->mr;
> + if (mr->ops && mr->ops->ref) {
> + ret = mr->ops->ref(mr);
I still don't see why ->ref() needs to return something.
> + }
> + return ret;
> +}
> +
>
> while (len > 0) {
> page = addr & TARGET_PAGE_MASK;
> l = (page + TARGET_PAGE_SIZE) - addr;
> if (l > len)
> l = len;
> - section = phys_page_find(d, page >> TARGET_PAGE_BITS);
> +
> + if (as->lock) {
> + qemu_mutex_lock(as->lock);
> + safe_ref = memory_region_section_lookup_ref(d, page, &obj_mrs);
> + qemu_mutex_unlock(as->lock);
> + if (!safe_ref) {
> + qemu_mutex_lock_iothread();
> + qemu_mutex_lock(as->lock);
> + /* when 2nd try, mem map can change, need to judge it again
> */
> + safe_ref = memory_region_section_lookup_ref(d, page,
> &obj_mrs);
> + qemu_mutex_unlock(as->lock);
> + if (safe_ref) {
> + qemu_mutex_unlock_iothread();
> + }
> + }
> + } else {
> + /* Caller hold the big lock */
> + memory_region_section_lookup_ref(d, page, &obj_mrs);
It's not a property of the address space, it's a property of the caller.
> + }
> + section = &obj_mrs;
>
> if (is_write) {
> if (!memory_region_is_ram(section->mr)) {
--
error compiling committee.c: too many arguments to function
- [Qemu-devel] [patch v5 2/8] qom: apply atomic on object's refcount, (continued)
- [Qemu-devel] [patch v5 2/8] qom: apply atomic on object's refcount, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 5/8] memory: introduce local lock for address space, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 4/8] pci: remove pci device from mem view when unplug, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 7/8] memory: introduce tls context to record nested dma, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 6/8] memory: make mmio dispatch able to be out of biglock, Liu Ping Fan, 2012/10/28
- Re: [Qemu-devel] [patch v5 6/8] memory: make mmio dispatch able to be out of biglock,
Avi Kivity <=
- [Qemu-devel] [patch v5 8/8] vcpu: push mmio dispatcher out of big lock, Liu Ping Fan, 2012/10/28
- [Qemu-devel] [patch v5 3/8] hotplug: introduce qdev_unplug_complete() to remove device from views, Liu Ping Fan, 2012/10/28