Changeset 730ff63 in mainline for kernel/arch/sparc64/src


Ignore:
Timestamp:
2013-09-03T19:13:37Z (12 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b3cf946
Parents:
1b34360
Message:

Do not create kernel identity over the entire address space on sun4v.

Location:
kernel/arch/sparc64/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/sparc64/src/mm/sun4v/frame.c

    r1b34360 r730ff63  
    101101         */
    102102        frame_mark_unavailable(ADDR2PFN(KA2PA(PFN2ADDR(0))), 1);
     103
     104        /* PA2KA will work only on low-memory. */
     105        end_of_identity = PA2KA(config.physmem_end - FRAME_SIZE) + PAGE_SIZE;
    103106}
    104107
  • kernel/arch/sparc64/src/mm/sun4v/tlb.c

    r1b34360 r730ff63  
    251251        uintptr_t va = DMISS_ADDRESS(page_and_ctx);
    252252        uint16_t ctx = DMISS_CONTEXT(page_and_ctx);
     253        as_t *as = AS;
    253254
    254255        if (ctx == ASID_KERNEL) {
     
    256257                        /* NULL access in kernel */
    257258                        panic("NULL pointer dereference.");
     259                } else if (va >= end_of_identity) {
     260                        /* Kernel non-identity */
     261                        as = AS_KERNEL;
     262                } else {
     263                        panic("Unexpected kernel page fault.");
    258264                }
    259                 panic("Unexpected kernel page fault.");
    260         }
    261 
    262         t = page_mapping_find(AS, va, true);
     265        }
     266
     267        t = page_mapping_find(as, va, true);
    263268        if (t) {
    264269                /*
     
    295300        uintptr_t va = DMISS_ADDRESS(page_and_ctx);
    296301        uint16_t ctx = DMISS_CONTEXT(page_and_ctx);
    297 
    298         t = page_mapping_find(AS, va, true);
     302        as_t *as = AS;
     303
     304        if (ctx == ASID_KERNEL)
     305                as = AS_KERNEL;
     306
     307        t = page_mapping_find(as, va, true);
    299308        if (t && PTE_WRITABLE(t)) {
    300309                /*
  • kernel/arch/sparc64/src/sun4v/start.S

    r1b34360 r730ff63  
    345345        .quad 0
    346346
     347/*
     348 * This variable is used by the fast_data_access_MMU_miss trap handler.
     349 * In runtime, it is modified to contain the address of the end of physical
     350 * memory.
     351 */
     352.global end_of_identity
     353end_of_identity:
     354        .quad -1
     355
    347356.global kernel_8k_tlb_data_template
    348357kernel_8k_tlb_data_template:
Note: See TracChangeset for help on using the changeset viewer.