1
Fork 0
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:
Gareth Rees 2018-07-04 16:31:45 +01:00
parent f4ec71167c
commit 9dadfb7444
3 changed files with 17 additions and 12 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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);