I am attempting to create a simple priority based scheduler in XV6. To do this, I also have to create a system call that will allow a process to set its priority. I have done everything required to create the system call as discussed here and elsewhere:
how do i add a system call / utility in xv6
The problem is, I cannot pass any variables when I call the function, or rather, it runs like nothing is wrong but the correct values do not show up inside the function.
Extern declaration (syscall.c):
...
extern int sys_setpty(void);
static int (*syscalls[])(void) = {
...
[SYS_setpty] sys_setpty,
};
Sys-call Vector (syscall.h):
#define SYS_setpty 22
Implementation (sysproc.c):
void
sys_setpty(int pid, int pty)
{
cprintf("function pid: %d \n", pid);
cprintf("function pty: %d \n", pty);
}
(defs.h & user.h):
void setpty(int, int);
Macro (usys.S):
SYSCALL(setpty)
Function call:
setpty(3, 50);
Output:
function pid: 16843009
function pty: 16843009
The values are always the same exact number: 16843009. I have checked to see if the cprintf is working correctly by assigning values to pid and pty. I have spent about 6 hours trying every possible combination of everything I can think of and I'm starting to think that there is no built in mechanism for passing values via a system call in XV6. Am I missing something? Thank you in advance.