diff options
| author | Michal Idziorek <m.i@gmx.at> | 2015-05-23 00:40:15 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2015-05-23 00:40:15 +0200 |
| commit | 566134df26612d34f2a377659c55fb0f1ae9dfa4 (patch) | |
| tree | ac92db9a901065cb85399b100d913dce7f769a5b | |
| parent | 573a28a2ea7534a1e85d2e0a3aa3d06b1218e08c (diff) | |
reverted interrupts disabling to conservative. and starting fs layer
| -rw-r--r-- | fs/file.h | 4 | ||||
| -rw-r--r-- | kernel/interrupts.c | 3 | ||||
| -rw-r--r-- | kernel/mem.c | 1 | ||||
| -rw-r--r-- | kernel/ringbuffer.c | 15 | ||||
| -rw-r--r-- | kernel/smp.c | 2 | ||||
| -rw-r--r-- | kernel/spinlock.c | 3 |
6 files changed, 14 insertions, 14 deletions
@@ -6,11 +6,13 @@ typedef struct { + void(* tell)(); void(* seek)(int offset, int whence); + void(* read)(char *buf, int len); void(* wrtie)(char *buf, int len); + void(* close)(); - void(* tell)(); int(* stat)(struct stat *buf); void *data; //opaque diff --git a/kernel/interrupts.c b/kernel/interrupts.c index a7eae81..f0b9bbd 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -174,7 +174,8 @@ void int_init(uint16_t sel) int_install(); // now we can enable interrupts back again - //x86_int_enable(); + // x86_int_enable(); + x86_int_disable(); } diff --git a/kernel/mem.c b/kernel/mem.c index ff8e97d..dfd59a7 100644 --- a/kernel/mem.c +++ b/kernel/mem.c @@ -6,7 +6,6 @@ #include "multiboot.h" #include "lib/logger/log.h" - #define PMMNGR_BLOCKS_PER_BYTE 8 #define PMMNGR_BLOCK_SIZE 4096 #define PMMNGR_MAX_BLOCKS 1048576 diff --git a/kernel/ringbuffer.c b/kernel/ringbuffer.c index a749b16..cba7eb4 100644 --- a/kernel/ringbuffer.c +++ b/kernel/ringbuffer.c @@ -1,10 +1,14 @@ #define FOOLOS_MODULE_NAME "ringbuffer" #include "lib/logger/log.h" -// TODO: why do we disable interrupts? (Eg. kb input) - #include "ringbuffer.h" + + +// TODO: this is disabled because a kb interrupt can occur anytime +// and the kernel will need to access the ringbuffer while we are accessing! +// DO WE need a spinlock in general? do not use a global one anyway!!!! + static int sl=9; ringbuffer ringbuffer_init(uint32_t size) @@ -38,15 +42,14 @@ volatile bool ringbuffer_put(ringbuffer* f,uint8_t c) lock_release(sl); x86_int_enable(); - return true; } volatile bool ringbuffer_has(ringbuffer* f) { + x86_int_disable(); bool res=true; - x86_int_disable(); lock_spin(sl); if(f->front==f->back) @@ -54,15 +57,14 @@ volatile bool ringbuffer_has(ringbuffer* f) lock_release(sl); x86_int_enable(); - return res; } volatile uint8_t ringbuffer_get(ringbuffer* f) // non blocking . please check first { + x86_int_disable(); char c; - x86_int_disable(); lock_spin(sl); if(f->front==f->back) @@ -80,6 +82,5 @@ volatile uint8_t ringbuffer_get(ringbuffer* f) // non blocking . please check fi lock_release(sl); x86_int_enable(); - return c; } diff --git a/kernel/smp.c b/kernel/smp.c index 76a8b1c..f3bc73b 100644 --- a/kernel/smp.c +++ b/kernel/smp.c @@ -27,6 +27,7 @@ uint32_t local_apic_addr; void smp_main() { + x86_int_disable(); while(1); // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"local apic_addr:0x%08X",local_apic_addr); @@ -38,7 +39,6 @@ void smp_main() // *reg=0;//xffffffff; // all bits 1 and interrupt 255 //int_install(); - x86_int_enable(); while(1); diff --git a/kernel/spinlock.c b/kernel/spinlock.c index 11ea069..a8bcc85 100644 --- a/kernel/spinlock.c +++ b/kernel/spinlock.c @@ -18,7 +18,6 @@ void check_spinlocks() void lock_spin(spinlock i) { - spinlock *addr=spinlocks+i; // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"locking %d (0x%08X)",i,addr); @@ -27,10 +26,8 @@ void lock_spin(spinlock i) void lock_release(spinlock i) { - // log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"unlocking %d",i); spinlock *addr=spinlocks+i; asm("movb $0,%0"::"m"(*addr)); - } |
