Changeset 169587a in mainline for src


Ignore:
Timestamp:
2005-02-21T21:47:22Z (21 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b109ebb
Parents:
0ded477
Message:

TLB shootdown.

Location:
src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • src/main/main.c

    r0ded477 r169587a  
    4747#include <mm/frame.h>
    4848#include <mm/page.h>
     49#include <mm/tlb.h>
    4950#include <synch/waitq.h>
    5051
     
    111112        frame_init();
    112113        page_init();
     114        tlb_init();
    113115
    114116        #ifdef __SMP__
  • src/mm/tlb.c

    r0ded477 r169587a  
    2828
    2929#include <mm/tlb.h>
     30#include <synch/spinlock.h>
     31#include <typedefs.h>
     32#include <arch/atomic.h>
     33#include <config.h>
    3034
    31 void tlb_shutdown(void)
     35#ifdef __SMP__
     36static spinlock_t tlblock;
     37static volatile int tlb_shutdown_cnt;
     38
     39void tlb_init(void)
    3240{
    33         /* TODO: implement tlb_shutdown */
     41        spinlock_initialize(&tlblock);
     42        tlb_shutdown_cnt = 0;
    3443}
     44
     45/* must be called with interrupts disabled */
     46void tlb_shutdown_start(void)
     47{
     48        spinlock_lock(&tlblock);
     49        tlb_shutdown_ipi_send();
     50       
     51        while (tlb_shutdown_cnt < config.cpu_active - 1)
     52                ;
     53               
     54        tlb_shutdown_cnt = 0;
     55}
     56
     57void tlb_shutdown_finalize(void)
     58{
     59        spinlock_unlock(&tlblock);
     60}
     61
     62void tlb_shutdown_ipi_recv(void)
     63{
     64        atomic_inc((int *) &tlb_shutdown_cnt);
     65        spinlock_lock(&tlblock);
     66        spinlock_unlock(&tlblock);
     67        tlb_invalidate(0);      /* TODO: use valid ASID */
     68}
     69#endif /* __SMP__ */
  • src/mm/vm.c

    r0ded477 r169587a  
    3030#include <mm/page.h>
    3131#include <mm/frame.h>
     32#include <mm/tlb.h>
    3233#include <arch/mm/page.h>
    3334#include <arch/types.h>
     
    143144        for (i=0; i<a->size; i++)               
    144145                map_page_to_frame(a->address + i*PAGE_SIZE, 0, PAGE_NOT_PRESENT, 0);
    145                
     146       
    146147        spinlock_unlock(&a->lock);
    147148        cpu_priority_restore(pri);
     
    169170       
    170171        pri = cpu_priority_high();
     172
     173        tlb_shutdown_start();
     174
    171175        spinlock_lock(&m->lock);
    172176
     
    175179
    176180        spinlock_unlock(&m->lock);
     181
     182        tlb_invalidate(0);
     183        tlb_shutdown_finalize();
     184
    177185        cpu_priority_restore(pri);
    178186}
Note: See TracChangeset for help on using the changeset viewer.