qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Edgar E. Iglesias" <edgar.iglesias@axis.com>
To: "Kirill A. Shutemov" <kirill@shutemov.name>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly
Date: Sat, 6 Dec 2008 20:51:01 +0100	[thread overview]
Message-ID: <20081206195101.GB1167@edgar.se.axis.com> (raw)
In-Reply-To: <1228303789-25653-9-git-send-email-kirill@shutemov.name>

On Wed, Dec 03, 2008 at 01:29:44PM +0200, Kirill A. Shutemov wrote:
> Signed-off-by: Kirill A. Shutemov <kirill@shutemov.name>

Acked-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>


> ---
>  linux-user/mmap.c |   35 +++++++++++++++++++++++++++++------
>  1 files changed, 29 insertions(+), 6 deletions(-)
> 
> diff --git a/linux-user/mmap.c b/linux-user/mmap.c
> index 52e2dc8..0a1e27a 100644
> --- a/linux-user/mmap.c
> +++ b/linux-user/mmap.c
> @@ -544,19 +544,41 @@ int target_munmap(abi_ulong start, abi_ulong len)
>      return ret;
>  }
>  
> -/* XXX: currently, we only handle MAP_ANONYMOUS and not MAP_FIXED
> -   blocks which have been allocated starting on a host page */
>  abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
>                         abi_ulong new_size, unsigned long flags,
>                         abi_ulong new_addr)
>  {
>      int prot;
> -    unsigned long host_addr;
> +    void *host_addr;
>  
>      mmap_lock();
> -    /* XXX: use 5 args syscall */
> -    host_addr = (long)mremap(g2h(old_addr), old_size, new_size, flags);
> -    if (host_addr == -1) {
> +
> +    if (flags & MREMAP_FIXED)
> +        host_addr = mremap(g2h(old_addr), old_size, new_size,
> +                           flags, new_addr);
> +    else if (flags & MREMAP_MAYMOVE) {
> +        abi_ulong mmap_start;
> +
> +        mmap_start = mmap_find_vma(0, new_size);
> +
> +        if (mmap_start == -1) {
> +            errno = ENOMEM;
> +            host_addr = MAP_FAILED;
> +        } else
> +            host_addr = mremap(g2h(old_addr), old_size, new_size,
> +                               flags | MREMAP_FIXED, g2h(mmap_start));
> +    } else {
> +        host_addr = mremap(g2h(old_addr), old_size, new_size, flags);
> +        /* Check if address fits target address space */
> +        if ((unsigned long)host_addr + new_size > (abi_ulong)-1) {
> +            /* Revert mremap() changes */
> +            host_addr = mremap(g2h(old_addr), new_size, old_size, flags);
> +            errno = ENOMEM;
> +            host_addr = MAP_FAILED;
> +        }
> +    }
> +
> +    if (host_addr == MAP_FAILED) {
>          new_addr = -1;
>      } else {
>          new_addr = h2g(host_addr);
> @@ -564,6 +586,7 @@ abi_long target_mremap(abi_ulong old_addr, abi_ulong old_size,
>          page_set_flags(old_addr, old_addr + old_size, 0);
>          page_set_flags(new_addr, new_addr + new_size, prot | PAGE_VALID);
>      }
> +
>      mmap_unlock();
>      return new_addr;
>  }
> -- 
> 1.6.0.2.GIT
> 
> 

  parent reply	other threads:[~2008-12-06 19:51 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-03 11:29 [Qemu-devel] [PATCH] Introduce --enable-binfmt-misc configure option Kirill A. Shutemov
2008-12-03 11:29 ` [Qemu-devel] [PATCH] Fix fstatat64()/newfstatat() syscall implementation Kirill A. Shutemov
2008-12-03 11:29   ` [Qemu-devel] [PATCH] Move abi_* typedefs into qemu-types.h Kirill A. Shutemov
2008-12-03 11:29     ` [Qemu-devel] [PATCH] linux-user: Safety belt for h2g Kirill A. Shutemov
2008-12-03 11:29       ` [Qemu-devel] [PATCH] linux-user: Introduce h2g_valid Kirill A. Shutemov
2008-12-03 11:29         ` [Qemu-devel] [PATCH] linux-user: Fix h2g usage in page_find_alloc Kirill A. Shutemov
2008-12-03 11:29           ` [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets Kirill A. Shutemov
2008-12-03 11:29             ` [Qemu-devel] [PATCH] mmap: add check if requested memory area fits target address space Kirill A. Shutemov
2008-12-03 11:29               ` [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly Kirill A. Shutemov
2008-12-03 11:29                 ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_sem* ipc calls handling Kirill A. Shutemov
2008-12-03 11:29                   ` [Qemu-devel] [PATCH] Implement sem* syscalls Kirill A. Shutemov
2008-12-03 11:29                     ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_shm* ipc calls handling Kirill A. Shutemov
2008-12-03 11:29                       ` [Qemu-devel] [PATCH] Implement shm* syscalls Kirill A. Shutemov
2008-12-03 11:29                         ` [Qemu-devel] [PATCH] shmat(): use mmap_find_vma to find free memory area Kirill A. Shutemov
2008-12-06 19:51                 ` Edgar E. Iglesias [this message]
2008-12-06 20:03                   ` [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly Kirill A. Shutemov
2008-12-08 18:17                 ` Aurelien Jarno
2008-12-06 19:46               ` [Qemu-devel] [PATCH] mmap: add check if requested memory area fits target address space Edgar E. Iglesias
2008-12-06 20:00                 ` Kirill A. Shutemov
2008-12-08 18:16               ` Aurelien Jarno
2008-12-03 12:34             ` [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets Paul Brook
2008-12-03 12:43               ` Christoph Egger
2008-12-03 12:48                 ` Paul Brook
2008-12-03 12:50               ` Kirill A. Shutemov
2008-12-08 20:48                 ` Kirill A. Shutemov
2008-12-08 20:54                   ` Martin Mohring
2008-12-08 20:59                   ` Martin Mohring
2008-12-08 21:57                     ` Kirill A. Shutemov
2008-12-08 21:02                   ` Martin Mohring
2008-12-08 22:14                     ` [Qemu-devel] qemu and glibc version Kirill A. Shutemov
2008-12-09 12:25                     ` [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets Robert Reif
2008-12-09 13:26                       ` Kirill A. Shutemov
2008-12-08 23:42                   ` Paul Brook
2008-12-09  6:20                     ` Kirill A. Shutemov
2008-12-06 20:08           ` [Qemu-devel] [PATCH] linux-user: Fix h2g usage in page_find_alloc Edgar E. Iglesias
2008-12-06 20:13             ` Kirill A. Shutemov
2008-12-08 18:16           ` Aurelien Jarno
2008-12-08 18:15         ` [Qemu-devel] [PATCH] linux-user: Introduce h2g_valid Aurelien Jarno
2008-12-06 20:04       ` [Qemu-devel] [PATCH] linux-user: Safety belt for h2g Edgar E. Iglesias
2008-12-08 18:15       ` Aurelien Jarno
2008-12-08 19:25         ` Andreas Färber
2008-12-09  7:34         ` Jan Kiszka
2008-12-07 21:56     ` [Qemu-devel] [PATCH] Move abi_* typedefs into qemu-types.h Aurelien Jarno
2008-12-08  6:09       ` Kirill A. Shutemov
2008-12-08 18:13     ` Aurelien Jarno
2009-01-12 14:18 ` [Qemu-devel] [PATCH] Introduce --enable-binfmt-misc configure option Riku Voipio
  -- strict thread matches above, loose matches on Subject: below --
2008-10-13 10:10 [Qemu-devel] [PATCH] Add readahead syscall Kirill A. Shutemov
2008-10-13 10:10 ` [Qemu-devel] [PATCH] Fix getdents* syscalls Kirill A. Shutemov
2008-10-13 10:10   ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_msg* ipc calls handling Kirill A. Shutemov
2008-10-13 10:10     ` [Qemu-devel] [PATCH] Implement msg* syscalls Kirill A. Shutemov
2008-10-13 10:10       ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_sem* ipc calls handling Kirill A. Shutemov
2008-10-13 10:10         ` [Qemu-devel] [PATCH] Implement sem* syscalls Kirill A. Shutemov
2008-10-13 10:10           ` [Qemu-devel] [PATCH] Fix and cleanup IPCOP_shm* ipc calls handling Kirill A. Shutemov
2008-10-13 10:10             ` [Qemu-devel] [PATCH] Implement shm* syscalls Kirill A. Shutemov
2008-10-13 10:10               ` [Qemu-devel] [PATCH] Fix fstatat64()/newfstatat() syscall implementation Kirill A. Shutemov
2008-10-13 10:10                 ` [Qemu-devel] [PATCH] Introduce --enable-binfmt-misc configure option Kirill A. Shutemov
2008-10-13 10:10                   ` [Qemu-devel] [PATCH] Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets Kirill A. Shutemov
2008-10-13 10:10                     ` [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly Kirill A. Shutemov
2008-10-14  4:04                       ` Vince Weaver
2008-10-14  5:22                         ` Kirill A. Shutemov

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=20081206195101.GB1167@edgar.se.axis.com \
    --to=edgar.iglesias@axis.com \
    --cc=kirill@shutemov.name \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).