Rev 1915 | Rev 2007 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1915 | Rev 1954 | ||
|---|---|---|---|
| Line 190... | Line 190... | ||
| 190 | } |
190 | } |
| 191 | spinlock_unlock(&inactive_as_with_asid_lock); |
191 | spinlock_unlock(&inactive_as_with_asid_lock); |
| 192 | 192 | ||
| 193 | /* |
193 | /* |
| 194 | * Destroy address space areas of the address space. |
194 | * Destroy address space areas of the address space. |
| 195 | * The B+tee must be walked carefully because it is |
195 | * The B+tree must be walked carefully because it is |
| 196 | * also being destroyed. |
196 | * also being destroyed. |
| 197 | */ |
197 | */ |
| 198 | for (cond = true; cond; ) { |
198 | for (cond = true; cond; ) { |
| 199 | btree_node_t *node; |
199 | btree_node_t *node; |
| 200 | 200 | ||
| Line 414... | Line 414... | ||
| 414 | } |
414 | } |
| 415 | 415 | ||
| 416 | /* |
416 | /* |
| 417 | * Finish TLB shootdown sequence. |
417 | * Finish TLB shootdown sequence. |
| 418 | */ |
418 | */ |
| 419 | tlb_invalidate_pages(AS->asid, area->base + pages*PAGE_SIZE, area->pages - pages); |
419 | tlb_invalidate_pages(as->asid, area->base + pages*PAGE_SIZE, area->pages - pages); |
| 420 | tlb_shootdown_finalize(); |
420 | tlb_shootdown_finalize(); |
| 421 | 421 | ||
| 422 | /* |
422 | /* |
| 423 | * Invalidate software translation caches (e.g. TSB on sparc64). |
423 | * Invalidate software translation caches (e.g. TSB on sparc64). |
| 424 | */ |
424 | */ |
| Line 607... | Line 607... | ||
| 607 | return EPERM; |
607 | return EPERM; |
| 608 | } |
608 | } |
| 609 | 609 | ||
| 610 | /* |
610 | /* |
| 611 | * Now we are committed to sharing the area. |
611 | * Now we are committed to sharing the area. |
| 612 | * First prepare the area for sharing. |
612 | * First, prepare the area for sharing. |
| 613 | * Then it will be safe to unlock it. |
613 | * Then it will be safe to unlock it. |
| 614 | */ |
614 | */ |
| 615 | sh_info = src_area->sh_info; |
615 | sh_info = src_area->sh_info; |
| 616 | if (!sh_info) { |
616 | if (!sh_info) { |
| 617 | sh_info = (share_info_t *) malloc(sizeof(share_info_t), 0); |
617 | sh_info = (share_info_t *) malloc(sizeof(share_info_t), 0); |