From: Anthony Liguori <anthony@codemonkey.ws>
To: Yoshiaki Tamura <tamura.yoshiaki@lab.ntt.co.jp>
Cc: alex.williamson@redhat.com, cam@cs.ualberta.ca, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] exec: remove code duplication in qemu_ram_alloc() and qemu_ram_alloc_from_ptr()
Date: Sun, 22 Aug 2010 16:30:25 -0500 [thread overview]
Message-ID: <4C7196F1.9020001@codemonkey.ws> (raw)
In-Reply-To: <1282113709-3010-1-git-send-email-tamura.yoshiaki@lab.ntt.co.jp>
On 08/18/2010 01:41 AM, Yoshiaki Tamura wrote:
> Since most of the code in qemu_ram_alloc() and
> qemu_ram_alloc_from_ptr() are duplicated, let
> qemu_ram_alloc_from_ptr() to switch by checking void *host, and change
> qemu_ram_alloc() to a wrapper.
>
> Signed-off-by: Yoshiaki Tamura<tamura.yoshiaki@lab.ntt.co.jp>
>
Applied. Thanks.
Regards,
Anthony Liguori
> ---
> exec.c | 84 +++++++++++++++++++--------------------------------------------
> 1 files changed, 26 insertions(+), 58 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 4fc96cb..82bfffc 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2809,7 +2809,7 @@ static ram_addr_t last_ram_offset(void)
> }
>
> ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
> - ram_addr_t size, void *host)
> + ram_addr_t size, void *host)
> {
> RAMBlock *new_block, *block;
>
> @@ -2833,74 +2833,37 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev, const char *name,
> }
> }
>
> - new_block->host = host;
> -
> - new_block->offset = find_ram_offset(size);
> - new_block->length = size;
> -
> - QLIST_INSERT_HEAD(&ram_list.blocks, new_block, next);
> -
> - ram_list.phys_dirty = qemu_realloc(ram_list.phys_dirty,
> - last_ram_offset()>> TARGET_PAGE_BITS);
> - memset(ram_list.phys_dirty + (new_block->offset>> TARGET_PAGE_BITS),
> - 0xff, size>> TARGET_PAGE_BITS);
> -
> - if (kvm_enabled())
> - kvm_setup_guest_memory(new_block->host, size);
> -
> - return new_block->offset;
> -}
> -
> -ram_addr_t qemu_ram_alloc(DeviceState *dev, const char *name, ram_addr_t size)
> -{
> - RAMBlock *new_block, *block;
> -
> - size = TARGET_PAGE_ALIGN(size);
> - new_block = qemu_mallocz(sizeof(*new_block));
> -
> - if (dev&& dev->parent_bus&& dev->parent_bus->info->get_dev_path) {
> - char *id = dev->parent_bus->info->get_dev_path(dev);
> - if (id) {
> - snprintf(new_block->idstr, sizeof(new_block->idstr), "%s/", id);
> - qemu_free(id);
> - }
> - }
> - pstrcat(new_block->idstr, sizeof(new_block->idstr), name);
> -
> - QLIST_FOREACH(block,&ram_list.blocks, next) {
> - if (!strcmp(block->idstr, new_block->idstr)) {
> - fprintf(stderr, "RAMBlock \"%s\" already registered, abort!\n",
> - new_block->idstr);
> - abort();
> - }
> - }
> -
> - if (mem_path) {
> + if (host) {
> + new_block->host = host;
> + } else {
> + if (mem_path) {
> #if defined (__linux__)&& !defined(TARGET_S390X)
> - new_block->host = file_ram_alloc(new_block, size, mem_path);
> - if (!new_block->host) {
> - new_block->host = qemu_vmalloc(size);
> + new_block->host = file_ram_alloc(new_block, size, mem_path);
> + if (!new_block->host) {
> + new_block->host = qemu_vmalloc(size);
> #ifdef MADV_MERGEABLE
> - madvise(new_block->host, size, MADV_MERGEABLE);
> + madvise(new_block->host, size, MADV_MERGEABLE);
> #endif
> - }
> + }
> #else
> - fprintf(stderr, "-mem-path option unsupported\n");
> - exit(1);
> + fprintf(stderr, "-mem-path option unsupported\n");
> + exit(1);
> #endif
> - } else {
> + } else {
> #if defined(TARGET_S390X)&& defined(CONFIG_KVM)
> - /* XXX S390 KVM requires the topmost vma of the RAM to be< 256GB */
> - new_block->host = mmap((void*)0x1000000, size,
> - PROT_EXEC|PROT_READ|PROT_WRITE,
> - MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> + /* XXX S390 KVM requires the topmost vma of the RAM to be< 256GB */
> + new_block->host = mmap((void*)0x1000000, size,
> + PROT_EXEC|PROT_READ|PROT_WRITE,
> + MAP_SHARED | MAP_ANONYMOUS, -1, 0);
> #else
> - new_block->host = qemu_vmalloc(size);
> + new_block->host = qemu_vmalloc(size);
> #endif
> #ifdef MADV_MERGEABLE
> - madvise(new_block->host, size, MADV_MERGEABLE);
> + madvise(new_block->host, size, MADV_MERGEABLE);
> #endif
> + }
> }
> +
> new_block->offset = find_ram_offset(size);
> new_block->length = size;
>
> @@ -2917,6 +2880,11 @@ ram_addr_t qemu_ram_alloc(DeviceState *dev, const char *name, ram_addr_t size)
> return new_block->offset;
> }
>
> +ram_addr_t qemu_ram_alloc(DeviceState *dev, const char *name, ram_addr_t size)
> +{
> + return qemu_ram_alloc_from_ptr(dev, name, size, NULL);
> +}
> +
> void qemu_ram_free(ram_addr_t addr)
> {
> RAMBlock *block;
>
prev parent reply other threads:[~2010-08-22 21:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-18 6:41 [Qemu-devel] [PATCH] exec: remove code duplication in qemu_ram_alloc() and qemu_ram_alloc_from_ptr() Yoshiaki Tamura
2010-08-18 13:45 ` [Qemu-devel] " Alex Williamson
2010-08-22 21:30 ` Anthony Liguori [this message]
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=4C7196F1.9020001@codemonkey.ws \
--to=anthony@codemonkey.ws \
--cc=alex.williamson@redhat.com \
--cc=cam@cs.ualberta.ca \
--cc=qemu-devel@nongnu.org \
--cc=tamura.yoshiaki@lab.ntt.co.jp \
/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.