mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 05:40:04 +00:00 
			
		
		
		
	kernel: changed main thread priority to default, updated Kernel::Reschedule to use PrepareReschedule
This commit is contained in:
		
							parent
							
								
									e8a17ee6fd
								
							
						
					
					
						commit
						10447d1f48
					
				
					 6 changed files with 17 additions and 9 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue