From a6a11437a390fb7e95fe995214d82bf5dbfe1eaf Mon Sep 17 00:00:00 2001 From: Miguel Date: Tue, 9 Oct 2018 10:31:33 +0200 Subject: something wrnog with our pipes --- kernel/interrupts.c | 8 +++++++- kernel/kernel.c | 2 +- kernel/kernel.h | 2 +- kernel/scheduler.c | 14 +++++++++++--- kernel/syscalls.c | 11 +++++++++-- 5 files changed, 29 insertions(+), 8 deletions(-) (limited to 'kernel') diff --git a/kernel/interrupts.c b/kernel/interrupts.c index ce1d7c7..aed1a50 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -64,6 +64,8 @@ void interrupt_register(uint32_t irq, uint32_t func_addr) */ uint32_t interrupt_handler(uint32_t esp, uint32_t irq) { + uint32_t cpu=smp_get(SMP_APIC_ID); + if(handlers[irq]!=0) { uint32_t (*f)(uint32_t esp)=handlers[irq]; @@ -76,7 +78,11 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq) if(irq==INTERRUPT_APIC_TIMER) { - compositor_wake(); + if(cpu==0) + { + compositor_wake(); + scheduler_wake_worker(esp); + } } if(irq==INTERRUPT_APIC_TIMER || irq==INTERRUPT_IPI) diff --git a/kernel/kernel.c b/kernel/kernel.c index cf65e18..7c06ebf 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -163,7 +163,7 @@ void kernel_main(uint32_t eax,uint32_t ebx) klog("Compositor init ..."); compositor_init(cfg_multiboot->framebuffer_width,cfg_multiboot->framebuffer_height,cfg_multiboot->framebuffer_pitch); - compositor_set_background("/home/miguel/bg.ppm"); + compositor_set_background("/home/miguel/bg2.ppm"); // -- KB -- // klog("Keyboard init ..."); diff --git a/kernel/kernel.h b/kernel/kernel.h index 03429f4..fad803c 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -31,7 +31,7 @@ REFERENCES //#define FOOLOS_COLORLESS // Turn off colors in log #define HIDE_FIXME -#define FOOLOS_APIC_FREQ 3 // how many apic ticks per second +#define FOOLOS_APIC_FREQ 15 // how many apic ticks per second #define MAX_MOUNTS 10 diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 6ee4416..12c4ffd 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -206,9 +206,16 @@ void scheduler_func() */ while(1) + { + if(cpu==0) { task_syscall_worker(); } + else + { + asm("hlt"); // sleeper task + } + } //task_list[cpu][0].syscall=true; // sleep //__asm__("int $0x81"); // wake scheduler! with IPI @@ -231,7 +238,7 @@ void scheduler_func() uint64_t t0=x86_rdtscp(); asm("hlt"); // sleeper task uint64_t t1=x86_rdtscp(); - klog("task 1 / slept cycles: l:%d h:%d",(t1-t0)); +// klog("task 1 / slept cycles: l:%d h:%d",(t1-t0)); } } @@ -242,7 +249,7 @@ void scheduler_func() uint64_t t0=x86_rdtscp(); asm("hlt"); // sleeper task uint64_t t1=x86_rdtscp(); - klog("task 2 (sleeper) / slept cycles: l:%d h:%d",(t1-t0)); + // klog("task 2 (sleeper) / slept cycles: l:%d h:%d",(t1-t0)); } } @@ -339,7 +346,8 @@ void task_syscall_worker() wake_mouse|=mouse_worker(); //x86_sti(); - if(wake_mouse)compositor_swap_buffers(); + //if(wake_mouse) + compositor_swap_buffers(); if(wake)scheduler_wake_all(); //if(cpu==0)compositor_swap_buffers(); diff --git a/kernel/syscalls.c b/kernel/syscalls.c index 130e6dd..8ff6241 100644 --- a/kernel/syscalls.c +++ b/kernel/syscalls.c @@ -38,8 +38,15 @@ fd *get_fd(uint32_t pid,uint32_t file) void fd_init_std_streams(uint32_t pid) { - // fds[pid][0]=fd_from_ringbuffer(); - // open_fd[pid][0]=true; + fds[pid][0]=fd_from_ringbuffer(); + open_fd[pid][0]=true; + + fds[pid][1]=fd_from_ringbuffer(); + open_fd[pid][1]=true; + + fds[pid][2]=fd_from_ringbuffer(); + open_fd[pid][2]=true; + return; static bool first=true; -- cgit v1.2.3