Rev 2984 | Rev 2986 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2984 | Rev 2985 | ||
---|---|---|---|
Line 792... | Line 792... | ||
792 | { |
792 | { |
793 | as_area_t *area; |
793 | as_area_t *area; |
794 | uintptr_t base; |
794 | uintptr_t base; |
795 | link_t *cur; |
795 | link_t *cur; |
796 | ipl_t ipl; |
796 | ipl_t ipl; |
- | 797 | int page_flags; |
|
- | 798 | int old_frame; |
|
- | 799 | ||
- | 800 | /* Flags for the new memory mapping */ |
|
- | 801 | page_flags = area_flags_to_page_flags(flags); |
|
797 | 802 | ||
798 | ipl = interrupts_disable(); |
803 | ipl = interrupts_disable(); |
799 | mutex_lock(&as->lock); |
804 | mutex_lock(&as->lock); |
800 | 805 | ||
801 | area = find_area_and_lock(as, address); |
806 | area = find_area_and_lock(as, address); |
Line 806... | Line 811... | ||
806 | } |
811 | } |
807 | 812 | ||
808 | if (area->sh_info || area->backend != &anon_backend) { |
813 | if (area->sh_info || area->backend != &anon_backend) { |
809 | /* Copying shared areas not supported yet */ |
814 | /* Copying shared areas not supported yet */ |
810 | /* Copying non-anonymous memory not supported yet */ |
815 | /* Copying non-anonymous memory not supported yet */ |
- | 816 | mutex_unlock(&area->lock); |
|
811 | mutex_unlock(&as->lock); |
817 | mutex_unlock(&as->lock); |
812 | interrupts_restore(ipl); |
818 | interrupts_restore(ipl); |
813 | return ENOTSUP; |
819 | return ENOTSUP; |
814 | } |
820 | } |
815 | 821 | ||
Line 837... | Line 843... | ||
837 | for (j = 0; j < (count_t) node->value[i]; j++) { |
843 | for (j = 0; j < (count_t) node->value[i]; j++) { |
838 | page_table_lock(as, false); |
844 | page_table_lock(as, false); |
839 | pte = page_mapping_find(as, b + j * PAGE_SIZE); |
845 | pte = page_mapping_find(as, b + j * PAGE_SIZE); |
840 | ASSERT(pte && PTE_VALID(pte) && |
846 | ASSERT(pte && PTE_VALID(pte) && |
841 | PTE_PRESENT(pte)); |
847 | PTE_PRESENT(pte)); |
- | 848 | old_frame = PTE_GET_FRAME_ARCH(pte); |
|
842 | 849 | ||
843 | /* Remove old mapping and insert the new one */ |
850 | /* Remove old mapping and insert the new one */ |
844 | page_mapping_remove(as, b + j * PAGE_SIZE); |
851 | page_mapping_remove(as, b + j * PAGE_SIZE); |
845 | page_mapping_insert(as, b + j * PAGE_SIZE, |
852 | page_mapping_insert(as, b + j * PAGE_SIZE, |
846 | PTE_GET_FRAME(pte), flags); |
853 | old_frame, page_flags); |
- | 854 | ||
847 | page_table_unlock(as, false); |
855 | page_table_unlock(as, false); |
848 | } |
856 | } |
849 | } |
857 | } |
850 | } |
858 | } |
851 | 859 |