summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-10-09 10:31:33 +0200
committerMiguel <m.i@gmx.at>2018-10-09 10:31:33 +0200
commita6a11437a390fb7e95fe995214d82bf5dbfe1eaf (patch)
tree2e45b4c1cee8a1ecb70cd773185154448e7f7ab0 /kernel
parentfe8180d88540bfa96595dcc58290de5425e534e3 (diff)
something wrnog with our pipes
Diffstat (limited to 'kernel')
-rw-r--r--kernel/interrupts.c8
-rw-r--r--kernel/kernel.c2
-rw-r--r--kernel/kernel.h2
-rw-r--r--kernel/scheduler.c14
-rw-r--r--kernel/syscalls.c11
5 files changed, 29 insertions, 8 deletions
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
@@ -207,8 +207,15 @@ 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;