Changeset fdaad75d in mainline for kernel/generic/src/mm/as.c
- Timestamp:
- 2010-06-22T02:18:35Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- ee42e43
- Parents:
- 4ca26c9b
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/as.c
r4ca26c9b rfdaad75d 239 239 240 240 spinlock_unlock(&asidlock); 241 interrupts_restore(ipl); 242 241 243 242 244 /* … … 265 267 page_table_destroy(NULL); 266 268 #endif 267 268 interrupts_restore(ipl);269 269 270 270 slab_free(as_slab, as); … … 327 327 return NULL; 328 328 329 ipl_t ipl = interrupts_disable();330 329 mutex_lock(&as->lock); 331 330 332 331 if (!check_area_conflicts(as, base, size, NULL)) { 333 332 mutex_unlock(&as->lock); 334 interrupts_restore(ipl);335 333 return NULL; 336 334 } … … 357 355 358 356 mutex_unlock(&as->lock); 359 interrupts_restore(ipl);360 357 361 358 return area; … … 376 373 int as_area_resize(as_t *as, uintptr_t address, size_t size, unsigned int flags) 377 374 { 378 ipl_t ipl = interrupts_disable();379 375 mutex_lock(&as->lock); 380 376 … … 386 382 if (!area) { 387 383 mutex_unlock(&as->lock); 388 interrupts_restore(ipl);389 384 return ENOENT; 390 385 } … … 398 393 mutex_unlock(&area->lock); 399 394 mutex_unlock(&as->lock); 400 interrupts_restore(ipl);401 395 return ENOTSUP; 402 396 } … … 410 404 mutex_unlock(&area->lock); 411 405 mutex_unlock(&as->lock); 412 interrupts_restore(ipl);413 406 return ENOTSUP; 414 407 } … … 422 415 mutex_unlock(&area->lock); 423 416 mutex_unlock(&as->lock); 424 interrupts_restore(ipl);425 417 return EPERM; 426 418 } … … 549 541 mutex_unlock(&area->lock); 550 542 mutex_unlock(&as->lock); 551 interrupts_restore(ipl);552 543 return EADDRNOTAVAIL; 553 544 } … … 558 549 mutex_unlock(&area->lock); 559 550 mutex_unlock(&as->lock); 560 interrupts_restore(ipl);561 551 562 552 return 0; … … 573 563 int as_area_destroy(as_t *as, uintptr_t address) 574 564 { 575 ipl_t ipl = interrupts_disable();576 565 mutex_lock(&as->lock); 577 566 … … 579 568 if (!area) { 580 569 mutex_unlock(&as->lock); 581 interrupts_restore(ipl);582 570 return ENOENT; 583 571 } … … 659 647 660 648 mutex_unlock(&as->lock); 661 interrupts_restore(ipl);662 649 return 0; 663 650 } … … 690 677 as_t *dst_as, uintptr_t dst_base, unsigned int dst_flags_mask) 691 678 { 692 ipl_t ipl = interrupts_disable();693 679 mutex_lock(&src_as->lock); 694 680 as_area_t *src_area = find_area_and_lock(src_as, src_base); … … 699 685 */ 700 686 mutex_unlock(&src_as->lock); 701 interrupts_restore(ipl);702 687 return ENOENT; 703 688 } … … 711 696 mutex_unlock(&src_area->lock); 712 697 mutex_unlock(&src_as->lock); 713 interrupts_restore(ipl);714 698 return ENOTSUP; 715 699 } … … 728 712 mutex_unlock(&src_area->lock); 729 713 mutex_unlock(&src_as->lock); 730 interrupts_restore(ipl);731 714 return EPERM; 732 715 } … … 777 760 sh_info_remove_reference(sh_info); 778 761 779 interrupts_restore(ipl);780 762 return ENOMEM; 781 763 } … … 794 776 mutex_unlock(&dst_as->lock); 795 777 796 interrupts_restore(ipl);797 798 778 return 0; 799 779 } … … 816 796 }; 817 797 818 ASSERT(interrupts_disabled());819 798 ASSERT(mutex_locked(&area->lock)); 820 799 … … 844 823 unsigned int page_flags = area_flags_to_page_flags(flags); 845 824 846 ipl_t ipl = interrupts_disable();847 825 mutex_lock(&as->lock); 848 826 … … 850 828 if (!area) { 851 829 mutex_unlock(&as->lock); 852 interrupts_restore(ipl);853 830 return ENOENT; 854 831 } … … 859 836 mutex_unlock(&area->lock); 860 837 mutex_unlock(&as->lock); 861 interrupts_restore(ipl);862 838 return ENOTSUP; 863 839 } … … 978 954 mutex_unlock(&area->lock); 979 955 mutex_unlock(&as->lock); 980 interrupts_restore(ipl);981 956 982 957 return 0; … … 1219 1194 unsigned int as_area_get_flags(as_area_t *area) 1220 1195 { 1221 ASSERT(interrupts_disabled());1222 1196 ASSERT(mutex_locked(&area->lock)); 1223 1197 … … 1321 1295 as_area_t *find_area_and_lock(as_t *as, uintptr_t va) 1322 1296 { 1323 ASSERT(interrupts_disabled());1324 1297 ASSERT(mutex_locked(&as->lock)); 1325 1298 … … 1386 1359 as_area_t *avoid_area) 1387 1360 { 1388 ASSERT(interrupts_disabled());1389 1361 ASSERT(mutex_locked(&as->lock)); 1390 1362 … … 1486 1458 size_t size; 1487 1459 1488 ipl_t ipl = interrupts_disable();1489 1460 page_table_lock(AS, true); 1490 1461 as_area_t *src_area = find_area_and_lock(AS, base); … … 1497 1468 1498 1469 page_table_unlock(AS, true); 1499 interrupts_restore(ipl);1500 1470 return size; 1501 1471 } … … 2070 2040 void as_get_area_info(as_t *as, as_area_info_t **obuf, size_t *osize) 2071 2041 { 2072 ipl_t ipl = interrupts_disable();2073 2042 mutex_lock(&as->lock); 2074 2043 … … 2114 2083 2115 2084 mutex_unlock(&as->lock); 2116 interrupts_restore(ipl);2117 2085 2118 2086 *obuf = info; … … 2127 2095 void as_print(as_t *as) 2128 2096 { 2129 ipl_t ipl = interrupts_disable();2130 2097 mutex_lock(&as->lock); 2131 2098 … … 2150 2117 2151 2118 mutex_unlock(&as->lock); 2152 interrupts_restore(ipl);2153 2119 } 2154 2120
Note:
See TracChangeset
for help on using the changeset viewer.