aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-i386/paravirt.h
diff options
context:
space:
mode:
authorZachary Amsden <zach@vmware.com>2007-03-05 03:30:37 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-03-05 10:57:52 -0500
commit9a1c13e91f100c12dcad3a1be1b12890bf32f6ff (patch)
tree9c132900f5b331570d91df515167776586fb2960 /include/asm-i386/paravirt.h
parent1182d8528b620c23d043bccbbef092b42062960a (diff)
[PATCH] vmi: fix highpte
Provide a PT map hook for HIGHPTE kernels to designate where they are mapping page tables. This information is required so the physical address of PTE updates can be determined; otherwise, the mm layer would have to carry the physical address all the way to each PTE modification callsite, which is even more hideous that the macros required to provide the proper hooks. So lets not mess up arch neutral code to achieve this, but keep the horror in an #ifdef HIGHPTE in include/asm-i386/pgtable.h. I had to use macros here because some types are not yet defined in all the include paths for this header. This patch is absolutely required for HIGHPTE kernels to operate properly with VMI. Signed-off-by: Zachary Amsden <zach@vmware.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/asm-i386/paravirt.h')
-rw-r--r--include/asm-i386/paravirt.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/asm-i386/paravirt.h b/include/asm-i386/paravirt.h
index a35c81480654..e01d895d7379 100644
--- a/include/asm-i386/paravirt.h
+++ b/include/asm-i386/paravirt.h
@@ -131,6 +131,8 @@ struct paravirt_ops
131 void (*flush_tlb_kernel)(void); 131 void (*flush_tlb_kernel)(void);
132 void (*flush_tlb_single)(u32 addr); 132 void (*flush_tlb_single)(u32 addr);
133 133
134 void (fastcall *map_pt_hook)(int type, pte_t *va, u32 pfn);
135
134 void (*alloc_pt)(u32 pfn); 136 void (*alloc_pt)(u32 pfn);
135 void (*alloc_pd)(u32 pfn); 137 void (*alloc_pd)(u32 pfn);
136 void (*alloc_pd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count); 138 void (*alloc_pd_clone)(u32 pfn, u32 clonepfn, u32 start, u32 count);
@@ -354,6 +356,8 @@ static inline void startup_ipi_hook(int phys_apicid, unsigned long start_eip,
354#define __flush_tlb_global() paravirt_ops.flush_tlb_kernel() 356#define __flush_tlb_global() paravirt_ops.flush_tlb_kernel()
355#define __flush_tlb_single(addr) paravirt_ops.flush_tlb_single(addr) 357#define __flush_tlb_single(addr) paravirt_ops.flush_tlb_single(addr)
356 358
359#define paravirt_map_pt_hook(type, va, pfn) paravirt_ops.map_pt_hook(type, va, pfn)
360
357#define paravirt_alloc_pt(pfn) paravirt_ops.alloc_pt(pfn) 361#define paravirt_alloc_pt(pfn) paravirt_ops.alloc_pt(pfn)
358#define paravirt_release_pt(pfn) paravirt_ops.release_pt(pfn) 362#define paravirt_release_pt(pfn) paravirt_ops.release_pt(pfn)
359 363