Fix mmap(2) and munmap(2) performance being extremely bad.

Now it's only very bad.
This commit is contained in:
Jonas 'Sortie' Termansen 2024-08-20 19:56:37 +02:00
parent 049232d475
commit 87b10f8d86
2 changed files with 11 additions and 13 deletions

View file

@ -127,14 +127,9 @@ void UnmapMemory(Process* process, uintptr_t addr, size_t size)
size_t conflict_index = conflict_offset / sizeof(struct segment);
Memory::UnmapRange(conflict->addr, conflict->size, PAGE_USAGE_USER_SPACE);
Memory::Flush();
if ( conflict_index + 1 == process->segments_used )
{
process->segments_used--;
continue;
}
process->segments[conflict_index] = process->segments[--process->segments_used];
qsort(process->segments, process->segments_used,
sizeof(struct segment), segmentcmp);
process->segments_used--;
for ( size_t i = conflict_index; i < process->segments_used; i++ )
process->segments[i] = process->segments[i + 1];
continue;
}

View file

@ -96,11 +96,14 @@ bool AddSegment(Process* process, const struct segment* new_segment)
}
// Add the new segment to the segment list.
process->segments[process->segments_used++] = *new_segment;
// Sort the segment list after address.
qsort(process->segments, process->segments_used, sizeof(struct segment),
segmentcmp);
size_t i = 0;
while ( i < process->segments_used &&
segmentcmp(&process->segments[i], new_segment) < 0 )
i++;
for ( size_t n = process->segments_used; i < n; n-- )
process->segments[n] = process->segments[n - 1];
process->segments[i] = *new_segment;
process->segments_used++;
return true;
}