From: sof Date: Wed, 26 Mar 2003 02:12:38 +0000 (+0000) Subject: [project @ 2003-03-26 02:12:38 by sof] X-Git-Tag: Approx_11550_changesets_converted~1031 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=2a41e0eef5e106bccbf19b0aee561c2a19129c86;p=ghc-hetmet.git [project @ 2003-03-26 02:12:38 by sof] gen_map_mblocks(): add comment re: issues that need to be addressed should anyone want to tackle the ToDo item --- diff --git a/ghc/rts/MBlock.c b/ghc/rts/MBlock.c index ceb8856..1bf4e80 100644 --- a/ghc/rts/MBlock.c +++ b/ghc/rts/MBlock.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: MBlock.c,v 1.43 2003/03/20 15:43:31 simonmar Exp $ + * $Id: MBlock.c,v 1.44 2003/03/26 02:12:38 sof Exp $ * * (c) The GHC Team 1998-1999 * @@ -153,16 +153,25 @@ gen_map_mblocks (int size) // unmap the slop bits around the chunk we allocated slop = (W_)ret & MBLOCK_MASK; - + if (munmap(ret, MBLOCK_SIZE - slop) == -1) { - barf("gen_map_mblocks: munmap failed"); + barf("gen_map_mblocks: munmap failed"); } if (slop > 0 && munmap(ret+size-slop, slop) == -1) { - barf("gen_map_mblocks: munmap failed"); + barf("gen_map_mblocks: munmap failed"); } - + // ToDo: if we happened to get an aligned block, then don't - // unmap the excess, just use it. + // unmap the excess, just use it. For this to work, you + // need to keep in mind the following: + // * Calling my_mmap() with an 'addr' arg pointing to + // already my_mmap()ed space is OK and won't fail. + // * If my_mmap() can't satisfy the request at the + // given 'next_request' address in getMBlocks(), that + // you unmap the extra mblock mmap()ed here (or simply + // satisfy yourself that the slop introduced isn't worth + // salvaging.) + // // next time, try after the block we just got. ret += MBLOCK_SIZE - slop;