mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 15:34:33 +00:00
Add backtrace log inside deadlocks
This commit is contained in:
parent
42bcdefc6b
commit
3aba6b4881
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include "../kernel.h"
|
#include "../kernel.h"
|
||||||
|
|
||||||
|
// #define PRINT_BACKTRACE
|
||||||
|
|
||||||
bool ForceUnlock = false;
|
bool ForceUnlock = false;
|
||||||
Atomic<size_t> LocksCount = 0;
|
Atomic<size_t> LocksCount = 0;
|
||||||
|
|
||||||
@ -31,6 +33,23 @@ void LockClass::DeadLock(SpinLockData Lock)
|
|||||||
CPU::Interrupts(CPU::Check) ? "enabled" : "disabled",
|
CPU::Interrupts(CPU::Check) ? "enabled" : "disabled",
|
||||||
CCore, Lock.Core, this->DeadLocks);
|
CCore, Lock.Core, this->DeadLocks);
|
||||||
|
|
||||||
|
#ifdef PRINT_BACKTRACE
|
||||||
|
if (KernelSymbolTable)
|
||||||
|
{
|
||||||
|
debug("\t\t%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s",
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(1)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(2)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(3)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(4)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(5)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(6)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(7)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(8)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(9)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// TODO: Print on screen too.
|
// TODO: Print on screen too.
|
||||||
|
|
||||||
this->DeadLocks++;
|
this->DeadLocks++;
|
||||||
@ -103,6 +122,23 @@ void LockClass::TimeoutDeadLock(SpinLockData Lock, uint64_t Timeout)
|
|||||||
CPU::Interrupts(CPU::Check) ? "enabled" : "disabled",
|
CPU::Interrupts(CPU::Check) ? "enabled" : "disabled",
|
||||||
CCore, Lock.Core, Timeout, Timeout - Counter);
|
CCore, Lock.Core, Timeout, Timeout - Counter);
|
||||||
|
|
||||||
|
#ifdef PRINT_BACKTRACE
|
||||||
|
if (KernelSymbolTable)
|
||||||
|
{
|
||||||
|
debug("\t\t%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s<-%s",
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(0)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(1)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(2)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(3)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(4)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(5)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(6)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(7)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(8)),
|
||||||
|
KernelSymbolTable->GetSymbolFromAddress((uintptr_t)__builtin_return_address(9)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (Timeout < Counter)
|
if (Timeout < Counter)
|
||||||
{
|
{
|
||||||
warn("Unlocking lock '%s' because of timeout. (%ld < %ld)", Lock.AttemptingToGet, Timeout, Counter);
|
warn("Unlocking lock '%s' because of timeout. (%ld < %ld)", Lock.AttemptingToGet, Timeout, Counter);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user