diff options
Diffstat (limited to 'include/asm-x86/paravirt.h')
-rw-r--r-- | include/asm-x86/paravirt.h | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/include/asm-x86/paravirt.h b/include/asm-x86/paravirt.h index 891971f57d35..8d6ae2f760d0 100644 --- a/include/asm-x86/paravirt.h +++ b/include/asm-x86/paravirt.h | |||
@@ -124,6 +124,9 @@ struct pv_cpu_ops { | |||
124 | int entrynum, const void *desc, int size); | 124 | int entrynum, const void *desc, int size); |
125 | void (*write_idt_entry)(gate_desc *, | 125 | void (*write_idt_entry)(gate_desc *, |
126 | int entrynum, const gate_desc *gate); | 126 | int entrynum, const gate_desc *gate); |
127 | void (*alloc_ldt)(struct desc_struct *ldt, unsigned entries); | ||
128 | void (*free_ldt)(struct desc_struct *ldt, unsigned entries); | ||
129 | |||
127 | void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t); | 130 | void (*load_sp0)(struct tss_struct *tss, struct thread_struct *t); |
128 | 131 | ||
129 | void (*set_iopl_mask)(unsigned mask); | 132 | void (*set_iopl_mask)(unsigned mask); |
@@ -201,12 +204,6 @@ struct pv_irq_ops { | |||
201 | 204 | ||
202 | struct pv_apic_ops { | 205 | struct pv_apic_ops { |
203 | #ifdef CONFIG_X86_LOCAL_APIC | 206 | #ifdef CONFIG_X86_LOCAL_APIC |
204 | /* | ||
205 | * Direct APIC operations, principally for VMI. Ideally | ||
206 | * these shouldn't be in this interface. | ||
207 | */ | ||
208 | void (*apic_write)(unsigned long reg, u32 v); | ||
209 | u32 (*apic_read)(unsigned long reg); | ||
210 | void (*setup_boot_clock)(void); | 207 | void (*setup_boot_clock)(void); |
211 | void (*setup_secondary_clock)(void); | 208 | void (*setup_secondary_clock)(void); |
212 | 209 | ||
@@ -331,6 +328,7 @@ struct pv_lock_ops { | |||
331 | int (*spin_is_locked)(struct raw_spinlock *lock); | 328 | int (*spin_is_locked)(struct raw_spinlock *lock); |
332 | int (*spin_is_contended)(struct raw_spinlock *lock); | 329 | int (*spin_is_contended)(struct raw_spinlock *lock); |
333 | void (*spin_lock)(struct raw_spinlock *lock); | 330 | void (*spin_lock)(struct raw_spinlock *lock); |
331 | void (*spin_lock_flags)(struct raw_spinlock *lock, unsigned long flags); | ||
334 | int (*spin_trylock)(struct raw_spinlock *lock); | 332 | int (*spin_trylock)(struct raw_spinlock *lock); |
335 | void (*spin_unlock)(struct raw_spinlock *lock); | 333 | void (*spin_unlock)(struct raw_spinlock *lock); |
336 | }; | 334 | }; |
@@ -836,6 +834,16 @@ do { \ | |||
836 | (aux) = __aux; \ | 834 | (aux) = __aux; \ |
837 | } while (0) | 835 | } while (0) |
838 | 836 | ||
837 | static inline void paravirt_alloc_ldt(struct desc_struct *ldt, unsigned entries) | ||
838 | { | ||
839 | PVOP_VCALL2(pv_cpu_ops.alloc_ldt, ldt, entries); | ||
840 | } | ||
841 | |||
842 | static inline void paravirt_free_ldt(struct desc_struct *ldt, unsigned entries) | ||
843 | { | ||
844 | PVOP_VCALL2(pv_cpu_ops.free_ldt, ldt, entries); | ||
845 | } | ||
846 | |||
839 | static inline void load_TR_desc(void) | 847 | static inline void load_TR_desc(void) |
840 | { | 848 | { |
841 | PVOP_VCALL0(pv_cpu_ops.load_tr_desc); | 849 | PVOP_VCALL0(pv_cpu_ops.load_tr_desc); |
@@ -910,19 +918,6 @@ static inline void slow_down_io(void) | |||
910 | } | 918 | } |
911 | 919 | ||
912 | #ifdef CONFIG_X86_LOCAL_APIC | 920 | #ifdef CONFIG_X86_LOCAL_APIC |
913 | /* | ||
914 | * Basic functions accessing APICs. | ||
915 | */ | ||
916 | static inline void apic_write(unsigned long reg, u32 v) | ||
917 | { | ||
918 | PVOP_VCALL2(pv_apic_ops.apic_write, reg, v); | ||
919 | } | ||
920 | |||
921 | static inline u32 apic_read(unsigned long reg) | ||
922 | { | ||
923 | return PVOP_CALL1(unsigned long, pv_apic_ops.apic_read, reg); | ||
924 | } | ||
925 | |||
926 | static inline void setup_boot_clock(void) | 921 | static inline void setup_boot_clock(void) |
927 | { | 922 | { |
928 | PVOP_VCALL0(pv_apic_ops.setup_boot_clock); | 923 | PVOP_VCALL0(pv_apic_ops.setup_boot_clock); |
@@ -1413,6 +1408,12 @@ static __always_inline void __raw_spin_lock(struct raw_spinlock *lock) | |||
1413 | PVOP_VCALL1(pv_lock_ops.spin_lock, lock); | 1408 | PVOP_VCALL1(pv_lock_ops.spin_lock, lock); |
1414 | } | 1409 | } |
1415 | 1410 | ||
1411 | static __always_inline void __raw_spin_lock_flags(struct raw_spinlock *lock, | ||
1412 | unsigned long flags) | ||
1413 | { | ||
1414 | PVOP_VCALL2(pv_lock_ops.spin_lock_flags, lock, flags); | ||
1415 | } | ||
1416 | |||
1416 | static __always_inline int __raw_spin_trylock(struct raw_spinlock *lock) | 1417 | static __always_inline int __raw_spin_trylock(struct raw_spinlock *lock) |
1417 | { | 1418 | { |
1418 | return PVOP_CALL1(int, pv_lock_ops.spin_trylock, lock); | 1419 | return PVOP_CALL1(int, pv_lock_ops.spin_trylock, lock); |