forked from Bananymous/banan-os
				
			Kernel: Scheduler now has reschedule()
This can be called from anywhere and just causes the scheduler to schedule the next thread. This is more efficient and verbose version of Scheduler::set_current_thread_sleeping(0), since we don't have to wake other threads or do other verifications.
This commit is contained in:
		
							parent
							
								
									b7fc2dc3d0
								
							
						
					
					
						commit
						27cef23823
					
				|  | @ -14,7 +14,9 @@ namespace Kernel | |||
| 		static Scheduler& get(); | ||||
| 
 | ||||
| 		[[noreturn]] void start(); | ||||
| 
 | ||||
| 		void timer_reschedule(); | ||||
| 		void reschedule(); | ||||
| 		void reschedule_if_idling(); | ||||
| 
 | ||||
| 		void set_current_thread_sleeping(uint64_t); | ||||
|  |  | |||
|  | @ -84,6 +84,21 @@ namespace Kernel | |||
| 		ASSERT_NOT_REACHED(); | ||||
| 	} | ||||
| 
 | ||||
| 	void Scheduler::reschedule() | ||||
| 	{ | ||||
| 		VERIFY_STI(); | ||||
| 		DISABLE_INTERRUPTS(); | ||||
| 
 | ||||
| 		if (save_current_thread()) | ||||
| 		{ | ||||
| 			ENABLE_INTERRUPTS(); | ||||
| 			return; | ||||
| 		} | ||||
| 		advance_current_thread(); | ||||
| 		execute_current_thread(); | ||||
| 		ASSERT_NOT_REACHED(); | ||||
| 	} | ||||
| 
 | ||||
| 	void Scheduler::reschedule_if_idling() | ||||
| 	{ | ||||
| 		VERIFY_CLI(); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue