Changeset 085d973 in mainline for generic/src/main/main.c


Ignore:
Timestamp:
2006-02-08T12:34:05Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5e3757d
Parents:
eb1b8b6
Message:

Cleanup o frame allocator.
Removed early_malloc & initial heap.
Will break ia64, ppc & sparc.
Added e820 table print.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • generic/src/main/main.c

    reb1b8b6 r085d973  
    4444#include <interrupt.h>
    4545#include <arch/mm/memory_init.h>
    46 #include <mm/heap.h>
    4746#include <mm/frame.h>
    4847#include <mm/page.h>
     
    104103void main_bsp(void)
    105104{
     105        __address stackaddr;
     106
    106107        config.cpu_count = 1;
    107108        config.cpu_active = 1;
     
    112113        config.init_size = init_size;
    113114       
    114         if (init_size > 0)
    115                 config.heap_addr = init_addr + init_size;
    116         else
    117                 config.heap_addr = hardcoded_load_address + hardcoded_ktext_size + hardcoded_kdata_size;
    118        
    119         config.heap_size = CONFIG_HEAP_SIZE + (config.memory_size / FRAME_SIZE) * sizeof(frame_t);
    120        
    121         config.kernel_size = ALIGN_UP(config.heap_addr - hardcoded_load_address + config.heap_size, PAGE_SIZE);
    122         config.heap_delta = config.kernel_size - (config.heap_addr - hardcoded_load_address + config.heap_size);
    123         config.kernel_size = config.kernel_size + CONFIG_STACK_SIZE;
     115        config.kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size, PAGE_SIZE);
     116        stackaddr = config.base + config.kernel_size;
     117        /* Avoid placing kernel on top of init */
     118        if (overlaps(stackaddr,stackaddr+CONFIG_STACK_SIZE,
     119                     config.init_addr, config.init_addr+config.init_size)) {
     120               
     121                stackaddr = ALIGN_UP(config.init_addr+config.init_size,
     122                                     CONFIG_STACK_SIZE);
     123                config.init_size = ALIGN_UP(config.init_size,CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE;
     124        } else {
     125                config.kernel_size += CONFIG_STACK_SIZE;
     126        }
    124127       
    125128        context_save(&ctx);
    126         context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + config.kernel_size - CONFIG_STACK_SIZE, CONFIG_STACK_SIZE);
     129        context_set(&ctx, FADDR(main_bsp_separated_stack),
     130                    stackaddr, CONFIG_STACK_SIZE);
    127131        context_restore(&ctx);
    128132        /* not reached */
     
    141145       
    142146        the_initialize(THE);
    143        
    144147        /*
    145148         * kconsole data structures must be initialized very early
     
    159162         */     
    160163        arch_pre_mm_init();
    161         early_heap_init(config.heap_addr, config.heap_size + config.heap_delta);
     164        /* Initialize at least 1 memory segment big enough for slab to work */
    162165        frame_init();
    163166        slab_cache_init();
     
    165168        page_init();
    166169        tlb_init();
    167         arch_post_mm_init();
    168 
     170        arch_post_mm_init();   
    169171        version_print();
    170172
     
    179181        printf("config.memory_size=%dM\n", config.memory_size/(1024*1024));
    180182        printf("config.cpu_count=%d\n", config.cpu_count);
    181 
    182183        cpu_init();
    183184
    184185        calibrate_delay_loop();
    185 
    186186        timeout_init();
    187187        scheduler_init();
Note: See TracChangeset for help on using the changeset viewer.