Subversion Repositories HelenOS-historic

Rev

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

Rev 167 Rev 168
Line 46... Line 46...
46
#define KAS_INDICES     (1+(KAS_END_INDEX-KAS_START_INDEX))
46
#define KAS_INDICES     (1+(KAS_END_INDEX-KAS_START_INDEX))
47
 
47
 
48
vm_t *vm_create(pte_t *ptl0)
48
vm_t *vm_create(pte_t *ptl0)
49
{
49
{
50
    vm_t *m;
50
    vm_t *m;
51
   
51
 
52
    m = (vm_t *) malloc(sizeof(vm_t));
52
    m = (vm_t *) malloc(sizeof(vm_t));
53
    if (m) {
53
    if (m) {
54
        spinlock_initialize(&m->lock);
54
        spinlock_initialize(&m->lock);
55
        list_initialize(&m->vm_area_head);
55
        list_initialize(&m->vm_area_head);
56
 
56
 
57
        /*
57
        /*
58
         * Each vm_t is supposed to have its own page table.
58
         * Each vm_t is supposed to have its own page table.
59
         * It is either passed one or it has to allocate and set one up.
59
         * It is either passed one or it has to allocate and set one up.
60
         */
60
         */
-
 
61
        m->ptl0 = ptl0;
61
        if (!(m->ptl0 = ptl0)) {
62
        if (!m->ptl0) {
62
            pte_t *src_ptl0, *dst_ptl0;
63
            pte_t *src_ptl0, *dst_ptl0;
63
       
64
       
64
            src_ptl0 = (pte_t *) PA2KA(GET_PTL0_ADDRESS());
65
            src_ptl0 = (pte_t *) PA2KA((__address) GET_PTL0_ADDRESS());
65
            dst_ptl0 = (pte_t *) frame_alloc(FRAME_KA | FRAME_PANIC);
66
            dst_ptl0 = (pte_t *) frame_alloc(FRAME_KA | FRAME_PANIC);
66
            memsetb((__address) dst_ptl0, PAGE_SIZE, 0);
67
//          memsetb((__address) dst_ptl0, PAGE_SIZE, 0);
67
            memcopy((__address) &src_ptl0[KAS_START_INDEX], (__address) &dst_ptl0[KAS_START_INDEX], KAS_INDICES*sizeof(pte_t));
68
//          memcopy((__address) &src_ptl0[KAS_START_INDEX], (__address) &dst_ptl0[KAS_START_INDEX], KAS_INDICES*sizeof(pte_t));
-
 
69
            memcopy(PA2KA((__address) GET_PTL0_ADDRESS()), (__address) dst_ptl0, PAGE_SIZE);
68
            m->ptl0 = (pte_t *) KA2PA(dst_ptl0);
70
            m->ptl0 = (pte_t *) KA2PA((__address) dst_ptl0);
69
        }
71
        }
70
    }
72
    }
71
   
73
 
72
    return m;
74
    return m;
73
}
75
}
74
 
76
 
75
void vm_destroy(vm_t *m)
77
void vm_destroy(vm_t *m)
76
{
78
{