diff --git a/initcode.S b/initcode.S index d86660a4752084e34feb86a959c786321a442e6f..109341a44190299c1b94b16df56474f55d51925c 100644 --- a/initcode.S +++ b/initcode.S @@ -7,8 +7,6 @@ # exec(init, argv) .globl start start: - movl $SYS_init, %eax - int $T_SYSCALL pushl $argv pushl $init pushl $0 // where caller pc would be diff --git a/main.c b/main.c index 129a0e98cbd694f1b900a2c8ecf8b391b356e252..13fed7c1580b9042d3658ef4901b7be08c937f47 100644 --- a/main.c +++ b/main.c @@ -60,7 +60,7 @@ mpmain(void) scheduler(); // start running processes } -pde_t enterpgdir[]; +pde_t enterpgdir[]; // For entry.S // Start the non-boot (AP) processors. static void diff --git a/proc.c b/proc.c index 96a9c8ec5571f03af4611ce0e6003ab281a894d4..23a53bca827385852b46e4781f54525db3751d45 100644 --- a/proc.c +++ b/proc.c @@ -322,8 +322,14 @@ yield(void) void forkret(void) { + static int first = 1; // Still holding ptable.lock from scheduler. release(&ptable.lock); + + if (first) { + first = 0; + initlog(); + } // Return to "caller", actually trapret (see allocproc). } diff --git a/syscall.c b/syscall.c index 71c369c6d5ec2077a065571151f8129cf7ede45d..0918da7131988eb24cbf830fb93286198701aefa 100644 --- a/syscall.c +++ b/syscall.c @@ -99,15 +99,7 @@ extern int sys_wait(void); extern int sys_write(void); extern int sys_uptime(void); -int -sys_init(void) -{ - initlog(); - return 0; -} - static int (*syscalls[])(void) = { -[SYS_init] sys_init, [SYS_fork] sys_fork, [SYS_exit] sys_exit, [SYS_wait] sys_wait, @@ -122,7 +114,6 @@ static int (*syscalls[])(void) = { [SYS_sbrk] sys_sbrk, [SYS_sleep] sys_sleep, [SYS_uptime] sys_uptime, -// File system calls that are run in a transaction: [SYS_open] sys_open, [SYS_write] sys_write, [SYS_mknod] sys_mknod, diff --git a/syscall.h b/syscall.h index e9e43a21e45aa33b3d880d51ef8a2553e7d497ce..59a4576eda34f697dcc5be59e491cdd0ad6c3ced 100644 --- a/syscall.h +++ b/syscall.h @@ -1,5 +1,4 @@ // System call numbers -#define SYS_init 0 #define SYS_fork 1 #define SYS_exit 2 #define SYS_wait 3