Changeset f8d069e8 in mainline


Ignore:
Timestamp:
2006-06-02T00:54:56Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
01ebbdf
Parents:
8da51ad
Message:

Remove three infinite loops introduced yesterday :-)

Make ia64 ready to load 5 ELF images.

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/Makefile.inc

    r8da51ad rf8d069e8  
    4242INIT0_SIZE = 0x100000
    4343
    44 INIT1_ADDRESS = 0xe000000000800000
    45 INIT1_SIZE = 0x100000
    46 
    4744CFLAGS += -mconstant-gp -fno-unwind-tables -mfixed-range=f32-f127
    4845LFLAGS += -EL
    4946AFLAGS += -mconstant-gp
    5047
    51 DEFS += -D__64_BITS__ -DINIT0_ADDRESS=$(INIT0_ADDRESS) -DINIT0_SIZE=$(INIT0_SIZE) \
    52         -DINIT1_ADDRESS=$(INIT1_ADDRESS) -DINIT1_SIZE=$(INIT1_SIZE)
     48DEFS += -D__64_BITS__ -DINIT0_ADDRESS=$(INIT0_ADDRESS) -DINIT0_SIZE=$(INIT0_SIZE)
    5349
    5450## Compile with page hash table support.
  • arch/ia64/src/ia64.c

    r8da51ad rf8d069e8  
    4848{
    4949        /* Setup usermode init tasks. */
    50         init.cnt = 2;
     50        init.cnt = 5;
    5151        init.tasks[0].addr = INIT0_ADDRESS;
    5252        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;
    5561}
    5662
  • generic/src/mm/as.c

    r8da51ad rf8d069e8  
    137137{
    138138        ipl_t ipl;
    139         bool cond;
     139        link_t *cur;
    140140
    141141        ASSERT(as->refcount == 0);
     
    157157         * Destroy address space areas of the address space.
    158158         */     
    159         for (cond = true; cond; ) {
     159        for (cur = as->as_area_btree.leaf_head.next; cur != &as->as_area_btree.leaf_head; cur = cur->next) {
    160160                btree_node_t *node;
     161                int i;
    161162               
    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
    168168        btree_destroy(&as->as_area_btree);
    169169        page_table_destroy(as->page_table);
     
    411411        as_area_t *area;
    412412        __address base;
     413        link_t *cur;
    413414        ipl_t ipl;
    414         bool cond;
    415415
    416416        ipl = interrupts_disable();
     
    433433        /*
    434434         * 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) {
    442437                btree_node_t *node;
     438                int i;
    443439               
    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;
    449444                        pte_t *pte;
    450445                       
    451                         for (i = 0; i < (count_t) node->value[0]; i++) {
     446                        for (j = 0; j < (count_t) node->value[i]; j++) {
    452447                                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);
    454449                                ASSERT(pte && PTE_VALID(pte) && PTE_PRESENT(pte));
    455450                                if (area->backend && area->backend->frame_free) {
    456451                                        area->backend->frame_free(area,
    457                                                 b + i*PAGE_SIZE, PTE_GET_FRAME(pte));
     452                                                b + j*PAGE_SIZE, PTE_GET_FRAME(pte));
    458453                                }
    459                                 page_mapping_remove(as, b + i*PAGE_SIZE);
     454                                page_mapping_remove(as, b + j*PAGE_SIZE);
    460455                                page_table_unlock(as, false);
    461456                        }
     
    14741469        if (--sh_info->refcount == 0) {
    14751470                dealloc = true;
    1476                 bool cond;
     1471                link_t *cur;
    14771472               
    14781473                /*
     
    14801475                 * reference from all frames found there.
    14811476                 */
    1482                 for (cond = true; cond;) {
     1477                for (cur = sh_info->pagemap.leaf_head.next; cur != &sh_info->pagemap.leaf_head; cur = cur->next) {
    14831478                        btree_node_t *node;
     1479                        int i;
    14841480                       
    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]));
    14901484                }
    14911485               
Note: See TracChangeset for help on using the changeset viewer.