Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
microblaze
mm
mmu_context.c
Go to the documentation of this file.
1
/*
2
* This file contains the routines for handling the MMU.
3
*
4
* Copyright (C) 2007 Xilinx, Inc. All rights reserved.
5
*
6
* Derived from arch/ppc/mm/4xx_mmu.c:
7
* -- paulus
8
*
9
* Derived from arch/ppc/mm/init.c:
10
* Copyright (C) 1995-1996 Gary Thomas (
[email protected]
)
11
*
12
* Modifications by Paul Mackerras (PowerMac) (
[email protected]
)
13
* and Cort Dougan (PReP) (
[email protected]
)
14
* Copyright (C) 1996 Paul Mackerras
15
* Amiga/APUS changes by Jesper Skov (
[email protected]
).
16
*
17
* Derived from "arch/i386/mm/init.c"
18
* Copyright (C) 1991, 1992, 1993, 1994 Linus Torvalds
19
*
20
* This program is free software; you can redistribute it and/or
21
* modify it under the terms of the GNU General Public License
22
* as published by the Free Software Foundation; either version
23
* 2 of the License, or (at your option) any later version.
24
*
25
*/
26
27
#include <
linux/mm.h
>
28
#include <
linux/init.h
>
29
30
#include <asm/tlbflush.h>
31
#include <asm/mmu_context.h>
32
33
mm_context_t
next_mmu_context
;
34
unsigned
long
context_map
[
LAST_CONTEXT
/
BITS_PER_LONG
+ 1];
35
atomic_t
nr_free_contexts
;
36
struct
mm_struct
*
context_mm
[
LAST_CONTEXT
+1];
37
38
/*
39
* Initialize the context management stuff.
40
*/
41
void
__init
mmu_context_init
(
void
)
42
{
43
/*
44
* The use of context zero is reserved for the kernel.
45
* This code assumes FIRST_CONTEXT < 32.
46
*/
47
context_map
[0] = (1 <<
FIRST_CONTEXT
) - 1;
48
next_mmu_context =
FIRST_CONTEXT
;
49
atomic_set
(&nr_free_contexts,
LAST_CONTEXT
-
FIRST_CONTEXT
+ 1);
50
}
51
52
/*
53
* Steal a context from a task that has one at the moment.
54
*
55
* This isn't an LRU system, it just frees up each context in
56
* turn (sort-of pseudo-random replacement :). This would be the
57
* place to implement an LRU scheme if anyone were motivated to do it.
58
*/
59
void
steal_context
(
void
)
60
{
61
struct
mm_struct
*mm;
62
63
/* free up context `next_mmu_context' */
64
/* if we shouldn't free context 0, don't... */
65
if
(next_mmu_context <
FIRST_CONTEXT
)
66
next_mmu_context =
FIRST_CONTEXT
;
67
mm = context_mm[
next_mmu_context
];
68
flush_tlb_mm
(mm);
69
destroy_context
(mm);
70
}
Generated on Thu Jan 10 2013 13:08:40 for Linux Kernel by
1.8.2