From 8430c5031830f463b4d6ac12d84f5e72f314069a Mon Sep 17 00:00:00 2001 From: ChUrl Date: Wed, 27 Jul 2022 23:43:50 +0200 Subject: [PATCH] fix paging: invalidate tlb --- c_os/kernel/Paging.cc | 6 +++++- c_os/kernel/Paging.h | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/c_os/kernel/Paging.cc b/c_os/kernel/Paging.cc index fdbd319..a998377 100644 --- a/c_os/kernel/Paging.cc +++ b/c_os/kernel/Paging.cc @@ -107,6 +107,8 @@ void pg_write_protect_page(const unsigned int* p_page) { unsigned int mask = PAGE_WRITEABLE; // fill to 32bit *page = *page & ~mask; // set writable to 0 + + invalidate_tlb_entry(p_page); } /***************************************************************************** @@ -122,6 +124,8 @@ void pg_notpresent_page(const unsigned int* p_page) { unsigned int mask = PAGE_PRESENT; *page = *page & ~mask; // set present to 0 + + invalidate_tlb_entry(p_page); } /***************************************************************************** @@ -206,4 +210,4 @@ void pg_init() { // Paging aktivieren (in startup.asm) paging_on(reinterpret_cast(PAGE_DIRECTORY)); -} +} \ No newline at end of file diff --git a/c_os/kernel/Paging.h b/c_os/kernel/Paging.h index 826a4c3..335e908 100644 --- a/c_os/kernel/Paging.h +++ b/c_os/kernel/Paging.h @@ -55,7 +55,7 @@ // Externe Funktionen in startup.asm extern "C" { void paging_on(unsigned int* p_pdir); // Paging einschalten - void invalidate_tlb_entry(unsigned int* ptr); // Page in TLB invalid. + void invalidate_tlb_entry(const unsigned int* ptr); // Page in TLB invalid. } // ativiert paging