summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2015-05-23 00:40:15 +0200
committerMichal Idziorek <m.i@gmx.at>2015-05-23 00:40:15 +0200
commit566134df26612d34f2a377659c55fb0f1ae9dfa4 (patch)
treeac92db9a901065cb85399b100d913dce7f769a5b /kernel
parent573a28a2ea7534a1e85d2e0a3aa3d06b1218e08c (diff)
reverted interrupts disabling to conservative. and starting fs layer
Diffstat (limited to 'kernel')
-rw-r--r--kernel/interrupts.c3
-rw-r--r--kernel/mem.c1
-rw-r--r--kernel/ringbuffer.c15
-rw-r--r--kernel/smp.c2
-rw-r--r--kernel/spinlock.c3
5 files changed, 11 insertions, 13 deletions
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));
-
}