Changeset f18d01b6 in mainline


Ignore:
Timestamp:
2013-09-11T18:09:18Z (11 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
d5f774f6
Parents:
5759975a
Message:

allocate frames for the page tables on naturally aligned addresses

Location:
kernel/genarch
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • kernel/genarch/include/genarch/mm/page_pt.h

    r5759975a rf18d01b6  
    6363#define PTL2_FRAMES  PTL2_FRAMES_ARCH
    6464#define PTL3_FRAMES  PTL3_FRAMES_ARCH
     65
     66/* Table sizes in each level (in bytes) */
     67#define PTL0_SIZE  FRAMES2SIZE(PTL0_FRAMES)
     68#define PTL1_SIZE  FRAMES2SIZE(PTL1_FRAMES)
     69#define PTL2_SIZE  FRAMES2SIZE(PTL2_FRAMES)
     70#define PTL3_SIZE  FRAMES2SIZE(PTL3_FRAMES)
    6571
    6672/*
  • kernel/genarch/src/mm/as_pt.c

    r5759975a rf18d01b6  
    7474{
    7575        pte_t *dst_ptl0 = (pte_t *)
    76             PA2KA(frame_alloc(PTL0_FRAMES, FRAME_LOWMEM, 0));
    77         size_t table_size = FRAMES2SIZE(PTL0_FRAMES);
     76            PA2KA(frame_alloc(PTL0_FRAMES, FRAME_LOWMEM, PTL0_SIZE - 1));
    7877       
    7978        if (flags & FLAG_AS_KERNEL)
    80                 memsetb(dst_ptl0, table_size, 0);
     79                memsetb(dst_ptl0, PTL0_SIZE, 0);
    8180        else {
    8281                /*
     
    9493                    &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
    9594               
    96                 memsetb(dst_ptl0, table_size, 0);
     95                memsetb(dst_ptl0, PTL0_SIZE, 0);
    9796                memcpy((void *) dst, (void *) src,
    98                     table_size - (src - (uintptr_t) src_ptl0));
     97                    PTL0_SIZE - (src - (uintptr_t) src_ptl0));
    9998               
    10099                mutex_unlock(&AS_KERNEL->lock);
  • kernel/genarch/src/mm/page_pt.c

    r5759975a rf18d01b6  
    8383        if (GET_PTL1_FLAGS(ptl0, PTL0_INDEX(page)) & PAGE_NOT_PRESENT) {
    8484                pte_t *newpt = (pte_t *)
    85                     PA2KA(frame_alloc(PTL1_FRAMES, FRAME_LOWMEM, 0));
    86                 memsetb(newpt, FRAMES2SIZE(PTL1_FRAMES), 0);
     85                    PA2KA(frame_alloc(PTL1_FRAMES, FRAME_LOWMEM, PTL1_SIZE - 1));
     86                memsetb(newpt, PTL1_SIZE, 0);
    8787                SET_PTL1_ADDRESS(ptl0, PTL0_INDEX(page), KA2PA(newpt));
    8888                SET_PTL1_FLAGS(ptl0, PTL0_INDEX(page),
     
    102102        if (GET_PTL2_FLAGS(ptl1, PTL1_INDEX(page)) & PAGE_NOT_PRESENT) {
    103103                pte_t *newpt = (pte_t *)
    104                     PA2KA(frame_alloc(PTL2_FRAMES, FRAME_LOWMEM, 0));
    105                 memsetb(newpt, FRAMES2SIZE(PTL2_FRAMES), 0);
     104                    PA2KA(frame_alloc(PTL2_FRAMES, FRAME_LOWMEM, PTL2_SIZE - 1));
     105                memsetb(newpt, PTL2_SIZE, 0);
    106106                SET_PTL2_ADDRESS(ptl1, PTL1_INDEX(page), KA2PA(newpt));
    107107                SET_PTL2_FLAGS(ptl1, PTL1_INDEX(page),
     
    119119        if (GET_PTL3_FLAGS(ptl2, PTL2_INDEX(page)) & PAGE_NOT_PRESENT) {
    120120                pte_t *newpt = (pte_t *)
    121                     PA2KA(frame_alloc(PTL3_FRAMES, FRAME_LOWMEM, 0));
    122                 memsetb(newpt, FRAMES2SIZE(PTL3_FRAMES), 0);
     121                    PA2KA(frame_alloc(PTL3_FRAMES, FRAME_LOWMEM, PTL2_SIZE - 1));
     122                memsetb(newpt, PTL2_SIZE, 0);
    123123                SET_PTL3_ADDRESS(ptl2, PTL2_INDEX(page), KA2PA(newpt));
    124124                SET_PTL3_FLAGS(ptl2, PTL2_INDEX(page),
Note: See TracChangeset for help on using the changeset viewer.