Rev 3128 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3128 | Rev 3130 | ||
---|---|---|---|
Line 38... | Line 38... | ||
38 | * mappings between virtual addresses and physical addresses. |
38 | * mappings between virtual addresses and physical addresses. |
39 | * Functions here are mere wrappers that call the real implementation. |
39 | * Functions here are mere wrappers that call the real implementation. |
40 | * They however, define the single interface. |
40 | * They however, define the single interface. |
41 | */ |
41 | */ |
42 | 42 | ||
- | 43 | /* |
|
- | 44 | * Note on memory prefetching and updating memory mappings, also described in: |
|
- | 45 | * AMD x86-64 Architecture Programmer's Manual, Volume 2, System Programming, |
|
- | 46 | * 7.2.1 Special Coherency Considerations. |
|
- | 47 | * |
|
- | 48 | * The processor which modifies a page table mapping can access prefetched data |
|
- | 49 | * from the old mapping. In order to prevent this, we place a memory barrier |
|
- | 50 | * after a mapping is updated. |
|
- | 51 | * |
|
- | 52 | * We assume that the other processors are either not using the mapping yet |
|
- | 53 | * (i.e. during the bootstrap) or are executing the TLB shootdown code. While |
|
- | 54 | * we don't care much about the former case, the processors in the latter case |
|
- | 55 | * will do an implicit serialization by virtue of running the TLB shootdown |
|
- | 56 | * interrupt handler. |
|
- | 57 | */ |
|
- | 58 | ||
43 | #include <mm/page.h> |
59 | #include <mm/page.h> |
44 | #include <arch/mm/page.h> |
60 | #include <arch/mm/page.h> |
45 | #include <arch/mm/asid.h> |
61 | #include <arch/mm/asid.h> |
46 | #include <mm/as.h> |
62 | #include <mm/as.h> |
47 | #include <mm/frame.h> |
63 | #include <mm/frame.h> |