/SPARTAN/trunk/include/proc/task.h |
---|
31,8 → 31,6 |
#include <typedefs.h> |
#include <synch/spinlock.h> |
#include <proc/thread.h> |
#include <mm/vm.h> |
#include <list.h> |
struct task { |
/SPARTAN/trunk/include/proc/thread.h |
---|
30,7 → 30,6 |
#define __THREAD_H__ |
#include <arch/thread.h> |
#include <proc/task.h> |
#include <synch/spinlock.h> |
#include <arch/context.h> |
#include <fpu_context.h> |
38,7 → 37,6 |
#include <typedefs.h> |
#include <time/timeout.h> |
#include <synch/rwlock.h> |
#include <mm/page.h> |
#include <config.h> |
#include <list.h> |
/SPARTAN/trunk/include/arch.h |
---|
34,7 → 34,11 |
#include <cpu.h> |
#include <arch/cpu.h> |
#include <arch/asm.h> |
#include <proc/thread.h> |
#include <proc/task.h> |
/* |
* NOTE: |
* CPU, THREAD and TASK are not preemption-safe. |
58,6 → 62,8 |
cpu_t *cpu; /* executing cpu */ |
}; |
#define THE ((the_t *)(get_stack_base())) |
extern void arch_pre_mm_init(void); |
extern void arch_post_mm_init(void); |
extern void arch_late_init(void); |
/SPARTAN/trunk/include/cpu.h |
---|
30,10 → 30,7 |
#define __CPU_H__ |
#include <arch/cpu.h> |
#include <proc/thread.h> |
#include <proc/task.h> |
#include <proc/scheduler.h> |
#include <time/clock.h> |
#include <synch/spinlock.h> |
#include <synch/waitq.h> |
#include <arch/types.h> |
40,6 → 37,7 |
#include <typedefs.h> |
#include <arch/context.h> |
#include <config.h> |
#include <list.h> |
#define CPU_STACK_SIZE STACK_SIZE |
/SPARTAN/trunk/src/main/main.c |
---|
97,13 → 97,28 |
{ |
config.cpu_count = 1; |
config.cpu_active = 1; |
size_t size, delta; |
/* |
* Calculate 'size' that kernel and heap occupies in memory. |
*/ |
size = hardcoded_ktext_size + hardcoded_kdata_size + CONFIG_HEAP_SIZE; |
/* |
* We need the boot stack to start on page boundary. |
* That is why 'delta' is calculated. |
*/ |
delta = PAGE_SIZE - ((hardcoded_load_address + size) % PAGE_SIZE); |
delta = (delta == PAGE_SIZE) ? 0 : delta; |
size += delta; |
config.base = hardcoded_load_address; |
config.memory_size = get_memory_size(); |
config.kernel_size = hardcoded_ktext_size + hardcoded_kdata_size + CONFIG_HEAP_SIZE + CONFIG_STACK_SIZE; |
config.kernel_size = size + CONFIG_STACK_SIZE; |
context_save(&ctx); |
context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + hardcoded_ktext_size + hardcoded_kdata_size + CONFIG_HEAP_SIZE, CONFIG_STACK_SIZE); |
context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + size, CONFIG_STACK_SIZE); |
context_restore(&ctx); |
/* not reached */ |
} |
/SPARTAN/trunk/src/preempt/preemption.c |
---|
28,13 → 28,19 |
#include <preemption.h> |
#include <arch.h> |
#include <arch/atomic.h> |
#include <arch/asm.h> |
#include <arch/barrier.h> |
#include <debug.h> |
void preemption_disable(void) |
{ |
THE->preemption_disabled++; |
memory_barrier(); |
} |
void preemption_enable(void) |
{ |
ASSERT(THE->preemption_disabled); |
memory_barrier(); |
THE->preemption_disabled--; |
} |
/SPARTAN/trunk/arch/ppc/include/barrier.h |
---|
32,4 → 32,8 |
#define CS_ENTER_BARRIER() __asm__ volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") |
#define memory_barrier() |
#define read_barrier() |
#define write_barrier() |
#endif |
/SPARTAN/trunk/arch/ia64/include/barrier.h |
---|
35,4 → 35,8 |
#define CS_ENTER_BARRIER() __asm__ volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") |
#define memory_barrier() |
#define read_barrier() |
#define write_barrier() |
#endif |
/SPARTAN/trunk/arch/mips/include/mm/page.h |
---|
33,7 → 33,6 |
#include <mm/page.h> |
#include <arch/mm/frame.h> |
#include <arch/types.h> |
#include <arch.h> |
#define PAGE_SIZE FRAME_SIZE |
/SPARTAN/trunk/arch/mips/include/barrier.h |
---|
35,4 → 35,8 |
#define CS_ENTER_BARRIER() __asm__ volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") |
#define memory_barrier() |
#define read_barrier() |
#define write_barrier() |
#endif |
/SPARTAN/trunk/arch/mips/include/cpu.h |
---|
29,8 → 29,6 |
#ifndef __mips_CPU_H__ |
#define __mips_CPU_H__ |
#include <typedefs.h> |
#define CPU_ID_ARCH 0 |
struct cpu_arch { |
/SPARTAN/trunk/arch/amd64/include/barrier.h |
---|
32,4 → 32,8 |
#define CS_ENTER_BARRIER() __asm__ volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") |
#define memory_barrier() |
#define read_barrier() |
#define write_barrier() |
#endif |
/SPARTAN/trunk/arch/ia32/include/asm.h |
---|
31,7 → 31,7 |
#include <arch/types.h> |
#include <typedefs.h> |
#include <mm/page.h> |
#include <config.h> |
#include <synch/spinlock.h> |
#include <arch/boot/memmap.h> |
#include <config.h> |
/SPARTAN/trunk/arch/ia32/include/barrier.h |
---|
43,4 → 43,8 |
#define CS_ENTER_BARRIER() __asm__ volatile ("" ::: "memory") |
#define CS_LEAVE_BARRIER() __asm__ volatile ("" ::: "memory") |
#define memory_barrier() __asm__ volatile ("mfence\n" ::: "memory") |
#define read_barrier() __asm__ volatile ("sfence\n" ::: "memory") |
#define write_barrier() __asm__ volatile ("lfence\n" ::: "memory") |
#endif |
/SPARTAN/trunk/arch/ia32/src/smp/ap.S |
---|
50,10 → 50,12 |
xorw %ax,%ax |
movw %ax,%ds |
lgdt gdtr |
lgdt gdtr # initialize Global Descriptor Table register |
lidt idtr # initialize Interrupt Descriptor Table register |
movl %cr0,%eax |
orl $1,%eax |
movl %eax,%cr0 |
movl %eax,%cr0 # switch to protected mode |
jmpl $KTEXT,$jump_to_kernel |
jump_to_kernel: |
.code32 |
65,10 → 67,8 |
movl (%eax),%esp |
subl $0x80000000,%esp # KA2PA(ctx.sp) |
lidt idtr |
call map_kernel # map kernel and turn paging on |
call map_kernel |
jmpl $KTEXT,$main_ap |
#endif /* __SMP__ */ |
/SPARTAN/trunk/arch/ia32/src/boot/boot.S |
---|
47,10 → 47,12 |
call memmap_arch_init |
lgdt gdtr |
lgdt gdtr # initialize Global Descriptor Table register |
lidt idtr # initialize Interrupt Descriptor Table register |
movl %cr0,%eax |
orl $0x1,%eax |
movl %eax,%cr0 |
movl %eax,%cr0 # switch to protected mode |
jmpl $8,$meeting_point |
meeting_point: |
.code32 |
62,10 → 64,8 |
movw %ax,%ds # kernel data + stack |
movw %ax,%ss |
lidt idtr |
call map_kernel # map kernel and turn paging on |
call map_kernel |
movl $_hardcoded_ktext_size, hardcoded_ktext_size |
movl $_hardcoded_kdata_size, hardcoded_kdata_size |
movl $_hardcoded_load_address, hardcoded_load_address |
94,7 → 94,7 |
leal page_directory, %eax |
movl %eax, %cr3 |
# turn on paging |
# turn paging on |
movl %cr0, %ebx |
orl $(1<<31), %ebx |
movl %ebx, %cr0 |
/SPARTAN/trunk/arch/ia32/src/mm/frame.c |
---|
34,9 → 34,6 |
#include <print.h> |
/* |
* TODO: use the memory map obtained from BIOS |
*/ |
void frame_arch_init(void) |
{ |
__u8 i; |