mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2024-11-15 11:33:32 +01:00
kern: minor fixes to prevent core0-2 panics during boot
This commit is contained in:
parent
bb3f7c8ab9
commit
d2a888d9e8
@ -306,7 +306,7 @@ namespace ams::kern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE Member *GetScheduledFront(s32 core, s32 priority) const {
|
constexpr ALWAYS_INLINE Member *GetScheduledFront(s32 core, s32 priority) const {
|
||||||
return this->scheduled_queue.GetFront(core, priority);
|
return this->scheduled_queue.GetFront(priority, core);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE Member *GetSuggestedFront(s32 core) const {
|
constexpr ALWAYS_INLINE Member *GetSuggestedFront(s32 core) const {
|
||||||
@ -314,7 +314,7 @@ namespace ams::kern {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE Member *GetSuggestedFront(s32 core, s32 priority) const {
|
constexpr ALWAYS_INLINE Member *GetSuggestedFront(s32 core, s32 priority) const {
|
||||||
return this->suggested_queue.GetFront(core, priority);
|
return this->suggested_queue.GetFront(priority, core);
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr ALWAYS_INLINE Member *GetScheduledNext(s32 core, const Member *member) const {
|
constexpr ALWAYS_INLINE Member *GetScheduledNext(s32 core, const Member *member) const {
|
||||||
|
@ -88,7 +88,6 @@ namespace ams::kern {
|
|||||||
static ALWAYS_INLINE void SetSchedulerUpdateNeeded() { s_scheduler_update_needed = true; }
|
static ALWAYS_INLINE void SetSchedulerUpdateNeeded() { s_scheduler_update_needed = true; }
|
||||||
static ALWAYS_INLINE void ClearSchedulerUpdateNeeded() { s_scheduler_update_needed = false; }
|
static ALWAYS_INLINE void ClearSchedulerUpdateNeeded() { s_scheduler_update_needed = false; }
|
||||||
static ALWAYS_INLINE KSchedulerPriorityQueue &GetPriorityQueue() { return s_priority_queue; }
|
static ALWAYS_INLINE KSchedulerPriorityQueue &GetPriorityQueue() { return s_priority_queue; }
|
||||||
static NOINLINE void SetInterruptTaskThreadRunnable();
|
|
||||||
|
|
||||||
static NOINLINE u64 UpdateHighestPriorityThreadsImpl();
|
static NOINLINE u64 UpdateHighestPriorityThreadsImpl();
|
||||||
public:
|
public:
|
||||||
@ -96,6 +95,8 @@ namespace ams::kern {
|
|||||||
static ALWAYS_INLINE bool CanSchedule() { return GetCurrentThread().GetDisableDispatchCount() == 0; }
|
static ALWAYS_INLINE bool CanSchedule() { return GetCurrentThread().GetDisableDispatchCount() == 0; }
|
||||||
static ALWAYS_INLINE bool IsSchedulerLockedByCurrentThread() { return s_scheduler_lock.IsLockedByCurrentThread(); }
|
static ALWAYS_INLINE bool IsSchedulerLockedByCurrentThread() { return s_scheduler_lock.IsLockedByCurrentThread(); }
|
||||||
|
|
||||||
|
static NOINLINE void SetInterruptTaskThreadRunnable();
|
||||||
|
|
||||||
static ALWAYS_INLINE void DisableScheduling() {
|
static ALWAYS_INLINE void DisableScheduling() {
|
||||||
MESOSPHERE_ASSERT(GetCurrentThread().GetDisableDispatchCount() >= 0);
|
MESOSPHERE_ASSERT(GetCurrentThread().GetDisableDispatchCount() >= 0);
|
||||||
GetCurrentThread().DisableDispatch();
|
GetCurrentThread().DisableDispatch();
|
||||||
|
@ -345,6 +345,8 @@ namespace ams::kern {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Wakeup();
|
||||||
|
|
||||||
Result SetPriorityToIdle();
|
Result SetPriorityToIdle();
|
||||||
|
|
||||||
Result Run();
|
Result Run();
|
||||||
|
@ -89,7 +89,9 @@ namespace ams::kern {
|
|||||||
void KInterruptTaskManager::EnqueueTask(KInterruptTask *task) {
|
void KInterruptTaskManager::EnqueueTask(KInterruptTask *task) {
|
||||||
MESOSPHERE_ASSERT(!KInterruptManager::AreInterruptsEnabled());
|
MESOSPHERE_ASSERT(!KInterruptManager::AreInterruptsEnabled());
|
||||||
|
|
||||||
MESOSPHERE_TODO_IMPLEMENT();
|
/* Enqueue the task and signal the scheduler. */
|
||||||
|
this->task_queue.Enqueue(task);
|
||||||
|
Kernel::GetScheduler().SetInterruptTaskThreadRunnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -260,8 +260,24 @@ namespace ams::kern {
|
|||||||
return this->signaled;
|
return this->signaled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void KThread::Wakeup() {
|
||||||
|
MESOSPHERE_ASSERT_THIS();
|
||||||
|
KScopedSchedulerLock sl;
|
||||||
|
|
||||||
|
if (this->GetState() == ThreadState_Waiting) {
|
||||||
|
if (this->sleeping_queue != nullptr) {
|
||||||
|
this->sleeping_queue->WakeupThread(this);
|
||||||
|
} else {
|
||||||
|
this->SetState(ThreadState_Runnable);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void KThread::OnTimer() {
|
void KThread::OnTimer() {
|
||||||
MESOSPHERE_TODO_IMPLEMENT();
|
MESOSPHERE_ASSERT_THIS();
|
||||||
|
MESOSPHERE_ASSERT(KScheduler::IsSchedulerLockedByCurrentThread());
|
||||||
|
|
||||||
|
this->Wakeup();
|
||||||
}
|
}
|
||||||
|
|
||||||
void KThread::DoWorkerTask() {
|
void KThread::DoWorkerTask() {
|
||||||
|
Loading…
Reference in New Issue
Block a user