From: Blue Swirl <blauwirbel@gmail.com>
To: Richard Henderson <rth@twiddle.net>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 3/6] Fix last page errors in page_set_flags and page_check_range.
Date: Fri, 12 Feb 2010 21:47:54 +0200 [thread overview]
Message-ID: <f43fc5581002121147o66816654p45424bcd101c0868@mail.gmail.com> (raw)
In-Reply-To: <c976a2d492048edf2e60b9503b25f08ad25189ab.1265933757.git.rth@twiddle.net>
On Fri, Feb 12, 2010 at 12:57 AM, Richard Henderson <rth@twiddle.net> wrote:
> The addr < end comparison prevents the last page from being
> iterated; an iteration based on length avoids this problem.
Please make separate patches for unrelated changes. Now the essence of
the patch is very hard to see. Also pure formatting changes are not
very useful.
> ---
> exec.c | 54 +++++++++++++++++++++++++++---------------------------
> 1 files changed, 27 insertions(+), 27 deletions(-)
>
> diff --git a/exec.c b/exec.c
> index 766568b..ebbe6d0 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2222,35 +2222,31 @@ void page_dump(FILE *f)
>
> int page_get_flags(target_ulong address)
> {
> - PageDesc *p;
> -
> - p = page_find(address >> TARGET_PAGE_BITS);
> - if (!p)
> - return 0;
> - return p->flags;
> + PageDesc *p = page_find(address >> TARGET_PAGE_BITS);
> + return p ? p->flags : 0;
> }
For example this change does not make any difference but just add confusion.
>
> -/* modify the flags of a page and invalidate the code if
> - necessary. The flag PAGE_WRITE_ORG is positioned automatically
> - depending on PAGE_WRITE */
> +/* Modify the flags of a page and invalidate the code if necessary.
> + The flag PAGE_WRITE_ORG is positioned automatically depending
> + on PAGE_WRITE. The mmap_lock should already be held. */
> void page_set_flags(target_ulong start, target_ulong end, int flags)
> {
> - PageDesc *p;
> - target_ulong addr;
> + target_ulong addr, len;
>
> - /* mmap_lock should already be held. */
> start = start & TARGET_PAGE_MASK;
> end = TARGET_PAGE_ALIGN(end);
> - if (flags & PAGE_WRITE)
> +
> + if (flags & PAGE_WRITE) {
> flags |= PAGE_WRITE_ORG;
> - for(addr = start; addr < end; addr += TARGET_PAGE_SIZE) {
> - p = page_find_alloc(addr >> TARGET_PAGE_BITS);
> - /* We may be called for host regions that are outside guest
> - address space. */
Why remove the comment, is it no longer true?
> - if (!p)
> - return;
> - /* if the write protection is set, then we invalidate the code
> - inside */
> + }
> +
> + for (addr = start, len = end - start;
> + len != 0;
> + len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
> + PageDesc *p = page_find_alloc(addr >> TARGET_PAGE_BITS, 1);
> +
> + /* If the write protection bit is set, then we invalidate
> + the code inside. */
> if (!(p->flags & PAGE_WRITE) &&
> (flags & PAGE_WRITE) &&
> p->first_tb) {
> @@ -2266,18 +2262,22 @@ int page_check_range(target_ulong start, target_ulong len, int flags)
> target_ulong end;
> target_ulong addr;
>
> - if (start + len < start)
> - /* we've wrapped around */
> + if (start + len - 1 < start) {
> + /* We've wrapped around. */
> return -1;
> + }
>
> - end = TARGET_PAGE_ALIGN(start+len); /* must do before we loose bits in the next step */
> + /* END must be computed before we drop bits from START. */
> + end = TARGET_PAGE_ALIGN(start + len);
> start = start & TARGET_PAGE_MASK;
>
> - for(addr = start; addr < end; addr += TARGET_PAGE_SIZE) {
> + for (addr = start, len = end - start;
> + len != 0;
> + len -= TARGET_PAGE_SIZE, addr += TARGET_PAGE_SIZE) {
> p = page_find(addr >> TARGET_PAGE_BITS);
> - if( !p )
> + if (!p)
> return -1;
> - if( !(p->flags & PAGE_VALID) )
> + if (!(p->flags & PAGE_VALID))
> return -1;
>
> if ((flags & PAGE_READ) && !(p->flags & PAGE_READ))
> --
> 1.6.6
>
>
>
>
next prev parent reply other threads:[~2010-02-12 19:48 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-12 0:15 [Qemu-devel] [PATCH 0/6] Multi-level page tables and userland mapping fixes Richard Henderson
2010-02-11 22:20 ` [Qemu-devel] [PATCH 1/6] Move TARGET_PHYS_ADDR_SPACE_BITS to target-*/cpu.h Richard Henderson
2010-02-12 20:01 ` Blue Swirl
2010-02-12 20:25 ` Richard Henderson
2010-02-11 22:47 ` [Qemu-devel] [PATCH 2/6] Use TARGET_VIRT_ADDR_SPACE_BITS in h2g_valid Richard Henderson
2010-02-11 22:57 ` [Qemu-devel] [PATCH 3/6] Fix last page errors in page_set_flags and page_check_range Richard Henderson
2010-02-12 19:47 ` Blue Swirl [this message]
2010-02-12 20:16 ` Richard Henderson
2010-02-12 20:37 ` Blue Swirl
2010-02-11 23:11 ` [Qemu-devel] [PATCH 5/6] linux-user: Use h2g_valid in qemu_vmalloc Richard Henderson
2010-02-11 23:29 ` [Qemu-devel] [PATCH 6/6] linux-user: Fix mmap_find_vma returning invalid addresses Richard Henderson
2010-02-11 23:51 ` [Qemu-devel] [PATCH 4/6] Implement multi-level page tables Richard Henderson
2010-02-15 20:59 ` [Qemu-devel] [PATCH 0/7] Multi-level page tables and userland mapping fixes, v2 Richard Henderson
2010-02-11 22:47 ` [Qemu-devel] [PATCH 2/7] Use TARGET_VIRT_ADDR_SPACE_BITS in h2g_valid Richard Henderson
2010-02-28 14:11 ` Paul Brook
2010-02-11 23:11 ` [Qemu-devel] [PATCH 5/7] linux-user: Use h2g_valid in qemu_vmalloc Richard Henderson
2010-02-11 23:29 ` [Qemu-devel] [PATCH 6/7] linux-user: Fix mmap_find_vma returning invalid addresses Richard Henderson
2010-02-11 23:51 ` [Qemu-devel] [PATCH 4/7] Implement multi-level page tables Richard Henderson
2010-02-12 21:38 ` [Qemu-devel] [PATCH 1/7] Move TARGET_PHYS_ADDR_SPACE_BITS to target-*/cpu.h Richard Henderson
2010-02-12 22:03 ` [Qemu-devel] [PATCH 3/7] Fix last page errors in page_set_flags and page_check_range Richard Henderson
2010-02-15 19:58 ` [Qemu-devel] [PATCH 7/7] Assert arguments in range for guest address space Richard Henderson
2010-02-28 23:23 ` [Qemu-devel] [PATCH 0/6] Multi-level page tables and userland mapping fixes Paul Brook
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=f43fc5581002121147o66816654p45424bcd101c0868@mail.gmail.com \
--to=blauwirbel@gmail.com \
--cc=qemu-devel@nongnu.org \
--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).