On 10/22/2012 11:23 AM, Liu Ping Fan wrote:
> This can help memory core to use mr's fine lock to mmio dispatch.
> 
> diff --git a/memory.c b/memory.c
> index d528d1f..86d5623 100644
> --- a/memory.c
> +++ b/memory.c
> @@ -1505,13 +1505,27 @@ void set_system_io_map(MemoryRegion *mr)
>  
>  uint64_t io_mem_read(MemoryRegion *mr, target_phys_addr_t addr, unsigned 
> size)
>  {
> -    return memory_region_dispatch_read(mr, addr, size);
> +    uint64_t ret;
> +    if (mr->ops->lock) {
> +        mr->ops->lock(mr);
> +    }
> +    ret = memory_region_dispatch_read(mr, addr, size);
> +    if (mr->ops->lock) {
> +        mr->ops->unlock(mr);
> +    }
> +    return ret;
>  }
>  
>  void io_mem_write(MemoryRegion *mr, target_phys_addr_t addr,
>                    uint64_t val, unsigned size)
>  {
> +    if (mr->ops->lock) {
> +        mr->ops->lock(mr);
> +    }
>      memory_region_dispatch_write(mr, addr, val, size);
> +    if (mr->ops->lock) {
> +        mr->ops->unlock(mr);
> +    }
>  }
>  
>  typedef struct MemoryRegionList MemoryRegionList;
> diff --git a/memory.h b/memory.h
> index 9039411..5d00066 100644
> --- a/memory.h
> +++ b/memory.h
> @@ -69,6 +69,8 @@ struct MemoryRegionOps {
>                    unsigned size);
>      int (*ref)(MemoryRegion *mr);
>      void (*unref)(MemoryRegion *mr);
> +    void (*lock)(MemoryRegion *mr);
> +    void (*unlock)(MemoryRegion *mr);
>  
>      enum device_endian endianness;
>      /* Guest-visible constraints: */
> 

Is this really needed?  Can't read/write callbacks lock and unlock
themselves?

-- 
error compiling committee.c: too many arguments to function

Reply via email to