From: John Baboval <john.baboval@virtualcomputer.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH V11 11/15] Introduce qemu_put_ram_ptr
Date: Wed, 06 Apr 2011 13:19:38 -0400 [thread overview]
Message-ID: <4D9CA0AA.2030409@virtualcomputer.com> (raw)
In-Reply-To: <1299004529-31290-12-git-send-email-anthony.perard@citrix.com>
This seems to leak entries on the map cache locked entries list. Patch
below:
Signed-off-by: John Baboval<jbaboval@jbaboval-desktop.(none)>
---
exec.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/exec.c b/exec.c
index 1f88d6a..f18cb7d 100644
--- a/exec.c
+++ b/exec.c
@@ -3759,9 +3759,8 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
}
} else {
/* RAM case */
- ptr = qemu_get_ram_ptr(pd& TARGET_PAGE_MASK) +
- (addr& ~TARGET_PAGE_MASK);
- memcpy(buf, ptr, l);
+ ptr = qemu_get_ram_ptr(pd& TARGET_PAGE_MASK);
+ memcpy(buf, ptr + (addr& ~TARGET_PAGE_MASK), l);
qemu_put_ram_ptr(ptr);
}
}
--
1.7.0.4
On 03/01/2011 01:35 PM, anthony.perard@citrix.com wrote:
> From: Anthony PERARD<anthony.perard@citrix.com>
>
> This function allows to unlock a ram_ptr give by qemu_get_ram_ptr. After
> a call to qemu_put_ram_ptr, the pointer may be unmap from QEMU when
> used with Xen.
>
> Signed-off-by: Anthony PERARD<anthony.perard@citrix.com>
> Acked-by: Alexander Graf<agraf@suse.de>
> ---
> cpu-common.h | 1 +
> exec.c | 10 ++++++++++
> xen-mapcache.c | 34 ++++++++++++++++++++++++++++++++++
> 3 files changed, 45 insertions(+), 0 deletions(-)
>
> diff --git a/cpu-common.h b/cpu-common.h
> index 54d21d4..1f1c886 100644
> --- a/cpu-common.h
> +++ b/cpu-common.h
> @@ -55,6 +55,7 @@ void *qemu_get_ram_ptr(ram_addr_t addr);
> /* Same but slower, to use for migration, where the order of
> * RAMBlocks must not change. */
> void *qemu_safe_ram_ptr(ram_addr_t addr);
> +void qemu_put_ram_ptr(void *addr);
> /* This should not be used by devices. */
> int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr);
> ram_addr_t qemu_ram_addr_from_host_nofail(void *ptr);
> diff --git a/exec.c b/exec.c
> index 558595a..3f3caaa 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -3007,6 +3007,13 @@ void *qemu_safe_ram_ptr(ram_addr_t addr)
> return NULL;
> }
>
> +void qemu_put_ram_ptr(void *addr)
> +{
> + if (xen_mapcache_enabled()) {
> + qemu_map_cache_unlock(addr);
> + }
> +}
> +
> int qemu_ram_addr_from_host(void *ptr, ram_addr_t *ram_addr)
> {
> RAMBlock *block;
> @@ -3722,6 +3729,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
> cpu_physical_memory_set_dirty_flags(
> addr1, (0xff& ~CODE_DIRTY_FLAG));
> }
> + qemu_put_ram_ptr(ptr);
> }
> } else {
> if ((pd& ~TARGET_PAGE_MASK)> IO_MEM_ROM&&
> @@ -3752,6 +3760,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
> ptr = qemu_get_ram_ptr(pd& TARGET_PAGE_MASK) +
> (addr& ~TARGET_PAGE_MASK);
> memcpy(buf, ptr, l);
> + qemu_put_ram_ptr(ptr);
> }
> }
> len -= l;
> @@ -3792,6 +3801,7 @@ void cpu_physical_memory_write_rom(target_phys_addr_t addr,
> /* ROM/RAM case */
> ptr = qemu_get_ram_ptr(addr1);
> memcpy(ptr, buf, l);
> + qemu_put_ram_ptr(ptr);
> }
> len -= l;
> buf += l;
> diff --git a/xen-mapcache.c b/xen-mapcache.c
> index d7f44a7..6398456 100644
> --- a/xen-mapcache.c
> +++ b/xen-mapcache.c
> @@ -195,6 +195,40 @@ uint8_t *qemu_map_cache(target_phys_addr_t phys_addr, target_phys_addr_t size, u
> return mapcache->last_address_vaddr + address_offset;
> }
>
> +void qemu_map_cache_unlock(void *buffer)
> +{
> + MapCacheEntry *entry = NULL, *pentry = NULL;
> + MapCacheRev *reventry;
> + target_phys_addr_t paddr_index;
> + int found = 0;
> +
> + QTAILQ_FOREACH(reventry,&mapcache->locked_entries, next) {
> + if (reventry->vaddr_req == buffer) {
> + paddr_index = reventry->paddr_index;
> + found = 1;
> + break;
> + }
> + }
> + if (!found) {
> + return;
> + }
> + QTAILQ_REMOVE(&mapcache->locked_entries, reventry, next);
> + qemu_free(reventry);
> +
> + entry =&mapcache->entry[paddr_index % mapcache->nr_buckets];
> + while (entry&& entry->paddr_index != paddr_index) {
> + pentry = entry;
> + entry = entry->next;
> + }
> + if (!entry) {
> + return;
> + }
> + entry->lock--;
> + if (entry->lock> 0) {
> + entry->lock--;
> + }
> +}
> +
> ram_addr_t qemu_ram_addr_from_mapcache(void *ptr)
> {
> MapCacheRev *reventry;
next prev parent reply other threads:[~2011-04-06 17:19 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-01 18:35 [Qemu-devel] [PATCH V11 00/15] Xen device model support anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 01/15] xen: Replace some tab-indents with spaces (clean-up) anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 02/15] xen: Make Xen build once anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-23 10:57 ` [Qemu-devel] " Alexander Graf
2011-03-23 10:57 ` Alexander Graf
2011-03-28 14:50 ` [Xen-devel] " Anthony PERARD
2011-03-28 14:50 ` Anthony PERARD
2011-03-28 17:29 ` [Xen-devel] " Alexander Graf
2011-03-28 17:29 ` Alexander Graf
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 03/15] xen: Support new libxc calls from xen unstable anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-23 10:43 ` [Qemu-devel] " Alexander Graf
2011-03-23 10:43 ` Alexander Graf
2011-03-28 15:22 ` [Xen-devel] " Anthony PERARD
2011-03-28 15:22 ` Anthony PERARD
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 04/15] xen: Add initialisation of Xen anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 05/15] xen: Add xenfv machine anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 06/15] xen: Add the Xen platform pci device anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-23 12:08 ` [Qemu-devel] " Alexander Graf
2011-03-23 12:08 ` Alexander Graf
2011-03-28 16:08 ` [Qemu-devel] " Anthony PERARD
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 07/15] piix_pci: Introduces Xen specific call for irq anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 08/15] xen: Introduce Xen Interrupt Controller anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 09/15] xen: Introduce the Xen mapcache anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-23 12:33 ` [Qemu-devel] " Alexander Graf
2011-03-23 12:33 ` Alexander Graf
2011-03-28 16:28 ` [Xen-devel] " Anthony PERARD
2011-03-28 16:28 ` Anthony PERARD
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 10/15] configure: Always use 64bits target physical addresses with xen enabled anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 11/15] Introduce qemu_put_ram_ptr anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-04-06 17:19 ` John Baboval [this message]
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 12/15] vl.c: Introduce getter for shutdown_requested and reset_requested anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 13/15] xen: Initialize event channels and io rings anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-23 12:36 ` [Qemu-devel] " Alexander Graf
2011-03-23 12:36 ` Alexander Graf
2011-03-28 16:30 ` [Xen-devel] " Anthony PERARD
2011-03-28 16:30 ` Anthony PERARD
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 14/15] xen: Set running state in xenstore anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-01 18:35 ` [Qemu-devel] [PATCH V11 15/15] xen: Add Xen hypercall for sleep state in the cmos_s3 callback anthony.perard
2011-03-01 18:35 ` anthony.perard
2011-03-11 16:29 ` [Qemu-devel] [PATCH V11 00/15] Xen device model support Anthony Liguori
2011-03-11 20:47 ` Alexander Graf
2011-03-22 14:23 ` Alexander Graf
2011-03-22 14:23 ` Alexander Graf
2011-03-22 14:47 ` [Xen-devel] " Anthony PERARD
2011-03-22 14:47 ` Anthony PERARD
2011-03-22 15:13 ` [Xen-devel] " Alexander Graf
2011-03-22 15:13 ` Alexander Graf
2011-03-22 15:40 ` [Xen-devel] " Alexander Graf
2011-03-22 15:40 ` [Xen-devel] " Alexander Graf
2011-03-22 15:52 ` [Xen-devel] Re: [Qemu-devel] " Alexander Graf
2011-03-22 15:52 ` Alexander Graf
2011-03-22 17:22 ` [Xen-devel] " Anthony PERARD
2011-03-22 17:22 ` Anthony PERARD
2011-03-22 17:23 ` [Xen-devel] " Alexander Graf
2011-03-22 17:23 ` [Xen-devel] " Alexander Graf
2011-03-23 12:37 ` [Qemu-devel] " Alexander Graf
2011-03-23 12:37 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D9CA0AA.2030409@virtualcomputer.com \
--to=john.baboval@virtualcomputer.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.