From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Nx5Hp-0001Pl-6F for qemu-devel@nongnu.org; Wed, 31 Mar 2010 17:17:17 -0400 Received: from [140.186.70.92] (port=57956 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Nx5HC-0001E5-4Q for qemu-devel@nongnu.org; Wed, 31 Mar 2010 17:17:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1Nx5GY-0006tA-B5 for qemu-devel@nongnu.org; Wed, 31 Mar 2010 17:16:32 -0400 Received: from are.twiddle.net ([75.149.56.221]:33246) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Nx5GY-0006sf-2S for qemu-devel@nongnu.org; Wed, 31 Mar 2010 17:15:58 -0400 Message-ID: <4BB3BB8A.6040007@twiddle.net> Date: Wed, 31 Mar 2010 14:15:54 -0700 From: Richard Henderson MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCHv2] Avoid page_set_flags() assert in qemu-user host page protection code References: <20100331210036.GA44152@triton8.kn-bremen.de> In-Reply-To: <20100331210036.GA44152@triton8.kn-bremen.de> Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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 03/31/2010 02:00 PM, 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 Acked-by: Richard Henderson > > --- 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); > } > >