summaryrefslogtreecommitdiff
path: root/kernel/vmem.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/vmem.c')
-rw-r--r--kernel/vmem.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/kernel/vmem.c b/kernel/vmem.c
index 5dccc13..a909b1a 100644
--- a/kernel/vmem.c
+++ b/kernel/vmem.c
@@ -299,8 +299,14 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
{
ptable* table = (ptable*) pmmngr_alloc_block ();
- pd_entry *oldentry= &(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]);
- ptable* oldtable=pd_entry_get_frame(oldentry);
+ pd_entry *oldentry=NULL;
+ ptable* oldtable=NULL;
+
+ if(copy_dir!=NULL)
+ {
+ oldentry=&(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]);
+ oldtable=pd_entry_get_frame(oldentry);
+ }
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"oldtable at: 0x%08X",oldtable);
if (!table)panic(FOOLOS_MODULE_NAME,"unable to alloc table");
@@ -308,6 +314,7 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
for (int i=0, virt=virt_addr; i<1024; i++, virt+=4096)
{
+ //log(FOOLOS_MODULE_NAME,FOOLOS_LOG_INFO,"i = %d",i);
phys_addr=pmmngr_alloc_block(); // get free space from the memory manager
if (!phys_addr)panic(FOOLOS_MODULE_NAME,"unable to alloc spce for frame");
@@ -350,8 +357,14 @@ pdirectory* vmem_new_space_dir(pdirectory *copy_dir)
{
ptable* table = (ptable*) pmmngr_alloc_block ();
- pd_entry *oldentry= &(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]);
- ptable* oldtable=pd_entry_get_frame(oldentry);
+ pd_entry *oldentry=NULL;
+ ptable* oldtable=NULL;
+
+ if(copy_dir!=NULL)
+ {
+ oldentry=&(copy_dir->m_entries[PAGE_DIRECTORY_INDEX(virt_addr)]);
+ oldtable=pd_entry_get_frame(oldentry);
+ }
log(FOOLOS_MODULE_NAME,FOOLOS_LOG_DEBUG,"oldtable at: 0x%08X",oldtable);
if (!table)panic(FOOLOS_MODULE_NAME,"unable to alloc table");