WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [Qemu-devel] [PATCH 08/12] qemu_ram_ptr_length: take ram

To: qemu-devel@xxxxxxxxxx
Subject: [Xen-devel] Re: [Qemu-devel] [PATCH 08/12] qemu_ram_ptr_length: take ram_addr_t as arguments
From: Vasily Khoruzhick <anarsoul@xxxxxxxxx>
Date: Wed, 6 Jul 2011 16:12:31 +0300
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx Devel" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Alexander Graf <agraf@xxxxxxx>, Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Delivery-date: Wed, 06 Jul 2011 17:50:01 -0700
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=from:to:subject:date:user-agent:cc:references:in-reply-to :mime-version:content-type:content-transfer-encoding:message-id; bh=7YuWjnrZT+2WJ0QMCqlamF6G8541hyn9V5cLbrzu/fk=; b=amECPSmzrw5Sb8iQZy6N67fZPnIvZ1HWQA8XliASqwnEIaNw9uSzKUJJxJQwG8HwV0 ktdxb76Sdjkf7xyfa3/ngDOwION5iWUxtmFxkk7jolF3nZNrKvw7XWhsQTQehY3xOXkM Ah2I8X3ZrCFThYpberqXHNk6/PCcRKwoR3Q/Y=
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1309884673-18965-9-git-send-email-agraf@xxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <1309884673-18965-1-git-send-email-agraf@xxxxxxx> <1309884673-18965-9-git-send-email-agraf@xxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: KMail/1.13.7 (Linux/2.6.39-gentoo-anarsoul; KDE/4.6.3; i686; ; )
On Tuesday 05 July 2011 19:51:09 Alexander Graf wrote:
> From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> 
> qemu_ram_ptr_length should take ram_addr_t as argument rather than
> target_phys_addr_t because is doing comparisons with RAMBlock addresses.
> 
> cpu_physical_memory_map should create a ram_addr_t address to pass to
> qemu_ram_ptr_length from PhysPageDesc phys_offset.
> 
> Remove code after abort() in qemu_ram_ptr_length.
> 
> Changes in v2:
> 
> - handle 0 size in qemu_ram_ptr_length;
> 
> - rename addr1 to raddr;
> 
> - initialize raddr to ULONG_MAX.
> 
> Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
> Reviewed-by: Peter Maydell <peter.maydell@xxxxxxxxxx>
> Signed-off-by: Alexander Graf <agraf@xxxxxxx>

Tested-by: Vasily Khoruzhick <anarsoul@xxxxxxxxx>

> ---
>  cpu-common.h |    2 +-
>  exec.c       |   21 ++++++++++++++-------
>  2 files changed, 15 insertions(+), 8 deletions(-)
> 
> diff --git a/cpu-common.h b/cpu-common.h
> index b027e43..e4fcded 100644
> --- a/cpu-common.h
> +++ b/cpu-common.h
> @@ -65,7 +65,7 @@ void qemu_ram_free_from_ptr(ram_addr_t addr);
>  void qemu_ram_remap(ram_addr_t addr, ram_addr_t length);
>  /* This should only be used for ram local to a device.  */
>  void *qemu_get_ram_ptr(ram_addr_t addr);
> -void *qemu_ram_ptr_length(target_phys_addr_t addr, target_phys_addr_t
> *size); +void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size);
>  /* Same but slower, to use for migration, where the order of
>   * RAMBlocks must not change. */
>  void *qemu_safe_ram_ptr(ram_addr_t addr);
> diff --git a/exec.c b/exec.c
> index 5604946..c0673c2 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -3167,8 +3167,11 @@ void *qemu_safe_ram_ptr(ram_addr_t addr)
> 
>  /* Return a host pointer to guest's ram. Similar to qemu_get_ram_ptr
>   * but takes a size argument */
> -void *qemu_ram_ptr_length(target_phys_addr_t addr, target_phys_addr_t
> *size) +void *qemu_ram_ptr_length(ram_addr_t addr, ram_addr_t *size)
>  {
> +    if (*size == 0) {
> +        return NULL;
> +    }
>      if (xen_enabled()) {
>          return xen_map_cache(addr, *size, 1);
>      } else {
> @@ -3184,9 +3187,6 @@ void *qemu_ram_ptr_length(target_phys_addr_t addr,
> target_phys_addr_t *size)
> 
>          fprintf(stderr, "Bad ram offset %" PRIx64 "\n", (uint64_t)addr);
>          abort();
> -
> -        *size = 0;
> -        return NULL;
>      }
>  }
> 
> @@ -4052,7 +4052,9 @@ void *cpu_physical_memory_map(target_phys_addr_t
> addr, target_phys_addr_t page;
>      unsigned long pd;
>      PhysPageDesc *p;
> -    target_phys_addr_t addr1 = addr;
> +    ram_addr_t raddr = ULONG_MAX;
> +    ram_addr_t rlen;
> +    void *ret;
> 
>      while (len > 0) {
>          page = addr & TARGET_PAGE_MASK;
> @@ -4080,13 +4082,18 @@ void *cpu_physical_memory_map(target_phys_addr_t
> addr, *plen = l;
>              return bounce.buffer;
>          }
> +        if (!todo) {
> +            raddr = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
> +        }
> 
>          len -= l;
>          addr += l;
>          todo += l;
>      }
> -    *plen = todo;
> -    return qemu_ram_ptr_length(addr1, plen);
> +    rlen = todo;
> +    ret = qemu_ram_ptr_length(raddr, &rlen);
> +    *plen = rlen;
> +    return ret;
>  }
> 
>  /* Unmaps a memory region previously mapped by cpu_physical_memory_map().

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel