Changeset 20d50a1 in mainline for generic/src/main/kinit.c


Ignore:
Timestamp:
2006-01-13T13:02:45Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
f9425006
Parents:
0369911
Message:

Memory management work.

  • vm.* → as.* (as like address space is, imho, more fitting)
  • Don't do TLB shootdown on vm_install(). Some architectures only need to call tlb_invalidate_asid().
  • Don't allocate all frames for as_area in as_area_create(), but let them be allocated on-demand by as_page_fault().
  • Add high-level page fault handler as_page_fault().
  • Add as_area_load_mapping().
File:
1 edited

Legend:

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

    r0369911 r20d50a1  
    4040#include <mm/page.h>
    4141#include <arch/mm/page.h>
    42 #include <mm/vm.h>
     42#include <mm/as.h>
    4343#include <mm/frame.h>
    4444#include <print.h>
     
    7171        thread_t *t;
    7272#ifdef CONFIG_USERSPACE
    73         vm_t *m;
    74         vm_area_t *a;
     73        as_t *as;
     74        as_area_t *a;
     75        __address frame;
     76        index_t pfn[1];
    7577        task_t *u;
    7678#endif
     
    142144         * Create the first user task.
    143145         */
    144         m = vm_create(NULL);
    145         if (!m)
    146                 panic("vm_create\n");
    147         u = task_create(m);
     146        as = as_create(NULL);
     147        if (!as)
     148                panic("as_create\n");
     149        u = task_create(as);
    148150        if (!u)
    149151                panic("task_create\n");
     
    153155
    154156        /*
    155          * Create the text vm_area and copy the userspace code there.
     157         * Create the text as_area and copy the userspace code there.
    156158         */     
    157         a = vm_area_create(m, VMA_TEXT, 1, UTEXT_ADDRESS);
     159        a = as_area_create(as, AS_AREA_TEXT, 1, UTEXT_ADDRESS);
    158160        if (!a)
    159                 panic("vm_area_create: vm_text\n");
    160         vm_area_map(a, m);
     161                panic("as_area_create: text\n");
     162
     163        frame = frame_alloc(0, ONE_FRAME, NULL);
     164
    161165        if (config.init_size > 0)
    162                 memcpy((void *) PA2KA(a->mapping[0]), (void *) config.init_addr, config.init_size < PAGE_SIZE ? config.init_size : PAGE_SIZE);
     166                memcpy((void *) PA2KA(frame), (void *) config.init_addr, config.init_size < PAGE_SIZE ? config.init_size : PAGE_SIZE);
    163167        else
    164                 memcpy((void *) PA2KA(a->mapping[0]), (void *) utext, utext_size < PAGE_SIZE ? utext_size : PAGE_SIZE);
     168                memcpy((void *) PA2KA(frame), (void *) utext, utext_size < PAGE_SIZE ? utext_size : PAGE_SIZE);
     169       
     170        pfn[0] = frame / FRAME_SIZE;
     171        as_area_load_mapping(a, pfn);
    165172
    166173        /*
    167          * Create the data vm_area.
     174         * Create the data as_area.
    168175         */
    169         a = vm_area_create(m, VMA_STACK, 1, USTACK_ADDRESS);
     176        a = as_area_create(as, AS_AREA_STACK, 1, USTACK_ADDRESS);
    170177        if (!a)
    171                 panic("vm_area_create: vm_stack\n");
    172         vm_area_map(a, m);
     178                panic("as_area_create: stack\n");
    173179       
    174180        thread_ready(t);
Note: See TracChangeset for help on using the changeset viewer.