1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2026-01-13 01:20:59 +00:00
serenity/Kernel
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
..
API Kernel: Mark sys$adjtime() as not needing the big lock 2022-04-04 00:42:18 +02:00
Arch Kernel: Improve the aarch64 kernel source files disk layout 2022-04-06 08:56:20 +01:00
Bus Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Devices Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
FileSystem Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Firmware Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Graphics Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Heap Kernel: Move allocate_unbacked_region_anywhere() to MemoryManager 2022-04-05 13:45:10 +02:00
Interrupts Kernel: Move create_identity_mapped_region() to MemoryManager 2022-04-05 13:45:10 +02:00
Library Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Locking Kernel: Track big lock blocked threads in separate list 2022-04-06 18:27:19 +02:00
Memory Kernel: Don't unregister Region from RegionTree *before* unmapping it 2022-04-05 13:46:50 +02:00
Net Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Prekernel Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Storage Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Syscalls Kernel: Make sys$mmap() round requested VM size to page size multiple 2022-04-05 22:26:37 +02:00
Tasks Kernel: Remove unnecessary includes from Thread.h 2022-01-30 16:21:59 +01:00
Time Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
TTY Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
AddressSanitizer.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
AddressSanitizer.h Everywhere: Use bgianf@serenityos.org for my copyright attribution 2021-04-22 21:15:54 +02:00
Assertions.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
AtomicEdgeAction.h Kernel: Add per platform Processor.h headers 2021-10-14 01:23:08 +01:00
BootInfo.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
CMakeLists.txt Kernel: Improve the aarch64 kernel source files disk layout 2022-04-06 08:56:20 +01:00
CMOS.cpp Kernel: Move x86 IO instructions code into the x86 specific folder 2021-10-01 12:27:20 +02:00
CMOS.h Everything: Move to SPDX license identifiers in all files. 2021-04-22 11:22:27 +02:00
CommandLine.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
CommandLine.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Coredump.cpp Kernel: Store AddressSpace memory regions in an IntrusiveRedBlackTree 2022-04-03 21:51:58 +02:00
Coredump.h Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T> 2021-11-08 01:10:53 +01:00
Debug.h.in Kernel: Stop debug spam when using mmap on /dev/mem device 2022-04-01 19:59:45 +02:00
DoubleBuffer.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
DoubleBuffer.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
embedmap.sh Kernel: Make new kernel build process work on macOS 2021-07-15 11:04:30 +02:00
Forward.h Kernel: Use intrusive RegionTree solution for kernel regions as well 2022-04-03 21:51:58 +02:00
FutexQueue.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
FutexQueue.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
GlobalProcessExposed.cpp Kernel: Add hypervisor_vendor_id entry to /proc/cpuinfo 2022-04-03 23:20:33 +02:00
init.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KBuffer.h Kernel: Propagate overflow errors from Memory::page_round_up 2021-12-28 23:08:50 +01:00
KBufferBuilder.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KBufferBuilder.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KLexicalPath.cpp Everywhere: Pass AK::StringView by value 2021-11-11 01:27:46 +01:00
KLexicalPath.h Everywhere: Pass AK::StringView by value 2021-11-11 01:27:46 +01:00
kprintf.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
kstdio.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KString.cpp Kernel: Add an error propagating KString::format(..) API :^) 2021-11-30 11:16:35 +01:00
KString.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KSyms.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
KSyms.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
MiniStdLib.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
mkmap.sh Kernel: Use the toolchain's nm in mkmap.sh 2021-12-30 18:10:51 +01:00
Multiboot.h Kernel: Only use multiboot framebuffer details if present 2022-01-06 22:34:11 +01:00
Panic.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Panic.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
PerformanceEventBuffer.cpp Kernel: Store AddressSpace memory regions in an IntrusiveRedBlackTree 2022-04-03 21:51:58 +02:00
PerformanceEventBuffer.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
PerformanceManager.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
PhysicalAddress.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Process.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Process.h Kernel: Track big lock blocked threads in separate list 2022-04-06 18:27:19 +02:00
ProcessExposed.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ProcessExposed.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ProcessGroup.cpp Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T> 2021-11-08 01:10:53 +01:00
ProcessGroup.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ProcessProcFSTraits.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ProcessSpecificExposed.cpp Kernel: Store AddressSpace memory regions in an IntrusiveRedBlackTree 2022-04-03 21:51:58 +02:00
Random.cpp Kernel: Make KernelRng not inherit from Lockable 2021-12-26 21:22:59 +01:00
Random.h Kernel: Make PhysicalRegion.cpp compile on aarch64 2022-04-02 19:34:20 -07:00
RTC.cpp Everywhere: Fix many spelling errors 2022-01-07 10:56:59 +01:00
RTC.h Kernel: Ensure we read valid values from the RTC CMOS registers 2021-08-04 19:53:04 +02:00
SanCov.cpp Kernel: Add some implied auto qualifiers 2021-12-30 14:32:17 +01:00
Scheduler.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Scheduler.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Sections.h Kernel: Use the whole kernel PD range when randomizing the KASLR offset 2022-03-23 19:49:49 +02:00
StdLib.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
StdLib.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Syscall.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
Thread.cpp Kernel: Unbreak ASLR in the new RegionTree world 2022-04-03 21:51:58 +02:00
Thread.h Kernel: Track big lock blocked threads in separate list 2022-04-06 18:27:19 +02:00
ThreadBlockers.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ThreadTracer.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
ThreadTracer.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
TimerQueue.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
TimerQueue.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
UBSanitizer.cpp Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
UnixTypes.h Kernel: Add support for SA_SIGINFO 2022-03-04 20:07:05 +01:00
UserOrKernelBuffer.cpp Kernel: Replace KResult and KResultOr<T> with Error and ErrorOr<T> 2021-11-08 01:10:53 +01:00
UserOrKernelBuffer.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
VirtualAddress.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
WaitQueue.cpp Kernel: Don't register thread as custom data for WaitQueueBlocker 2021-08-24 01:57:11 +02:00
WaitQueue.h Everywhere: Run clang-format 2022-04-01 21:24:45 +01:00
WorkQueue.cpp Kernel: Mark kernel smart-pointer classes as [[nodiscard]] 2021-12-05 15:31:03 +01:00
WorkQueue.h Kernel: Add missing includes in ThreadTracer and WorkQueue 2021-12-30 14:32:17 +01:00