/// <inheritdoc/> protected override KernelResult Unmap(ulong address, ulong pagesCount) { KPageList pagesToClose = new KPageList(); var regions = _cpuMemory.GetPhysicalRegions(address, pagesCount * PageSize); foreach (var region in regions) { ulong pa = GetDramAddressFromHostAddress(region.Address); if (pa == ulong.MaxValue) { continue; } pa += DramMemoryMap.DramBase; if (DramMemoryMap.IsHeapPhysicalAddress(pa)) { pagesToClose.AddRange(pa, region.Size / PageSize); } } _cpuMemory.Unmap(address, pagesCount * PageSize); pagesToClose.DecrementPagesReferenceCount(Context.MemoryManager); return(KernelResult.Success); }
public void Dispose() { _pageList?.DecrementPagesReferenceCount(_manager); }