From: Aurelien Jarno <aurelien@aurel32.net>
To: qemu-devel@nongnu.org
Cc: "Kirill A. Shutemov" <kirill@shutemov.name>
Subject: Re: [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly
Date: Mon, 8 Dec 2008 19:17:11 +0100 [thread overview]
Message-ID: <20081208181711.GG14780@volta.aurel32.net> (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>
Applied. A description of the patch would have helped.
> ---
> 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
>
>
>
>
--
.''`. Aurelien Jarno | GPG: 1024D/F1BCDB73
: :' : Debian developer | Electrical Engineer
`. `' aurel32@debian.org | aurelien@aurel32.net
`- people.debian.org/~aurel32 | www.aurel32.net
next prev parent reply other threads:[~2008-12-08 18:17 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 ` [Qemu-devel] [PATCH] mremap(): handle MREMAP_FIXED and MREMAP_MAYMOVE correctly Edgar E. Iglesias
2008-12-06 20:03 ` Kirill A. Shutemov
2008-12-08 18:17 ` Aurelien Jarno [this message]
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=20081208181711.GG14780@volta.aurel32.net \
--to=aurelien@aurel32.net \
--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 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.