summaryrefslogtreecommitdiff
path: root/kernel/vmem.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-02 03:53:32 +0200
committerMiguel <m.i@gmx.at>2018-09-02 03:53:32 +0200
commitab6b44f5197e4c6c19f225f909035385d37883b4 (patch)
tree2c07e5bc65cf8e19a6433a7c0c5135eabb56a59c /kernel/vmem.c
parentc459fab7662eaf45df9994c828065b9fc8d4a8ac (diff)
foolsnake showcasing multithreading and our console
Diffstat (limited to 'kernel/vmem.c')
-rw-r--r--kernel/vmem.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/vmem.c b/kernel/vmem.c
index d026e9e..2d3a5e4 100644
--- a/kernel/vmem.c
+++ b/kernel/vmem.c
@@ -229,7 +229,7 @@ void vmem_free_dir(pdirectory *dir)
// PROGRAMM SPACE HARDCODED TO 0x8000000+2 pages and 0x8c00000+1 pages
//
-pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
+pdirectory* vmem_new_space_dir(pdirectory *copy_dir,bool stack_only)
{
x86_paging_disable();
@@ -352,6 +352,13 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
virt_addr=0x8000000;
for(int j=0;j<2;j++)
{
+ if(stack_only)
+ {
+ dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]=
+ copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)];
+ virt_addr+=1024*4096;
+ continue;
+ }
ptable* table = (ptable*) kballoc (1);
pd_entry *oldentry=NULL;
@@ -362,6 +369,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
oldentry=&(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]);
oldtable=pd_entry_get_frame(oldentry);
}
+
klog("oldtable at: 0x%08X",oldtable);
if (!table)kpanic("unable to alloc table");
@@ -405,7 +413,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
virt_addr+=1024*4096;
}
- // programm space
+ // programm space : stack?
virt_addr=0x8c00000;
for(int j=0;j<1;j++)
{
@@ -476,7 +484,7 @@ pdirectory* vmem_init(uint32_t kernel_blocks, uint32_t frameb_addr)
{
fb_addr=frameb_addr;
kernel_pages=kernel_blocks/1024+1;
- return vmem_new_space_dir(NULL);
+ return vmem_new_space_dir(NULL,false);
}