Linus Groh
62185452f0
Kernel: Query OS-enabled CPUID features again at the end of cpu_setup()
...
For OSPKE this is a no-op as we don't enable PKU yet, but the state of
the OSXSAVE flag might have changed if we enabled XSAVE.
2022-04-08 18:53:42 +01:00
Linus Groh
87aabb5ef7
Kernel: Rename OSPKU CPUID feature flag to OSPKE
...
Unlike "XSAVE enabled by OS" being indicated by the OSXSAVE flag, in
this case it's "PKU enabled by OS" being indicated by the OSPKE flag.
2022-04-08 18:53:42 +01:00
Tiaan Louw
678555af97
Kernel: Adjust includes after file reorganization
2022-04-08 15:06:33 +01:00
Jelle Raaijmakers
7826729ab2
Kernel: Track big lock blocked threads in separate list
...
When we lock a mutex, eventually `Thread::block` is invoked which could
in turn invoke `Process::big_lock().restore_exclusive_lock()`. This
would then try to add the current thread to a different blocked thread
list then the one in use for the original mutex being locked, and
because it's an intrusive list, the thread is removed from its original
list during the `.append()`. When the original mutex eventually
unblocks, we no longer have the thread in the intrusive blocked threads
list and we panic.
Solve this by making the big lock mutex special and giving it its own
blocked thread list. Because the process big lock is temporary and is
being actively removed from e.g. syscalls, it's a matter of time before
we can also remove the fix introduced by this commit.
Fixes issue #9401 .
2022-04-06 18:27:19 +02:00
James Mintram
d94c7fa417
Kernel: Improve the aarch64 kernel source files disk layout
2022-04-06 08:56:20 +01:00
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