Subversion Repositories HelenOS-historic

Rev

Rev 1 | Rev 6 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1 Rev 5
Line 25... Line 25...
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
29
#include <mm/tlb.h>
29
#include <mm/tlb.h>
-
 
30
#include <synch/spinlock.h>
-
 
31
#include <typedefs.h>
-
 
32
#include <arch/atomic.h>
-
 
33
#include <config.h>
30
 
34
 
-
 
35
#ifdef __SMP__
-
 
36
static spinlock_t tlblock;
-
 
37
static volatile int tlb_shutdown_cnt;
-
 
38
 
-
 
39
void tlb_init(void)
-
 
40
{
-
 
41
    spinlock_initialize(&tlblock);
-
 
42
    tlb_shutdown_cnt = 0;
-
 
43
}
-
 
44
 
-
 
45
/* must be called with interrupts disabled */
31
void tlb_shutdown(void)
46
void 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
 
-
 
57
void tlb_shutdown_finalize(void)
-
 
58
{
-
 
59
    spinlock_unlock(&tlblock);
-
 
60
}
-
 
61
 
-
 
62
void tlb_shutdown_ipi_recv(void)
32
{
63
{
33
    /* TODO: implement tlb_shutdown */
64
    atomic_inc((int *) &tlb_shutdown_cnt);
-
 
65
    spinlock_lock(&tlblock);
-
 
66
    spinlock_unlock(&tlblock);
-
 
67
    tlb_invalidate(0);  /* TODO: use valid ASID */
34
}
68
}
-
 
69
#endif /* __SMP__ */