diff options
author | Rusty Russell <rusty@rustcorp.com.au> | 2007-05-02 13:27:10 -0400 |
---|---|---|
committer | Andi Kleen <andi@basil.nowhere.org> | 2007-05-02 13:27:10 -0400 |
commit | 90a0a06aa81692028864c21f981905fda46b1208 (patch) | |
tree | 516528b328d5288ee057d1eff5491e2ba1b49af1 /include/asm-i386/paravirt.h | |
parent | 52de74dd3994e165ef1b35c33d54655a6400e30c (diff) |
[PATCH] i386: rationalize paravirt wrappers
paravirt.c used to implement native versions of all low-level
functions. Far cleaner is to have the native versions exposed in the
headers and as inline native_XXX, and if !CONFIG_PARAVIRT, then simply
#define XXX native_XXX.
There are several nice side effects:
1) write_dt_entry() now takes the correct "struct Xgt_desc_struct *"
not "void *".
2) load_TLS is reintroduced to the for loop, not manually unrolled
with a #error in case the bounds ever change.
3) Macros become inlines, with type checking.
4) Access to the native versions is trivial for KVM, lguest, Xen and
others who might want it.
Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Andi Kleen <ak@muc.de>
Cc: Avi Kivity <avi@qumranet.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'include/asm-i386/paravirt.h')
-rw-r--r-- | include/asm-i386/paravirt.h | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/include/asm-i386/paravirt.h b/include/asm-i386/paravirt.h index e63f1e444fcf..32acebce9ae2 100644 --- a/include/asm-i386/paravirt.h +++ b/include/asm-i386/paravirt.h | |||
@@ -29,6 +29,7 @@ struct thread_struct; | |||
29 | struct Xgt_desc_struct; | 29 | struct Xgt_desc_struct; |
30 | struct tss_struct; | 30 | struct tss_struct; |
31 | struct mm_struct; | 31 | struct mm_struct; |
32 | struct desc_struct; | ||
32 | struct paravirt_ops | 33 | struct paravirt_ops |
33 | { | 34 | { |
34 | unsigned int kernel_rpl; | 35 | unsigned int kernel_rpl; |
@@ -105,14 +106,13 @@ struct paravirt_ops | |||
105 | void (*set_ldt)(const void *desc, unsigned entries); | 106 | void (*set_ldt)(const void *desc, unsigned entries); |
106 | unsigned long (*store_tr)(void); | 107 | unsigned long (*store_tr)(void); |
107 | void (*load_tls)(struct thread_struct *t, unsigned int cpu); | 108 | void (*load_tls)(struct thread_struct *t, unsigned int cpu); |
108 | void (*write_ldt_entry)(void *dt, int entrynum, | 109 | void (*write_ldt_entry)(struct desc_struct *, |
109 | u32 low, u32 high); | 110 | int entrynum, u32 low, u32 high); |
110 | void (*write_gdt_entry)(void *dt, int entrynum, | 111 | void (*write_gdt_entry)(struct desc_struct *, |
111 | u32 low, u32 high); | 112 | int entrynum, u32 low, u32 high); |
112 | void (*write_idt_entry)(void *dt, int entrynum, | 113 | void (*write_idt_entry)(struct desc_struct *, |
113 | u32 low, u32 high); | 114 | int entrynum, u32 low, u32 high); |
114 | void (*load_esp0)(struct tss_struct *tss, | 115 | void (*load_esp0)(struct tss_struct *tss, struct thread_struct *t); |
115 | struct thread_struct *thread); | ||
116 | 116 | ||
117 | void (*set_iopl_mask)(unsigned mask); | 117 | void (*set_iopl_mask)(unsigned mask); |
118 | 118 | ||
@@ -232,6 +232,7 @@ static inline void halt(void) | |||
232 | 232 | ||
233 | #define get_kernel_rpl() (paravirt_ops.kernel_rpl) | 233 | #define get_kernel_rpl() (paravirt_ops.kernel_rpl) |
234 | 234 | ||
235 | /* These should all do BUG_ON(_err), but our headers are too tangled. */ | ||
235 | #define rdmsr(msr,val1,val2) do { \ | 236 | #define rdmsr(msr,val1,val2) do { \ |
236 | int _err; \ | 237 | int _err; \ |
237 | u64 _l = paravirt_ops.read_msr(msr,&_err); \ | 238 | u64 _l = paravirt_ops.read_msr(msr,&_err); \ |