mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-08 20:50:52 -08:00
Mfsextend now takes (base, limit) instead of (base, size) for consistency with the rest of the mps.
Copied from Perforce Change: 194408
This commit is contained in:
parent
f4ec71167c
commit
9dadfb7444
3 changed files with 17 additions and 12 deletions
|
|
@ -852,15 +852,16 @@ static void arenaFreePage(Arena arena, Addr base, Pool pool)
|
|||
|
||||
static Res arenaExtendCBSBlockPool(Range pageRangeReturn, Arena arena)
|
||||
{
|
||||
Addr pageBase;
|
||||
Addr pageBase, pageLimit;
|
||||
Res res;
|
||||
|
||||
res = arenaAllocPage(&pageBase, arena, ArenaCBSBlockPool(arena));
|
||||
if (res != ResOK)
|
||||
return res;
|
||||
MFSExtend(ArenaCBSBlockPool(arena), pageBase, ArenaGrainSize(arena));
|
||||
pageLimit = AddrAdd(pageBase, ArenaGrainSize(arena));
|
||||
MFSExtend(ArenaCBSBlockPool(arena), pageBase, pageLimit);
|
||||
|
||||
RangeInitSize(pageRangeReturn, pageBase, ArenaGrainSize(arena));
|
||||
RangeInit(pageRangeReturn, pageBase, pageLimit);
|
||||
return ResOK;
|
||||
}
|
||||
|
||||
|
|
@ -940,22 +941,23 @@ static void arenaFreeLandInsertSteal(Range rangeReturn, Arena arena,
|
|||
res = arenaFreeLandInsertExtend(rangeReturn, arena, rangeIO);
|
||||
|
||||
if (res != ResOK) {
|
||||
Addr pageBase;
|
||||
Addr pageBase, pageLimit;
|
||||
Tract tract;
|
||||
AVER(ResIsAllocFailure(res));
|
||||
|
||||
/* Steal a page from the memory we're about to free. */
|
||||
AVER(RangeSize(rangeIO) >= ArenaGrainSize(arena));
|
||||
pageBase = RangeBase(rangeIO);
|
||||
RangeInit(rangeIO, AddrAdd(pageBase, ArenaGrainSize(arena)),
|
||||
RangeLimit(rangeIO));
|
||||
pageLimit = AddrAdd(pageBase, ArenaGrainSize(arena));
|
||||
AVER(pageLimit <= RangeLimit(rangeIO));
|
||||
RangeInit(rangeIO, pageLimit, RangeLimit(rangeIO));
|
||||
|
||||
/* Steal the tract from its owning pool. */
|
||||
tract = TractOfBaseAddr(arena, pageBase);
|
||||
TractFinish(tract);
|
||||
TractInit(tract, ArenaCBSBlockPool(arena), pageBase);
|
||||
|
||||
MFSExtend(ArenaCBSBlockPool(arena), pageBase, ArenaGrainSize(arena));
|
||||
MFSExtend(ArenaCBSBlockPool(arena), pageBase, pageLimit);
|
||||
|
||||
/* Try again. */
|
||||
res = LandInsert(rangeReturn, ArenaFreeLand(arena), rangeIO);
|
||||
|
|
|
|||
|
|
@ -166,16 +166,18 @@ static void MFSFinish(Inst inst)
|
|||
}
|
||||
|
||||
|
||||
void MFSExtend(Pool pool, Addr base, Size size)
|
||||
void MFSExtend(Pool pool, Addr base, Addr limit)
|
||||
{
|
||||
MFS mfs = MustBeA(MFSPool, pool);
|
||||
Word i, unitsPerExtent;
|
||||
Size size;
|
||||
Size unitSize;
|
||||
Size ringSize;
|
||||
Header header = NULL;
|
||||
Ring mfsRing;
|
||||
|
||||
AVER(size == mfs->extendBy);
|
||||
AVER(base < limit);
|
||||
AVER(AddrOffset(base, limit) == mfs->extendBy);
|
||||
|
||||
/* Ensure that the memory we're adding belongs to this pool. This is
|
||||
automatic if it was allocated using ArenaAlloc, but if the memory is
|
||||
|
|
@ -193,7 +195,8 @@ void MFSExtend(Pool pool, Addr base, Size size)
|
|||
|
||||
ringSize = SizeAlignUp(sizeof(RingStruct), MPS_PF_ALIGN);
|
||||
base = AddrAdd(base, ringSize);
|
||||
size -= ringSize;
|
||||
AVER(base < limit);
|
||||
size = AddrOffset(base, limit);
|
||||
|
||||
/* Update accounting */
|
||||
mfs->total += size;
|
||||
|
|
@ -255,7 +258,7 @@ static Res MFSAlloc(Addr *pReturn, Pool pool, Size size)
|
|||
if(res != ResOK)
|
||||
return res;
|
||||
|
||||
MFSExtend(pool, base, mfs->extendBy);
|
||||
MFSExtend(pool, base, AddrAdd(base, mfs->extendBy));
|
||||
|
||||
/* The first unit in the region is now the head of the new free list. */
|
||||
f = mfs->freeList;
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ extern const struct mps_key_s _mps_key_MFSExtendSelf;
|
|||
#define MFSExtendSelf (&_mps_key_MFSExtendSelf)
|
||||
#define MFSExtendSelf_FIELD b
|
||||
|
||||
extern void MFSExtend(Pool pool, Addr base, Size size);
|
||||
extern void MFSExtend(Pool pool, Addr base, Addr limit);
|
||||
|
||||
typedef void MFSExtentVisitor(Pool pool, Addr base, Size size,
|
||||
void *closure);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue