Subversion Repositories HelenOS

Rev

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

Rev 2134 Rev 2141
Line 155... Line 155...
155
     */
155
     */
156
    page_mapping_insert(AS, addr, frame, as_area_get_flags(area));
156
    page_mapping_insert(AS, addr, frame, as_area_get_flags(area));
157
    if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1))
157
    if (!used_space_insert(area, ALIGN_DOWN(addr, PAGE_SIZE), 1))
158
        panic("Could not insert used space.\n");
158
        panic("Could not insert used space.\n");
159
       
159
       
160
#ifdef CONFIG_VIRT_IDX_DCACHE
-
 
161
    if (dirty && PAGE_COLOR(PA2KA(frame)) != PAGE_COLOR(addr)) {
-
 
162
        /*
-
 
163
         * By writing to the frame using kernel virtual address,
-
 
164
         * we have created an illegal virtual alias. We now have to
-
 
165
         * invalidate cachelines belonging to addr on all processors
-
 
166
         * so that they will be reloaded with the new content on next
-
 
167
         * read.
-
 
168
         */
-
 
169
        dcache_flush_frame(addr, frame);
-
 
170
        dcache_shootdown_start(DCACHE_INVL_FRAME, PAGE_COLOR(addr), frame);
-
 
171
        dcache_shootdown_finalize();
-
 
172
    }
-
 
173
#endif
-
 
174
 
-
 
175
    return AS_PF_OK;
160
    return AS_PF_OK;
176
}
161
}
177
 
162
 
178
/** Free a frame that is backed by the anonymous memory backend.
163
/** Free a frame that is backed by the anonymous memory backend.
179
 *
164
 *
Line 238... Line 223...
238
    mutex_unlock(&area->sh_info->lock);
223
    mutex_unlock(&area->sh_info->lock);
239
}
224
}
240
 
225
 
241
/** @}
226
/** @}
242
 */
227
 */
243
 
-