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 | - | ||