mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	kernel: changed main thread priority to default, updated Kernel::Reschedule to use PrepareReschedule
This commit is contained in:
		
							parent
							
								
									e8a17ee6fd
								
							
						
					
					
						commit
						10447d1f48
					
				@ -7,6 +7,7 @@
 | 
			
		||||
#include "core/mem_map.h"
 | 
			
		||||
#include "core/hle/hle.h"
 | 
			
		||||
#include "core/hle/svc.h"
 | 
			
		||||
#include "core/hle/kernel/thread.h"
 | 
			
		||||
#include "core/hle/service/service.h"
 | 
			
		||||
 | 
			
		||||
////////////////////////////////////////////////////////////////////////////////////////////////////
 | 
			
		||||
@ -41,11 +42,11 @@ void EatCycles(u32 cycles) {
 | 
			
		||||
    // TODO: ImplementMe
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ReSchedule(const char *reason) {
 | 
			
		||||
void Reschedule(const char *reason) {
 | 
			
		||||
#ifdef _DEBUG
 | 
			
		||||
    _dbg_assert_msg_(HLE, reason != 0 && strlen(reason) < 256, "Reschedule: Invalid or too long reason.");
 | 
			
		||||
#endif
 | 
			
		||||
    // TODO: ImplementMe
 | 
			
		||||
    Core::g_app_core->PrepareReschedule();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void RegisterModule(std::string name, int num_functions, const FunctionDef* func_table) {
 | 
			
		||||
 | 
			
		||||
@ -37,7 +37,7 @@ void CallSVC(u32 opcode);
 | 
			
		||||
 | 
			
		||||
void EatCycles(u32 cycles);
 | 
			
		||||
 | 
			
		||||
void ReSchedule(const char *reason);
 | 
			
		||||
void Reschedule(const char *reason);
 | 
			
		||||
 | 
			
		||||
void Init();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,7 @@
 | 
			
		||||
 | 
			
		||||
namespace Kernel {
 | 
			
		||||
 | 
			
		||||
Handle g_main_thread = 0;
 | 
			
		||||
ObjectPool g_object_pool;
 | 
			
		||||
 | 
			
		||||
ObjectPool::ObjectPool() {
 | 
			
		||||
@ -150,7 +151,7 @@ bool LoadExec(u32 entry_point) {
 | 
			
		||||
    Core::g_app_core->SetPC(entry_point);
 | 
			
		||||
 | 
			
		||||
    // 0x30 is the typical main thread priority I've seen used so far
 | 
			
		||||
    Handle thread = Kernel::SetupMainThread(0x30);
 | 
			
		||||
    g_main_thread = Kernel::SetupMainThread(THREADPRIO_DEFAULT);
 | 
			
		||||
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -163,6 +163,7 @@ private:
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
extern ObjectPool g_object_pool;
 | 
			
		||||
extern Handle g_main_thread;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Loads executable stored at specified address
 | 
			
		||||
 | 
			
		||||
@ -285,11 +285,11 @@ Handle CreateThread(const char* name, u32 entry_point, s32 priority, u32 arg, s3
 | 
			
		||||
 | 
			
		||||
    HLE::EatCycles(32000);
 | 
			
		||||
 | 
			
		||||
    CallThread(t);
 | 
			
		||||
 | 
			
		||||
    // This won't schedule to the new thread, but it may to one woken from eating cycles.
 | 
			
		||||
    // Technically, this should not eat all at once, and reschedule in the middle, but that's hard.
 | 
			
		||||
    HLE::ReSchedule("thread created");
 | 
			
		||||
 | 
			
		||||
    CallThread(t);
 | 
			
		||||
    //HLE::Reschedule("thread created");
 | 
			
		||||
    
 | 
			
		||||
    return handle;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -125,8 +125,11 @@ Result WaitSynchronization1(Handle handle, s64 nano_seconds) {
 | 
			
		||||
    Result res = object->WaitSynchronization(&wait);
 | 
			
		||||
 | 
			
		||||
    if (wait) {
 | 
			
		||||
        // Set current thread to wait state if handle was not unlocked
 | 
			
		||||
        Kernel::WaitCurrentThread(WAITTYPE_SYNCH); // TODO(bunnei): Is this correct?
 | 
			
		||||
        Kernel::Reschedule();
 | 
			
		||||
 | 
			
		||||
        // Check for next thread to schedule
 | 
			
		||||
        HLE::Reschedule(__func__);
 | 
			
		||||
 | 
			
		||||
        // Context switch - Function blocked, is not actually returning (will be "called" again)
 | 
			
		||||
 | 
			
		||||
@ -178,7 +181,9 @@ Result WaitSynchronizationN(void* _out, void* _handles, u32 handle_count, u32 wa
 | 
			
		||||
 | 
			
		||||
    // Set current thread to wait state if not all handles were unlocked
 | 
			
		||||
    Kernel::WaitCurrentThread(WAITTYPE_SYNCH); // TODO(bunnei): Is this correct?
 | 
			
		||||
    Kernel::Reschedule();
 | 
			
		||||
    
 | 
			
		||||
    // Check for next thread to schedule
 | 
			
		||||
    HLE::Reschedule(__func__);
 | 
			
		||||
 | 
			
		||||
    // Context switch - Function blocked, is not actually returning (will be "called" again)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user