1 |
1275 |
phoenix |
MEMC enhancements for Linux 2.3
|
2 |
|
|
-------------------------------
|
3 |
|
|
|
4 |
|
|
The current interface:
|
5 |
|
|
|
6 |
|
|
There is a cache of the MEMC settings held in tsk->tss.memcmap, which is
|
7 |
|
|
kept up to date by the following functions (from the page tables):
|
8 |
|
|
|
9 |
|
|
update_memc_all() hits: 2
|
10 |
|
|
Updates all MEMC caches on all processes. Update the real MEMC
|
11 |
|
|
to reflect the `current' tasks page tables.
|
12 |
|
|
|
13 |
|
|
update_memc_tsk(tsk) hits: 0
|
14 |
|
|
Update the MEMC cache for the specified task. If tsk is the
|
15 |
|
|
`current' task, then update the real MEMC as well.
|
16 |
|
|
|
17 |
|
|
update_memc_mm(mm) hits: 16
|
18 |
|
|
Update the MEMC cache for any task which has a mm_struct
|
19 |
|
|
corresponding to `mm'. If the `current' tasks mm_struct
|
20 |
|
|
includes this, then update the real MEMC as well.
|
21 |
|
|
|
22 |
|
|
update_memc_addr(mm, addr, pte) hits: 8
|
23 |
|
|
Update the MEMC cache entry defined by the physical address
|
24 |
|
|
in pte for any task which has a mm_struct corresponding to `mm'.
|
25 |
|
|
If the `current' tasks mm_struct includes this, then update the
|
26 |
|
|
real MEMC as well.
|
27 |
|
|
|
28 |
|
|
The proposed interface:
|
29 |
|
|
|
30 |
|
|
Couple the MEMC cache into the mm_struct so that we only have to
|
31 |
|
|
keep one copy per mm_struct. This also allows us to reduce the
|
32 |
|
|
number of loops through all existing tasks on each MEMC change.
|
33 |
|
|
|
34 |
|
|
memc_clear(mm, physaddr) hits: 6
|
35 |
|
|
Clear the MEMC mapping associated with the physical address
|
36 |
|
|
`physaddr'. If the `current' tasks mm_struct is `mm', then
|
37 |
|
|
update the real MEMC as well. (should equate to a possible
|
38 |
|
|
two writes and zero reads).
|
39 |
|
|
|
40 |
|
|
memc_update_addr(mm, pte, logaddr) hits: 10
|
41 |
|
|
Change the MEMC mapping for the physical address specified
|
42 |
|
|
in `pte' to point to the logical address `logaddr', with the
|
43 |
|
|
protection specified in `pte'. If the `current' tasks mm_struct
|
44 |
|
|
is `mm', then update the real MEMC as well. (should again equate
|
45 |
|
|
to a possible two writes and zero reads).
|
46 |
|
|
|
47 |
|
|
memc_update_mm(mm) hits: 7
|
48 |
|
|
Rebuild the MEMC mappings for the specified `mm' in the same way
|
49 |
|
|
that update_memc_mm used to. If the `current' tasks mm_struct
|
50 |
|
|
is `mm', update the real MEMC as well.
|
51 |
|
|
|
52 |
|
|
memc_update_all() hits: 2
|
53 |
|
|
Rebuild the MEMC mappings for all mm_structs, including the real
|
54 |
|
|
MEMC.
|
55 |
|
|
|
56 |
|
|
The hit numbers are approximate usage of each function in the 2.2.7
|
57 |
|
|
memory management (mm) code, and there are other uses outside this area.
|