Andreas Kling
9b9b05eabf
Kernel: Make sys$mmap() round requested VM size to page size multiple
...
This fixes an issue where File::mmap() overrides would fail because they
were expecting to be called with a size evenly divisible by PAGE_SIZE.
2022-04-05 22:26:37 +02:00
Andreas Kling
b28beb691e
Kernel: Protect Mutex's thread lists with a spinlock
2022-04-05 14:44:50 +02:00
Andreas Kling
0a83c03546
Kernel: Don't unregister Region from RegionTree *before* unmapping it
...
If we unregister from the RegionTree before unmapping, there's a race
where a new region can get inserted at the same address that we're about
to unmap. If this happens, ~Region() will then unmap the newly inserted
region, which now finds itself with cleared-out page table entries.
2022-04-05 13:46:50 +02:00
Andreas Kling
a3db0ab14f
Kernel: Remove MemoryManager::region_tree() accessor
...
Let's not have a way to grab at the RegionTree from outside of MM.
2022-04-05 13:45:10 +02:00
Andreas Kling
f8d798b667
Kernel: Move allocate_unbacked_region_anywhere() to MemoryManager
...
This didn't need to be in RegionTree, and since it's specific to kernel
VM anyway, let's move it to MemoryManager.
2022-04-05 13:45:10 +02:00
Andreas Kling
e0da8da657
Kernel: Move create_identity_mapped_region() to MemoryManager
...
This had no business being in RegionTree, since RegionTree doesn't track
identity-mapped regions anyway. (We allow *any* address to be identity
mapped, not just the ones that are part of the RegionTree's range.)
2022-04-05 13:45:10 +02:00
Andreas Kling
cfb61cbd54
Kernel: Add RegionTree::find_region_containing(address or range)
...
Let's encapsulate looking up regions so clients don't have to dig into
RegionTree internals.
2022-04-05 12:23:47 +02:00
Andreas Kling
da7ea2556e
Kernel: Add RegionTree::remove(Region&)
...
This allows clients to remove a region from the tree without reaching
into the RegionTree internals.
2022-04-05 11:57:53 +02:00
Andreas Kling
f0f97e1db0
Kernel: Take the RegionTree spinlock when inspecting tree from outside
...
This patch adds RegionTree::get_lock() which exposes the internal lock
inside RegionTree. We can then lock it from the outside when doing
lookups or traversal.
This solution is not very beautiful, we should find a way to protect
this data with SpinlockProtected or something similar. This is a stopgap
patch to try and fix the currently flaky CI.
2022-04-05 01:15:22 +02:00
Andreas Kling
e3e1d79a7d
Kernel: Remove unused ShouldDeallocateVirtualRange parameters
...
Since there is no separate virtual range allocator anymore, this is
no longer used for anything.
2022-04-05 01:15:22 +02:00
James Mintram
df9a833d7a
Kernel: Add VERIFY_NOT_REACHED to aarch64 PageDirectory.cpp
2022-04-04 14:35:54 -07:00
James Mintram
283d8e8f51
Kernel: Add VERIFY_NOT_REACHED to aarch64 locking functions
2022-04-04 14:35:54 -07:00
James Mintram
e98ea8a977
Kernel: Add VERIFY_NOT_REACHED to the aarch64 handle_crash function
2022-04-04 14:35:54 -07:00
James Mintram
d014c0501d
Kernel: Remove unused dummy function from dummy.cpp
2022-04-04 14:35:54 -07:00
James Mintram
bd7acd4b90
Kernel: Add VERIFY_NOT_REACHED to stub functions in aarch64 dummy.cpp
2022-04-04 14:35:54 -07:00
James Mintram
92a8383101
Kernel: Add VERIFY_NOT_REACHED to stub aarch64 Processor functions
2022-04-04 14:35:54 -07:00
James Mintram
463910df98
Kernel: Print out assertion info in __assertion_failed on aarch64
2022-04-04 22:25:33 +01:00
Andreas Kling
9bb45ab3a6
Kernel: Add debug logging to learn more about unexpected NP faults
2022-04-04 17:10:30 +02:00
Andreas Kling
d1f2d63840
Kernel: Remove unused Region::try_create_kernel_only()
2022-04-04 12:34:13 +02:00
Andreas Kling
63ddbaf68a
Kernel: Tweak broken dbgln_if() in sys$fork() after RegionTree changes
2022-04-04 11:05:49 +02:00
Andreas Kling
12b612ab14
Kernel: Mark sys$adjtime() as not needing the big lock
...
This syscall works on global kernel state and so doesn't need protection
from threads in the same process.
2022-04-04 00:42:18 +02:00
Andreas Kling
4306422f29
Kernel: Mark sys$clock_settime() as not needing the big log
...
This syscall ends up disabling interrupts while changing the time,
and the clock is a global resource anyway, so preventing threads in the
same process from running wouldn't solve anything.
2022-04-04 00:42:18 +02:00
Andreas Kling
55814f6e0e
Kernel: Mark sys$sched_{set,get}param() as not needing the big lock
...
Both of these syscalls take the scheduler lock while accessing the
thread priority, so there's no reliance on the process big lock.
2022-04-04 00:42:18 +02:00
Andreas Kling
9250ac0c24
Kernel: Randomize non-specific VM allocations done by sys$execve()
...
Stuff like TLS regions, main thread stacks, etc. All deserve to be
randomized unless the ELF requires specific placement. :^)
2022-04-04 00:42:18 +02:00
Brian Gianforcaro
8b750998d2
Kernel: Fix aarch64 kernel build on case sensitive file systems
...
The dummy file has the wrong case, so it would fail to be found on case
sensitive file systems.
2022-04-03 15:18:36 -07:00
Idan Horowitz
d6e4a25e0c
Kernel: Use the InstrusiveRedBlackTree::begin_from(V&) API
...
This let's us skip an O(logn) tree traversal.
2022-04-04 00:16:11 +02:00
Idan Horowitz
30e6b313b4
Kernel: Remove false condition in RegionTree::allocate_range_specific
...
Since find_largest_not_above returns the highest region that is below
the end of the request range, no region after it can intersect with it.
2022-04-04 00:16:11 +02:00
James Mintram
f943e97b76
Kernel: Add RegionTree and remove VirtualRangeAllocator from aarch64
2022-04-04 00:14:20 +02:00
Andreas Kling
db75bab493
Kernel: Actually fix accidental overlaps in allocate_range_specific()
...
Thanks to Idan for spotting this! :^)
2022-04-03 23:58:57 +02:00
James Mintram
2b442ae44f
Kernel: Add kmalloc.cpp to aarch64
2022-04-03 23:21:04 +02:00
Linus Groh
b0f701d053
Kernel: Convert ProcessorInfo::build_brand_string() to StringBuilder
2022-04-03 23:20:33 +02:00
Linus Groh
33004f9b9d
Kernel: Add hypervisor_vendor_id entry to /proc/cpuinfo
2022-04-03 23:20:33 +02:00
Linus Groh
0f27432ec6
Kernel+SystemMonitor+lscpu: Rename 'CPUID' -> 'Vendor ID'
...
This is what the Intel manual, as well as Linux's cpuinfo calls it.
2022-04-03 23:20:33 +02:00
Linus Groh
3f9c2495e5
Kernel: Remove EBX, ECX, and EDX values from hypervisor dmesgln()
2022-04-03 23:20:33 +02:00
Linus Groh
8d96525b9d
Kernel: Move hypervisor vendor ID string to ProcessorInfo
...
This will make it possible to expose it in /proc/cpuinfo. :^)
2022-04-03 23:20:33 +02:00
Linus Groh
f6181cd47e
Kernel: Make ProcessorInfo::build_foo_string() private
2022-04-03 23:20:33 +02:00
Linus Groh
afce63fffc
Kernel: Move feature string building to ProcessorInfo
...
Other than a dmesgln(), ProcessorInfo is the only user of this function
and is already responsible for building other CPUID-related strings.
2022-04-03 23:20:33 +02:00
Linus Groh
53a95a5347
Kernel: Rename some ProcessorInfo members to match Intel manual
...
Let's use terminology from the the Intel manual to avoid confusion.
Also add `_string` suffixes to better distinguish the numeric values
from the string values.
2022-04-03 23:20:33 +02:00
Linus Groh
ebe2cf8995
Kernel: Move private ProcessorInfo members to the end
2022-04-03 23:20:33 +02:00
Andreas Kling
9765f9f67e
Kernel: Fix accidental overlaps in RegionTree::allocate_range_specific()
...
Thanks to Idan for spotting this! :^)
2022-04-03 23:07:29 +02:00
Andreas Kling
36d829b97c
Kernel: Mark sys$listen() as not needing the big lock
...
This syscall already performs the necessary locking and so doesn't
need to rely on the process big lock.
2022-04-03 22:22:22 +02:00
Andreas Kling
e103c5fe2d
Kernel: Don't hog file descriptor table lock in sys$bind()
...
We don't need to hold the lock across the entire syscall. Once we've
fetched the open file description we're interested in, we can let go.
2022-04-03 22:20:34 +02:00
Andreas Kling
85ceab1fec
Kernel: Don't hog file descriptor table lock in sys$listen()
...
We don't need to hold the lock across the entire syscall. Once we've
fetched the open file description we're interested in, we can let go.
2022-04-03 22:18:57 +02:00
Andreas Kling
bc4282c773
Kernel: Mark sys$sendfd() and sys$recvfd() as not needing the big lock
...
These syscalls already perform the necessary locking and don't rely on
the process big lock.
2022-04-03 22:06:03 +02:00
Andreas Kling
92dfcdb6b1
Kenrel: Update a dmesgln() to say "RegionTree" instead of old class name
2022-04-03 22:00:19 +02:00
Andreas Kling
9e1da1f4f5
Kernel: Add a little explainer comment above RegionTree
2022-04-03 21:59:48 +02:00
Andreas Kling
8b01789ec4
Kernel: Improve RegionTree's internal helper function names
...
It's a bit nicer if functions that allocate ranges have some kind of
name that includes both "allocate" and "range". :^)
2022-04-03 21:56:16 +02:00
Andreas Kling
32dea6bde5
Kernel: Add missing include to PageDirectory.h
2022-04-03 21:51:58 +02:00
Andreas Kling
858b196c59
Kernel: Unbreak ASLR in the new RegionTree world
...
Functions that allocate and/or place a Region now take a parameter
that tells it whether to randomize unspecified addresses.
2022-04-03 21:51:58 +02:00
Andreas Kling
e89c9ed2ca
Kernel: Stop exposing RegionTree API for VM range allocation
...
...and remove the last remaining client of the API. It's no longer
possible to ask the RegionTree for a VM range. You can only ask it to
place your Region somewhere in available space.
2022-04-03 21:51:58 +02:00