core: hle: kernel: k_scheduler: Improve DisableScheduling and EnableScheduling.
This commit is contained in:
		@@ -376,20 +376,18 @@ void KScheduler::ClearSchedulerUpdateNeeded(KernelCore& kernel) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void KScheduler::DisableScheduling(KernelCore& kernel) {
 | 
			
		||||
    if (auto* scheduler = kernel.CurrentScheduler(); scheduler) {
 | 
			
		||||
        ASSERT(scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 0);
 | 
			
		||||
        scheduler->GetCurrentThread()->DisableDispatch();
 | 
			
		||||
    }
 | 
			
		||||
    ASSERT(GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() >= 0);
 | 
			
		||||
    GetCurrentThreadPointer(kernel)->DisableDispatch();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void KScheduler::EnableScheduling(KernelCore& kernel, u64 cores_needing_scheduling) {
 | 
			
		||||
    if (auto* scheduler = kernel.CurrentScheduler(); scheduler) {
 | 
			
		||||
        ASSERT(scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 1);
 | 
			
		||||
        if (scheduler->GetCurrentThread()->GetDisableDispatchCount() >= 1) {
 | 
			
		||||
            scheduler->GetCurrentThread()->EnableDispatch();
 | 
			
		||||
        }
 | 
			
		||||
    ASSERT(GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() >= 1);
 | 
			
		||||
 | 
			
		||||
    if (GetCurrentThreadPointer(kernel)->GetDisableDispatchCount() > 1) {
 | 
			
		||||
        GetCurrentThreadPointer(kernel)->EnableDispatch();
 | 
			
		||||
    } else {
 | 
			
		||||
        RescheduleCores(kernel, cores_needing_scheduling);
 | 
			
		||||
    }
 | 
			
		||||
    RescheduleCores(kernel, cores_needing_scheduling);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
u64 KScheduler::UpdateHighestPriorityThreads(KernelCore& kernel) {
 | 
			
		||||
@@ -646,6 +644,7 @@ void KScheduler::RescheduleCurrentCore() {
 | 
			
		||||
    if (phys_core.IsInterrupted()) {
 | 
			
		||||
        phys_core.ClearInterrupt();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    guard.Lock();
 | 
			
		||||
    if (state.needs_scheduling.load()) {
 | 
			
		||||
        Schedule();
 | 
			
		||||
@@ -662,10 +661,6 @@ void KScheduler::OnThreadStart() {
 | 
			
		||||
void KScheduler::Unload(KThread* thread) {
 | 
			
		||||
    ASSERT(thread);
 | 
			
		||||
 | 
			
		||||
    if (!thread) {
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    LOG_TRACE(Kernel, "core {}, unload thread {}", core_id, thread ? thread->GetName() : "nullptr");
 | 
			
		||||
 | 
			
		||||
    if (thread->IsCallingSvc()) {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user