Merge large page support code.
[barrelfish] / kernel / arch / x86_64 / page_mappings_arch.c
index 03228ed..ba63b71 100644 (file)
 #include <barrelfish_kpi/init.h>
 #include <cap_predicates.h>
 
-static inline struct cte *cte_for_cap(struct capability *cap)
-{
-    return (struct cte *) (cap - offsetof(struct cte, cap));
-}
+#ifdef __k1om__
+#include <target/k1om/offsets_target.h>
+#define MEMORY_OFFSET K1OM_MEMORY_OFFSET
+#else
+#include <target/x86_64/offsets_target.h>
+#define MEMORY_OFFSET X86_64_MEMORY_OFFSET
+#endif
 
 /// Map within a x86_64 non leaf ptable
 static errval_t x86_64_non_ptable(struct capability *dest, cslot_t slot,
@@ -56,7 +59,7 @@ static errval_t x86_64_non_ptable(struct capability *dest, cslot_t slot,
                 printf("src type invalid\n");
                 return SYS_ERR_WRONG_MAPPING;
             }
-            if(slot >= X86_64_PML4_BASE(X86_64_MEMORY_OFFSET)) { // Kernel mapped here
+            if(slot >= X86_64_PML4_BASE(MEMORY_OFFSET)) { // Kernel mapped here
                 return SYS_ERR_VNODE_SLOT_RESERVED;
             }
             break;
@@ -354,10 +357,7 @@ static inline void read_pt_entry(struct capability *pgtable, size_t slot,
     }
 }
 
-static inline void clear_pt_entry(lvaddr_t pte) {
-    ((union x86_64_pdir_entry *)pte)->raw = 0;
-}
-
+__attribute__((unused))
 static inline lvaddr_t get_leaf_ptable_for_vaddr(genvaddr_t vaddr)
 {
     lvaddr_t root_pt = local_phys_to_mem(dcb_current->vspace);
@@ -474,18 +474,19 @@ errval_t page_mappings_modify_flags(struct capability *frame, size_t offset,
         paging_x86_64_modify_flags(entry, flags);
     }
 
-    /* flush affected TLB entries and return */
-    return paging_tlb_flush_range(mapping, pages);
+    /* do full TLB flush */
+    do_full_tlb_flush();
+    return SYS_ERR_OK;
 }
 
 void paging_dump_tables(struct dcb *dispatcher)
 {
     lvaddr_t root_pt = local_phys_to_mem(dispatcher->vspace);
-    union x86_64_ptable_entry *pt;
-    // loop over pdpts (ignore kernel space)
-    int first_kernel_pml4e = X86_64_PML4_BASE(X86_64_MEMORY_OFFSET);
-    for (int pdpt_index = 0; pdpt_index < first_kernel_pml4e; pdpt_index++) {
 
+    // loop over pdpts
+    union x86_64_ptable_entry *pt;
+    size_t kernel_pml4e = X86_64_PML4_BASE(X86_64_MEMORY_OFFSET);
+    for (int pdpt_index = 0; pdpt_index < kernel_pml4e; pdpt_index++) {
         union x86_64_pdir_entry *pdpt = (union x86_64_pdir_entry *)root_pt + pdpt_index;
         if (!pdpt->raw) { continue; }
         genpaddr_t pdpt_gp = pdpt->d.base_addr << BASE_PAGE_BITS;