Kernel/LibC: Implement sched_yield
This commit is contained in:
		
							parent
							
								
									5549696c3a
								
							
						
					
					
						commit
						9066e62a97
					
				|  | @ -182,6 +182,7 @@ namespace Kernel | ||||||
| 		BAN::ErrorOr<long> sys_sigpending(sigset_t* set); | 		BAN::ErrorOr<long> sys_sigpending(sigset_t* set); | ||||||
| 		BAN::ErrorOr<long> sys_sigprocmask(int how, const sigset_t* set, sigset_t* oset); | 		BAN::ErrorOr<long> sys_sigprocmask(int how, const sigset_t* set, sigset_t* oset); | ||||||
| 
 | 
 | ||||||
|  | 		BAN::ErrorOr<long> sys_yield(); | ||||||
| 		BAN::ErrorOr<long> sys_pthread_create(const pthread_attr_t* __restrict attr, void (*entry)(void*), void* arg); | 		BAN::ErrorOr<long> sys_pthread_create(const pthread_attr_t* __restrict attr, void (*entry)(void*), void* arg); | ||||||
| 		BAN::ErrorOr<long> sys_pthread_exit(void* value); | 		BAN::ErrorOr<long> sys_pthread_exit(void* value); | ||||||
| 		BAN::ErrorOr<long> sys_pthread_self(); | 		BAN::ErrorOr<long> sys_pthread_self(); | ||||||
|  |  | ||||||
|  | @ -2084,6 +2084,12 @@ namespace Kernel | ||||||
| 		return 0; | 		return 0; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	BAN::ErrorOr<long> Process::sys_yield() | ||||||
|  | 	{ | ||||||
|  | 		Processor::yield(); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	BAN::ErrorOr<long> Process::sys_pthread_create(const pthread_attr_t* __restrict attr, void (*entry)(void*), void* arg) | 	BAN::ErrorOr<long> Process::sys_pthread_create(const pthread_attr_t* __restrict attr, void (*entry)(void*), void* arg) | ||||||
| 	{ | 	{ | ||||||
| 		if (attr != nullptr) | 		if (attr != nullptr) | ||||||
|  |  | ||||||
|  | @ -20,6 +20,7 @@ set(LIBC_SOURCES | ||||||
| 	pthread.cpp | 	pthread.cpp | ||||||
| 	pwd.cpp | 	pwd.cpp | ||||||
| 	scanf_impl.cpp | 	scanf_impl.cpp | ||||||
|  | 	sched.cpp | ||||||
| 	setjmp.cpp | 	setjmp.cpp | ||||||
| 	signal.cpp | 	signal.cpp | ||||||
| 	stdio.cpp | 	stdio.cpp | ||||||
|  |  | ||||||
|  | @ -90,6 +90,7 @@ __BEGIN_DECLS | ||||||
| 	O(SYS_FSYNC,			fsync)			\ | 	O(SYS_FSYNC,			fsync)			\ | ||||||
| 	O(SYS_SYMLINKAT,		symlinkat)		\ | 	O(SYS_SYMLINKAT,		symlinkat)		\ | ||||||
| 	O(SYS_HARDLINKAT,		hardlinkat)		\ | 	O(SYS_HARDLINKAT,		hardlinkat)		\ | ||||||
|  | 	O(SYS_YIELD,			yield)			\ | ||||||
| 	O(SYS_PTHREAD_CREATE,	pthread_create)	\ | 	O(SYS_PTHREAD_CREATE,	pthread_create)	\ | ||||||
| 	O(SYS_PTHREAD_EXIT,		pthread_exit)	\ | 	O(SYS_PTHREAD_EXIT,		pthread_exit)	\ | ||||||
| 	O(SYS_PTHREAD_SELF,		pthread_self)	\ | 	O(SYS_PTHREAD_SELF,		pthread_self)	\ | ||||||
|  |  | ||||||
|  | @ -0,0 +1,8 @@ | ||||||
|  | #include <sched.h> | ||||||
|  | #include <sys/syscall.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | 
 | ||||||
|  | int sched_yield(void) | ||||||
|  | { | ||||||
|  | 	return syscall(SYS_YIELD); | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue