From: Chen Gang <chengang@emindsoft.com.cn>
To: riku.voipio@iki.fi, laurent@vivier.eu
Cc: peter.maydell@linaro.org, Chen Gang <gang.chen.5i5j@gmail.com>,
qemu-devel@nongnu.org, rth@twiddle.net
Subject: Re: [Qemu-devel] [PATCH] linux-user/mmap.c: Support shared memory mapping in mmap_frag()
Date: Wed, 30 Dec 2015 09:35:55 +0800 [thread overview]
Message-ID: <568334FB.1060701@emindsoft.com.cn> (raw)
In-Reply-To: <1451437904-3752-1-git-send-email-chengang@emindsoft.com.cn>
Hello all:
This patch is only for a discussion, I guess this patch is valuable for
i386 wine running Windows.
Theoretically, this patch is incorrect, we have to implement softmmu to
support different host and target pages (e.g. host 8KB, target 4KB):
- If host 8KB is mapped as PRIVATE | FIXED, and runs a while (trigger
copy on write).
- Then map its low 4KB as SHARED | FIXED.
- It has to fail.
So this patch is only a temporary fix:
- It looks Windows maps shared memory with 64KB alignments (at least,
at present, it is true).
- OS will manage the process address area: let most shared memory area
nearby.
- After this patch, we can run Windows Notepad.exe and ACDSee5.0 setup
program successfully. Next, I will run wine with the true windows
system dlls for a test (e.g. windows own kernel32.dll).
I guess, we can use a switch macro or a new input parameter to enable or
disable the related code (if they are really valuable enough for some
using cases).
Thanks.
On 2015年12月30日 09:11, chengang@emindsoft.com.cn wrote:
> From: Chen Gang <chengang@emindsoft.com.cn>
>
> It is a temporary fix for i386 target system running Windows.
>
> Also remove useless variable 'p'.
>
> Signed-off-by: Chen Gang <gang.chen.5i5j@gmail.com>
> ---
> linux-user/mmap.c | 22 +++++++++++++++++++---
> 1 files changed, 19 insertions(+), 3 deletions(-)
>
> diff --git a/linux-user/mmap.c b/linux-user/mmap.c
> index 445e8c6..07758d4 100644
> --- a/linux-user/mmap.c
> +++ b/linux-user/mmap.c
> @@ -156,12 +156,28 @@ static int mmap_frag(abi_ulong real_start,
> prot1 |= page_get_flags(addr);
> }
>
> + /*
> + * It is a temporary fix. Normally, target system will let shared memory
> + * aligned with 64KB, and allocate them near with each other, no any other
> + * kinds of mapping regions nearby. e.g. Windows on i386.
> + */
> + if ((start == real_start) && (flags & MAP_SHARED)) {
> + if (prot1) {
> + munmap(host_start, qemu_host_page_size);
> + }
> + if (mmap(host_start, qemu_host_page_size, prot, flags, fd, offset)
> + == MAP_FAILED) {
> + return -1;
> + }
> + return 0;
> + }
> +
> if (prot1 == 0) {
> /* no page was there, so we allocate one */
> - void *p = mmap(host_start, qemu_host_page_size, prot,
> - flags | MAP_ANONYMOUS, -1, 0);
> - if (p == MAP_FAILED)
> + if (mmap(host_start, qemu_host_page_size, prot, flags | MAP_ANONYMOUS,
> + -1, 0) == MAP_FAILED) {
> return -1;
> + }
> prot1 = prot;
> }
> prot1 &= PAGE_BITS;
>
--
Chen Gang (陈刚)
Open, share, and attitude like air, water, and life which God blessed
next prev parent reply other threads:[~2015-12-30 1:36 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-30 1:11 [Qemu-devel] [PATCH] linux-user/mmap.c: Support shared memory mapping in mmap_frag() chengang
2015-12-30 1:35 ` Chen Gang [this message]
2015-12-31 8:02 ` Chen Gang
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=568334FB.1060701@emindsoft.com.cn \
--to=chengang@emindsoft.com.cn \
--cc=gang.chen.5i5j@gmail.com \
--cc=laurent@vivier.eu \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=rth@twiddle.net \
/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).