Subversion Repositories HelenOS-historic

Rev

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

Rev 1426 Rev 1546
Line 105... Line 105...
105
                    break;
105
                    break;
106
                }
106
                }
107
            }
107
            }
108
        }
108
        }
109
        if (frame || found) {
109
        if (frame || found) {
-
 
110
            frame_reference_add(ADDR2PFN(frame));
110
            page_mapping_insert(AS, addr, frame, as_area_get_flags(area));
111
            page_mapping_insert(AS, addr, frame, as_area_get_flags(area));
-
 
112
            frame_reference_add(ADDR2PFN(PTE_GET_FRAME(pte)));
111
            if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1))
113
            if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1))
112
                panic("Could not insert used space.\n");
114
                panic("Could not insert used space.\n");
113
            mutex_unlock(&area->sh_info->lock);
115
            mutex_unlock(&area->sh_info->lock);
114
            return AS_PF_OK;
116
            return AS_PF_OK;
115
        }
117
        }
Line 131... Line 133...
131
        if (entry->p_flags & PF_W) {
133
        if (entry->p_flags & PF_W) {
132
            frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
134
            frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
133
            memcpy((void *) PA2KA(frame), (void *) (base + i*FRAME_SIZE), FRAME_SIZE);
135
            memcpy((void *) PA2KA(frame), (void *) (base + i*FRAME_SIZE), FRAME_SIZE);
134
           
136
           
135
            if (area->sh_info) {
137
            if (area->sh_info) {
-
 
138
                frame_reference_add(ADDR2PFN(frame));
136
                btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
139
                btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
137
                    (void *) frame, leaf);
140
                    (void *) frame, leaf);
138
            }
141
            }
139
 
142
 
140
        } else {
143
        } else {
Line 149... Line 152...
149
         */
152
         */
150
        frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
153
        frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
151
        memsetb(PA2KA(frame), FRAME_SIZE, 0);
154
        memsetb(PA2KA(frame), FRAME_SIZE, 0);
152
 
155
 
153
        if (area->sh_info) {
156
        if (area->sh_info) {
-
 
157
            frame_reference_add(ADDR2PFN(frame));
154
            btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
158
            btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
155
                (void *) frame, leaf);
159
                (void *) frame, leaf);
156
        }
160
        }
157
 
161
 
158
    } else {
162
    } else {
Line 166... Line 170...
166
        frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
170
        frame = PFN2ADDR(frame_alloc(ONE_FRAME, 0));
167
        memsetb(PA2KA(frame) + size, FRAME_SIZE - size, 0);
171
        memsetb(PA2KA(frame) + size, FRAME_SIZE - size, 0);
168
        memcpy((void *) PA2KA(frame), (void *) (base + i*FRAME_SIZE), size);
172
        memcpy((void *) PA2KA(frame), (void *) (base + i*FRAME_SIZE), size);
169
 
173
 
170
        if (area->sh_info) {
174
        if (area->sh_info) {
-
 
175
            frame_reference_add(ADDR2PFN(frame));
171
            btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
176
            btree_insert(&area->sh_info->pagemap, ALIGN_DOWN(addr, PAGE_SIZE) - area->base,
172
                (void *) frame, leaf);
177
                (void *) frame, leaf);
173
        }
178
        }
174
 
179
 
175
    }
180
    }
Line 287... Line 292...
287
                pte = page_mapping_find(area->as, base + j*PAGE_SIZE);
292
                pte = page_mapping_find(area->as, base + j*PAGE_SIZE);
288
                ASSERT(pte && PTE_VALID(pte) && PTE_PRESENT(pte));
293
                ASSERT(pte && PTE_VALID(pte) && PTE_PRESENT(pte));
289
                btree_insert(&area->sh_info->pagemap, (base + j*PAGE_SIZE) - area->base,
294
                btree_insert(&area->sh_info->pagemap, (base + j*PAGE_SIZE) - area->base,
290
                    (void *) PTE_GET_FRAME(pte), NULL);
295
                    (void *) PTE_GET_FRAME(pte), NULL);
291
                page_table_unlock(area->as, false);
296
                page_table_unlock(area->as, false);
-
 
297
                frame_reference_add(ADDR2PFN(PTE_GET_FRAME(pte)));
292
            }
298
            }
293
               
299
               
294
        }
300
        }
295
    }
301
    }
296
    mutex_unlock(&area->sh_info->lock);
302
    mutex_unlock(&area->sh_info->lock);