Changeset f8d069e8 in mainline
- Timestamp:
- 2006-06-02T00:54:56Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 01ebbdf
- Parents:
- 8da51ad
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
arch/ia64/Makefile.inc
r8da51ad rf8d069e8 42 42 INIT0_SIZE = 0x100000 43 43 44 INIT1_ADDRESS = 0xe00000000080000045 INIT1_SIZE = 0x10000046 47 44 CFLAGS += -mconstant-gp -fno-unwind-tables -mfixed-range=f32-f127 48 45 LFLAGS += -EL 49 46 AFLAGS += -mconstant-gp 50 47 51 DEFS += -D__64_BITS__ -DINIT0_ADDRESS=$(INIT0_ADDRESS) -DINIT0_SIZE=$(INIT0_SIZE) \ 52 -DINIT1_ADDRESS=$(INIT1_ADDRESS) -DINIT1_SIZE=$(INIT1_SIZE) 48 DEFS += -D__64_BITS__ -DINIT0_ADDRESS=$(INIT0_ADDRESS) -DINIT0_SIZE=$(INIT0_SIZE) 53 49 54 50 ## Compile with page hash table support. -
arch/ia64/src/ia64.c
r8da51ad rf8d069e8 48 48 { 49 49 /* Setup usermode init tasks. */ 50 init.cnt = 2;50 init.cnt = 5; 51 51 init.tasks[0].addr = INIT0_ADDRESS; 52 52 init.tasks[0].size = INIT0_SIZE; 53 init.tasks[1].addr = INIT1_ADDRESS; 54 init.tasks[1].size = INIT1_SIZE; 53 init.tasks[1].addr = INIT0_ADDRESS + 0x400000; 54 init.tasks[1].size = INIT0_SIZE; 55 init.tasks[2].addr = INIT0_ADDRESS + 0x800000; 56 init.tasks[2].size = INIT0_SIZE; 57 init.tasks[3].addr = INIT0_ADDRESS + 0xc00000; 58 init.tasks[3].size = INIT0_SIZE; 59 init.tasks[4].addr = INIT0_ADDRESS + 0x1000000; 60 init.tasks[4].size = INIT0_SIZE; 55 61 } 56 62 -
generic/src/mm/as.c
r8da51ad rf8d069e8 137 137 { 138 138 ipl_t ipl; 139 bool cond;139 link_t *cur; 140 140 141 141 ASSERT(as->refcount == 0); … … 157 157 * Destroy address space areas of the address space. 158 158 */ 159 for (c ond = true; cond;) {159 for (cur = as->as_area_btree.leaf_head.next; cur != &as->as_area_btree.leaf_head; cur = cur->next) { 160 160 btree_node_t *node; 161 int i; 161 162 162 ASSERT(!list_empty(&as->as_area_btree.leaf_head)); 163 node = list_get_instance(&as->as_area_btree.leaf_head.next, btree_node_t, leaf_link); 164 if ((cond = node->keys)) 165 as_area_destroy(as, node->key[0]); 166 } 167 163 node = list_get_instance(cur, btree_node_t, leaf_link); 164 for (i = 0; i < node->keys; i++) 165 as_area_destroy(as, node->key[i]); 166 } 167 168 168 btree_destroy(&as->as_area_btree); 169 169 page_table_destroy(as->page_table); … … 411 411 as_area_t *area; 412 412 __address base; 413 link_t *cur; 413 414 ipl_t ipl; 414 bool cond;415 415 416 416 ipl = interrupts_disable(); … … 433 433 /* 434 434 * Visit only the pages mapped by used_space B+tree. 435 * Note that we must be very careful when walking the tree 436 * leaf list and removing used space as the leaf list changes 437 * unpredictibly after each remove. The solution is to actually 438 * not walk the tree at all, but to remove items from the head 439 * of the leaf list until there are some keys left. 440 */ 441 for (cond = true; cond;) { 435 */ 436 for (cur = area->used_space.leaf_head.next; cur != &area->used_space.leaf_head; cur = cur->next) { 442 437 btree_node_t *node; 438 int i; 443 439 444 ASSERT(!list_empty(&area->used_space.leaf_head)); 445 node = list_get_instance(area->used_space.leaf_head.next, btree_node_t, leaf_link); 446 if ((cond = (bool) node->keys)) { 447 __address b = node->key[0]; 448 count_t i; 440 node = list_get_instance(cur, btree_node_t, leaf_link); 441 for (i = 0; i < node->keys; i++) { 442 __address b = node->key[i]; 443 count_t j; 449 444 pte_t *pte; 450 445 451 for ( i = 0; i < (count_t) node->value[0]; i++) {446 for (j = 0; j < (count_t) node->value[i]; j++) { 452 447 page_table_lock(as, false); 453 pte = page_mapping_find(as, b + i*PAGE_SIZE);448 pte = page_mapping_find(as, b + j*PAGE_SIZE); 454 449 ASSERT(pte && PTE_VALID(pte) && PTE_PRESENT(pte)); 455 450 if (area->backend && area->backend->frame_free) { 456 451 area->backend->frame_free(area, 457 b + i*PAGE_SIZE, PTE_GET_FRAME(pte));452 b + j*PAGE_SIZE, PTE_GET_FRAME(pte)); 458 453 } 459 page_mapping_remove(as, b + i*PAGE_SIZE);454 page_mapping_remove(as, b + j*PAGE_SIZE); 460 455 page_table_unlock(as, false); 461 456 } … … 1474 1469 if (--sh_info->refcount == 0) { 1475 1470 dealloc = true; 1476 bool cond;1471 link_t *cur; 1477 1472 1478 1473 /* … … 1480 1475 * reference from all frames found there. 1481 1476 */ 1482 for (c ond = true; cond;) {1477 for (cur = sh_info->pagemap.leaf_head.next; cur != &sh_info->pagemap.leaf_head; cur = cur->next) { 1483 1478 btree_node_t *node; 1479 int i; 1484 1480 1485 ASSERT(!list_empty(&sh_info->pagemap.leaf_head)); 1486 node = list_get_instance(sh_info->pagemap.leaf_head.next, btree_node_t, leaf_link); 1487 if ((cond = node->keys)) { 1488 frame_free(ADDR2PFN((__address) node->value[0])); 1489 } 1481 node = list_get_instance(cur, btree_node_t, leaf_link); 1482 for (i = 0; i < node->keys; i++) 1483 frame_free(ADDR2PFN((__address) node->value[i])); 1490 1484 } 1491 1485
Note:
See TracChangeset
for help on using the changeset viewer.