From: Chen Gang <chengang@emindsoft.com.cn>
To: Peter Maydell <peter.maydell@linaro.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
Riku Voipio <riku.voipio@iki.fi>,
Laurent Vivier <laurent@vivier.eu>,
Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v2 1/3] linux-user/mmap.c: Set prot page flags for the correct region in mmap_frag()
Date: Tue, 26 Jan 2016 18:19:53 +0800 [thread overview]
Message-ID: <56A74849.6090404@emindsoft.com.cn> (raw)
In-Reply-To: <CAFEAcA-_L-ADsr7MgrJ0UKOucVs=KCyyMrNiP+2AOto-kBsfSw@mail.gmail.com>
On 2016年01月26日 17:11, Peter Maydell wrote:
> On 26 January 2016 at 02:58, Chen Gang <chengang@emindsoft.com.cn> wrote:
>> The related comments for "if (prot1 == 0)" code block is "no page was
>> there, so we allocate one".
>>
>> So I guess this code block is not only allocate page for guest, but also
>> for host. So prot1 is not only for the guest page, but also for host
>> page.
>
> The comment means specifically "allocate a host page".
>
OK, thanks.
>> If we do not page_set_flags with PAGE_VALID, The next call
>> in mmap_frag for the same area will let prot1 be 0, so still
>> fall into "if (prot1 == 0)" code block.
>
> But in what case will we call mmap_frag() again before we
> call page_set_flags() at the bottom of target_mmap()?
> That is what is not clear to me, and why I asked you to describe
> what the case is that you're seeing problems with.
>
When I run WeChat.exe with i386 wine with qemu-i386 under sw_64 arch.
- The related command:
"./i386-linux-user/qemu-i386 -strace -L /upstream/i386_wine /upstream/i386_wine/usr/local/bin/wine "C:\\Program Files\\Tencent\\WeChat\\WeChat.exe" > ana/try/info-strace.log 2>&1"
- The related output (no any munmap, 135168 = 128KB + 4KB):
4600 mmap2(0x00340000,135168,PROT_READ,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED,-1,0) = 0x00340000
4600 mmap2(0x00340000,135168,PROT_READ,MAP_SHARED|MAP_FIXED,8,0) = 0x00340000
4600 rt_sigprocmask(SIG_SETMASK,0x0033f574,NULL) = 0
4600 rt_sigprocmask(SIG_BLOCK,0x7bced7e0,0x0033f5d0) = 0
4600 write(3,0x33f6cc,64) = 64
4600 read(4,0x33f6cc,64) = 1
4600 rt_sigprocmask(SIG_SETMASK,0x0033f5d0,NULL) = 0
4600 close(8) = 0
4600 rt_sigprocmask(SIG_BLOCK,0x7bced7e0,0x0033f674) = 0
4600 mprotect(0x00160000,65536,PROT_READ|PROT_WRITE) = 0
4600 rt_sigprocmask(SIG_SETMASK,0x0033f674,NULL) = 0
4600 rt_sigprocmask(SIG_BLOCK,0x7bced7e0,0x0033f990) = 0
4600 mmap2(0x00340000,135168,PROT_NONE,MAP_PRIVATE|MAP_ANONYMOUS|MAP_FIXED|MAP_NORESERVE,-1,0) = 0x00340000
wine often does like above, map the same position multiple times.
> Reading the target_mmap() code, its intention seems to be:
> (a) if the whole allocation fits in one host page, call
> mmap_frag() once and then "goto the_end1"
Also yes to me.
> (b) otherwise, we'll call mmap_frag() once for the start
> of the guest mapping, and once for the end, which must
> be two different host pages
>
Also yes to me.
> So if you're seeing mmap_frag() called twice for the same
> host page then something is going wrong, but I'm not sure what.
>
For the case I provide above, it can call mmap_frag() twice for the same
host page.
By the way, after have a full test again, all related issues are OK, it
seems we need not this patch to fix current issues, it is really very
strange to me!(maybe it is fixed by my other patches? I don't know)
At present, our sw_64 qemu-i386 status:
- Can run notepad.exe correctly, can run acdsee5.0.exe setup program
successfully.
- The performance is acceptable, after optimize the wine code (simply
use 32 split times instead of 2 for reserve_area recursion), the
initialization speed is really quick enough. :-)
- When run WeChat.exe, it can popup connection GUI box, but will quit
under sw_64. But for x86_64 qemu-i386, it can run WeChat.exe
correctly (although after enter main gui, it is not stable enough).
Thanks.
--
Chen Gang (陈刚)
Open, share, and attitude like air, water, and life which God blessed
next prev parent reply other threads:[~2016-01-26 10:20 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-01-11 9:01 [Qemu-devel] [PATCH v2 1/3] linux-user/mmap.c: Set prot page flags for the correct region in mmap_frag() chengang
2016-01-11 9:01 ` [Qemu-devel] [PATCH v2 2/3] linux-user/mmap.c: Remove useless variable p for mmap_frag chengang
2016-01-11 9:01 ` [Qemu-devel] [PATCH v2 3/3] linux-user/mmap.c: Use TARGET_PAGE_SIZE as the increasing step chengang
2016-01-25 15:07 ` [Qemu-devel] [PATCH v2 1/3] linux-user/mmap.c: Set prot page flags for the correct region in mmap_frag() Peter Maydell
2016-01-26 2:58 ` Chen Gang
2016-01-26 9:11 ` Peter Maydell
2016-01-26 10:19 ` Chen Gang [this message]
2016-01-26 10:26 ` Peter Maydell
2016-01-27 1:37 ` Chen Gang
2016-01-28 14:54 ` Peter Maydell
2016-01-29 1:40 ` 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=56A74849.6090404@emindsoft.com.cn \
--to=chengang@emindsoft.com.cn \
--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 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.