Changeset 4512d7e in mainline for generic/src


Ignore:
Timestamp:
2006-01-19T22:17:47Z (20 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
6461d67c
Parents:
64c44e8
Message:

New ASID management subsystem (initial work, more is required).
Some TLB invalidation changes.

Location:
generic/src
Files:
4 edited

Legend:

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

    r64c44e8 r4512d7e  
    147147                        panic("config.init_addr is not frame aligned");
    148148               
    149                 as = as_create(NULL);
     149                as = as_create(NULL, 0);
    150150                if (!as)
    151151                        panic("as_create\n");
  • generic/src/main/main.c

    r64c44e8 r4512d7e  
    186186         * Create kernel address space.
    187187         */
    188         as = as_create(GET_PTL0_ADDRESS());
     188        as = as_create(GET_PTL0_ADDRESS(), AS_KERNEL);
    189189        if (!as)
    190190                panic("can't create kernel address space\n");
  • generic/src/mm/as.c

    r64c44e8 r4512d7e  
    3434
    3535#include <mm/as.h>
     36#include <mm/asid.h>
    3637#include <mm/page.h>
    3738#include <mm/frame.h>
     
    4041#include <arch/mm/page.h>
    4142#include <genarch/mm/page_pt.h>
     43#include <mm/asid.h>
    4244#include <arch/mm/asid.h>
    4345#include <arch/mm/as.h>
     
    7173 *        (Virtual Address Translation) mechanisms.
    7274 */
    73 as_t *as_create(pte_t *ptl0)
     75as_t *as_create(pte_t *ptl0, int flags)
    7476{
    7577        as_t *as;
     
    7779        as = (as_t *) malloc(sizeof(as_t));
    7880        if (as) {
     81                list_initialize(&as->as_with_asid_link);
    7982                spinlock_initialize(&as->lock, "as_lock");
    8083                list_initialize(&as->as_area_head);
    8184
    82                 as->asid = asid_get();
     85                if (flags & AS_KERNEL)
     86                        as->asid = ASID_KERNEL;
     87                else
     88                        as->asid = ASID_INVALID;
    8389
    8490                as->ptl0 = ptl0;
     
    290296        ipl_t ipl;
    291297       
     298        asid_install(as);
     299       
    292300        ipl = interrupts_disable();
    293301        spinlock_lock(&as->lock);
     
    299307        /*
    300308         * Perform architecture-specific steps.
    301          * (e.g. invalidate TLB, install ASID etc.)
     309         * (e.g. write ASID to hardware register etc.)
    302310         */
    303311        as_install_arch(as);
  • generic/src/mm/tlb.c

    r64c44e8 r4512d7e  
    4747#ifdef CONFIG_SMP
    4848/* must be called with interrupts disabled */
    49 void tlb_shootdown_start(void)
     49void tlb_shootdown_start(tlb_invalidate_type_t type, asid_t asid, __address page, count_t cnt)
    5050{
    5151        int i;
     
    5353        CPU->tlb_active = 0;
    5454        spinlock_lock(&tlblock);
     55       
     56        /*
     57         * TODO: assemble shootdown message.
     58         */
    5559        tlb_shootdown_ipi_send();
    56         tlb_invalidate(0); /* TODO: use valid ASID */
     60
     61        switch (type) {
     62            case TLB_INVL_ALL:
     63                tlb_invalidate_all();
     64                break;
     65            case TLB_INVL_ASID:
     66                tlb_invalidate_asid(asid);
     67                break;
     68            case TLB_INVL_PAGES:
     69                tlb_invalidate_pages(asid, page, cnt);
     70                break;
     71            default:
     72                panic("unknown tlb_invalidate_type_t value: %d\n", type);
     73                break;
     74        }
    5775       
    5876busy_wait:     
     
    7896        spinlock_lock(&tlblock);
    7997        spinlock_unlock(&tlblock);
    80         tlb_invalidate(0);      /* TODO: use valid ASID */
     98        tlb_invalidate_all();   /* TODO: use valid ASID */
    8199        CPU->tlb_active = 1;
    82100}
Note: See TracChangeset for help on using the changeset viewer.