All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Henderson <rth@twiddle.net>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [patch] linux-user: problem with mmap_find_vma
Date: Sun, 13 Dec 2009 20:14:48 -0800	[thread overview]
Message-ID: <4B25BBB8.5070807@twiddle.net> (raw)

[-- Attachment #1: Type: text/plain, Size: 746 bytes --]

With host x86_64 target alpha, a trivial recompile started producing 
"MMU faults".  Eventually, I determined that adding "-B 0x100000000" was 
enough to produce the fault with the original working executable.  I 
expect, but have not verified, that a similar failure can be elicited 
with any 64-bit host and any target using such a large explicit base.

The cause is that the default address used by mmap_find_vma may not be 
inside the area defined for use by the guest by GUEST_BASE.  Certainly 
this patch fixes the failure I was seeing.

I cannot see though all the macro ugliness to understand what happens 
when GUEST_BASE is not in use to know what needs happening there. 
Please feel free to edit the ??? comment to match reality.


r~

[-- Attachment #2: commit-find-vma --]
[-- Type: text/plain, Size: 1727 bytes --]

commit a85b499eabe5a71bb02305c2856c136590276edf
Author: Richard Henderson <rth@twiddle.net>
Date:   Sun Dec 13 20:00:39 2009 -0800

    linux-user: Adjust mmap_find_vma for guest_base.
    
    The definition of mmap_find_vma requires guest addresses as input
    to the START parameter.  However, when START==0 i.e. no preferred
    address, we use a value pre-defined value which may not be within
    the area defined by GUEST_BASE.  Make sure and adjust that value
    via g2h before using it.

diff --git a/linux-user/mmap.c b/linux-user/mmap.c
index 144fb7c..7e04c23 100644
--- a/linux-user/mmap.c
+++ b/linux-user/mmap.c
@@ -266,11 +266,13 @@ static int mmap_frag(abi_ulong real_start,
 
 #if defined(__CYGWIN__)
 /* Cygwin doesn't have a whole lot of address space.  */
-static abi_ulong mmap_next_start = 0x18000000;
+#define MMAP_FIRST_START 0x18000000
 #else
-static abi_ulong mmap_next_start = 0x40000000;
+#define MMAP_FIRST_START 0x40000000
 #endif
 
+static abi_ulong mmap_next_start;
+
 unsigned long last_brk;
 
 /*
@@ -288,8 +290,19 @@ abi_ulong mmap_find_vma(abi_ulong start, abi_ulong size)
     start &= qemu_host_page_mask;
 
     /* If 'start' == 0, then a default start address is used. */
-    if (start == 0)
+    if (start == 0) {
         start = mmap_next_start;
+        if (start == 0) {
+#ifdef CONFIG_USE_GUEST_BASE
+            mmap_next_start = start = (abi_ulong) g2h(MMAP_FIRST_START);
+#else
+            /* ??? What sort of host-guest remapping do we use for
+               when GUEST_BASE is not in use?  Presumably we can
+               simply map at any address we choose.  */
+            mmap_next_start = start = MMAP_FIRST_START;
+#endif
+        }
+    }
 
     addr = start;
 

             reply	other threads:[~2009-12-14  4:14 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-12-14  4:14 Richard Henderson [this message]
2009-12-14  4:43 ` [Qemu-devel] [patch] linux-user: problem with mmap_find_vma Richard Henderson

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=4B25BBB8.5070807@twiddle.net \
    --to=rth@twiddle.net \
    --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.