From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O0LvC-0004EU-Lq for qemu-devel@nongnu.org; Fri, 09 Apr 2010 17:39:26 -0400 Received: from [140.186.70.92] (port=56540 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O0LvA-0004EK-R2 for qemu-devel@nongnu.org; Fri, 09 Apr 2010 17:39:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O0Lv6-0000fB-3g for qemu-devel@nongnu.org; Fri, 09 Apr 2010 17:39:24 -0400 Received: from hall.aurel32.net ([88.191.82.174]:40861) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O0Lv5-0000f1-UC for qemu-devel@nongnu.org; Fri, 09 Apr 2010 17:39:20 -0400 Date: Fri, 9 Apr 2010 22:02:41 +0200 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCHv2] Avoid page_set_flags() assert in qemu-user host page protection code Message-ID: <20100409200241.GJ21042@volta.aurel32.net> References: <20100331210036.GA44152@triton8.kn-bremen.de> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20100331210036.GA44152@triton8.kn-bremen.de> List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Juergen Lock Cc: qemu-devel@nongnu.org On Wed, Mar 31, 2010 at 11:00:36PM +0200, Juergen Lock wrote: > V2 that uses endaddr = end-of-guest-address-space if !h2g_valid(endaddr) > after I found out that indeed works; and also disables the FreeBSD 6.x > /compat/linux/proc/self/maps fallback because it can return partial lines > if (at least I think that's the reason) the mappings change between > subsequent read() calls. > > Signed-off-by: Juergen Lock Thanks, applied. > --- a/exec.c > +++ b/exec.c > @@ -306,13 +306,14 @@ static void page_init(void) > > if (h2g_valid(endaddr)) { > endaddr = h2g(endaddr); > - page_set_flags(startaddr, endaddr, PAGE_RESERVED); > } else { > #if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS > endaddr = ~0ul; > - page_set_flags(startaddr, endaddr, PAGE_RESERVED); > +#else > + endaddr = ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS) - 1; > #endif > } > + page_set_flags(startaddr, endaddr, PAGE_RESERVED); > } > } > free(freep); > @@ -323,11 +324,7 @@ static void page_init(void) > > last_brk = (unsigned long)sbrk(0); > > -#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__) > - f = fopen("/compat/linux/proc/self/maps", "r"); > -#else > f = fopen("/proc/self/maps", "r"); > -#endif > if (f) { > mmap_lock(); > > @@ -343,7 +340,11 @@ static void page_init(void) > if (h2g_valid(endaddr)) { > endaddr = h2g(endaddr); > } else { > +#if TARGET_ABI_BITS <= L1_MAP_ADDR_SPACE_BITS > endaddr = ~0ul; > +#else > + endaddr = ((abi_ulong)1 << L1_MAP_ADDR_SPACE_BITS) - 1; > +#endif > } > page_set_flags(startaddr, endaddr, PAGE_RESERVED); > } > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net