private NvInternalResult FreeSpace(ref FreeSpaceArguments arguments) { AddressSpaceContext addressSpaceContext = GetAddressSpaceContext(Context); NvInternalResult result = NvInternalResult.Success; lock (addressSpaceContext) { ulong size = (ulong)arguments.Pages * (ulong)arguments.PageSize; if (addressSpaceContext.RemoveReservation(arguments.Offset)) { _memoryAllocator.DeallocateRange(arguments.Offset, size); addressSpaceContext.Gmm.Unmap(arguments.Offset, size); } else { Logger.Warning?.Print(LogClass.ServiceNv, $"Failed to free offset 0x{arguments.Offset:x16} size 0x{size:x16}!"); result = NvInternalResult.InvalidInput; } } return(result); }
private NvInternalResult FreeSpace(ref FreeSpaceArguments arguments) { AddressSpaceContext addressSpaceContext = GetAddressSpaceContext(Owner); NvInternalResult result = NvInternalResult.Success; lock (addressSpaceContext) { ulong size = (ulong)arguments.Pages * (ulong)arguments.PageSize; if (addressSpaceContext.RemoveReservation(arguments.Offset)) { addressSpaceContext.Vmm.Free(arguments.Offset, (long)size); } else { Logger.PrintWarning(LogClass.ServiceNv, $"Failed to free offset 0x{arguments.Offset:x16} size 0x{size:x16}!"); result = NvInternalResult.InvalidInput; } } return(result); }