diff --git a/cpu/i386/paging.c b/cpu/i386/paging.c index 1f0bd86..d991fea 100644 --- a/cpu/i386/paging.c +++ b/cpu/i386/paging.c @@ -103,7 +103,7 @@ void* new_address_space() { uint32_t entry_virt=(uint32_t)&(kern_page_tables[i*1024]); smap[i+768]=(entry_virt-0xC0000000)|0x7; } - smap[1021]=(((uint32_t)kmalloc_page_tables)-0xC0000000)|0x3; + smap[1021]=(((uint32_t)kmalloc_page_tables)-0xC0000000)|0x7; for (uint32_t i=0;i<2;i++) { uint32_t entry_virt=(uint32_t)&(smap_page_tables[i*1024]); smap[i+1022]=(entry_virt-0xC0000000)|0x3; @@ -128,7 +128,7 @@ void paging_init() { kern_page_tables[i]=(i<<12)|0x7; } for (uint32_t i=0;i<1024;i++) { - kmalloc_page_tables[i]=(uint32_t)pmem_alloc(1)|0x3; + kmalloc_page_tables[i]=(uint32_t)pmem_alloc(1)|0x7; } smap_page_tables[0]=(((uint32_t)&(page_directory))-0xC0000000)|0x3; for (uint32_t i=1;i<2048;i++) { @@ -138,7 +138,7 @@ void paging_init() { uint32_t entry_virt=(uint32_t)&(kern_page_tables[i*1024]); page_directory[i+768]=(entry_virt-0xC0000000)|0x7; } - page_directory[1021]=(((uint32_t)kmalloc_page_tables)-0xC0000000)|0x3; + page_directory[1021]=(((uint32_t)kmalloc_page_tables)-0xC0000000)|0x7; for (uint32_t i=0;i<2;i++) { uint32_t entry_virt=(uint32_t)&(smap_page_tables[i*1024]); page_directory[i+1022]=(entry_virt-0xC0000000)|0x3; diff --git a/cpu/i386/tasking.c b/cpu/i386/tasking.c index 8d10f57..64f4f4c 100644 --- a/cpu/i386/tasking.c +++ b/cpu/i386/tasking.c @@ -74,7 +74,7 @@ char isPrivleged(uint32_t pid) { } Task* tasking_createTask(void* eip) { - return createTaskKmode(eip,1); + return createTaskKmode(eip,0); } void send_msg(uint32_t pid,void* msg) { @@ -124,6 +124,11 @@ void tasking_yield() { Task* oldCurr=currentTask; currentTask=task; load_address_space(task->regs.cr3); + if (task->priv) { + allow_all_ports(); + } else { + block_all_ports(); + } if (!task->kmode) { asm volatile(" \ cli; \ @@ -143,10 +148,5 @@ void tasking_yield() { 1: \ "); } - if (task->priv) { - allow_all_ports(); - } else { - block_all_ports(); - } switchTask(&oldCurr->regs, ¤tTask->regs); }