extern struct runload loadavg[];
// the system call dispatch table
-#define FUZIX_SYSCALL_COUNT 62
+#define FUZIX_SYSCALL_COUNT 63
typedef int16_t (*syscall_t)(void);
extern const syscall_t syscall_dispatch[FUZIX_SYSCALL_COUNT];
CODE2 int16_t _sigdisp(void); /* FUZIX system call 59 */
CODE2 int16_t _flock(void); /* FUZIX system call 60 */
CODE2 int16_t _getpgrp(void); /* FUZIX system call 61 */
+CODE2 int16_t _sched_yield(void); /* FUZIX system call 62 */
#endif /* __FUZIX__KERNEL_DOT_H__ */
"_sigdisp",
"flock",
"getpgrp",
+ "yield",
};
int syscall_args[NR_SYSCALL] = {
2, //_sigdisp
2, //flock
0, //getpgrp
+ 0, //yield
};
_sigdisp, /* FUZIX system call 59 */
_flock, /* FUZIX system call 60 */
_getpgrp, /* FUZIX system call 61 */
+ _sched_yield, /* FUZIX system call 62 */
};
return (0);
}
-/*******************************************
+/********************************************
getpgrp (void) Function 61
-********************************************/
+*********************************************/
int16_t _getpgrp(void)
{
udata.u_ptab->p_pgrp = udata.u_ptab->p_pid;
return (0);
}
+
+/*******************************************
+_sched_yield (void) Function 62
+********************************************/
+
+int16_t _sched_yield(void)
+{
+ if (nready > 1)
+ switchin(getproc());
+ return 0;
+}
extern int rename(const char *path, const char *newpath);
extern int flock(int fd, int op);
extern pid_t getpgrp(void);
+extern int sched_yield(void);
/* asm syscall hooks with C wrappers */
extern int _getdirent(int fd, void *buf, int len);