Changeset c520034 in mainline for kernel/genarch/src/mm/page_ht.c


Ignore:
Timestamp:
2011-12-31T18:19:35Z (13 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
295f658, 77c2b02, 96cd5b4
Parents:
852052d (diff), 22f0561 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

Support for kernel non-identity mappings, phase I.

  • identity/non-identity kernel memory split on all architectures
  • low/high physical memory split on all architectures
  • frame allocator understands low/high memory
  • high physical memory currently unused (Phase II)
  • more compact frame_t
  • zone conf frames, pte_t, kernel stacks allocated from low memory
  • lockless TLB-miss handlers everywhere (newly sparc64, ia64)
  • preallocate PTL1 page tables for non-identity and prevent their deallocation
  • hw_map() unification
  • new resource allocator used for allocating kernel virtual addresses

Breakage:

  • sparc64/sun4v creates too large kernel identity; not fixed because of lack of testing hw
  • ppc32's tlb_refill() seems wrong as it creates too large kernel identity, but appears unused and the architecture works normally

Not implemented yet (phase II):

  • allow high memory to be used for common kernel allocations
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/src/mm/page_ht.c

    r852052d rc520034  
    5959static void ht_mapping_remove(as_t *, uintptr_t);
    6060static pte_t *ht_mapping_find(as_t *, uintptr_t, bool);
     61static void ht_mapping_make_global(uintptr_t, size_t);
     62
     63slab_cache_t *pte_cache = NULL;
    6164
    6265/**
     
    8689        .mapping_insert = ht_mapping_insert,
    8790        .mapping_remove = ht_mapping_remove,
    88         .mapping_find = ht_mapping_find
     91        .mapping_find = ht_mapping_find,
     92        .mapping_make_global = ht_mapping_make_global
    8993};
    9094
     
    163167        pte_t *pte = hash_table_get_instance(item, pte_t, link);
    164168       
    165         free(pte);
     169        slab_free(pte_cache, pte);
    166170}
    167171
     
    188192       
    189193        if (!hash_table_find(&page_ht, key)) {
    190                 pte_t *pte = (pte_t *) malloc(sizeof(pte_t), FRAME_ATOMIC);
     194                pte_t *pte = slab_alloc(pte_cache, FRAME_LOWMEM | FRAME_ATOMIC);
    191195                ASSERT(pte != NULL);
    192196               
     
    260264}
    261265
     266void ht_mapping_make_global(uintptr_t base, size_t size)
     267{
     268        /* nothing to do */
     269}
     270
    262271/** @}
    263272 */
Note: See TracChangeset for help on using the changeset viewer.