Subversion Repositories HelenOS

Rev

Rev 2465 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2465 Rev 3104
Line 101... Line 101...
101
 
101
 
102
    dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE, FRAME_KA);
102
    dst_ptl0 = (pte_t *) frame_alloc(PTL0_SIZE, FRAME_KA);
103
    table_size = FRAME_SIZE << PTL0_SIZE;
103
    table_size = FRAME_SIZE << PTL0_SIZE;
104
 
104
 
105
    if (flags & FLAG_AS_KERNEL) {
105
    if (flags & FLAG_AS_KERNEL) {
106
        memsetb((uintptr_t) dst_ptl0, table_size, 0);
106
        memsetb(dst_ptl0, table_size, 0);
107
    } else {
107
    } else {
108
        uintptr_t src, dst;
108
        uintptr_t src, dst;
109
   
109
   
110
        /*
110
        /*
111
         * Copy the kernel address space portion to new PTL0.
111
         * Copy the kernel address space portion to new PTL0.
Line 116... Line 116...
116
        src_ptl0 = (pte_t *) PA2KA((uintptr_t) AS_KERNEL->genarch.page_table);
116
        src_ptl0 = (pte_t *) PA2KA((uintptr_t) AS_KERNEL->genarch.page_table);
117
 
117
 
118
        src = (uintptr_t) &src_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
118
        src = (uintptr_t) &src_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
119
        dst = (uintptr_t) &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
119
        dst = (uintptr_t) &dst_ptl0[PTL0_INDEX(KERNEL_ADDRESS_SPACE_START)];
120
 
120
 
121
        memsetb((uintptr_t) dst_ptl0, table_size, 0);
121
        memsetb(dst_ptl0, table_size, 0);
122
        memcpy((void *) dst, (void *) src, table_size - (src - (uintptr_t) src_ptl0));
122
        memcpy((void *) dst, (void *) src, table_size - (src - (uintptr_t) src_ptl0));
123
        mutex_unlock(&AS_KERNEL->lock);
123
        mutex_unlock(&AS_KERNEL->lock);
124
        interrupts_restore(ipl);
124
        interrupts_restore(ipl);
125
    }
125
    }
126
 
126