diff options
| -rw-r--r-- | arch/x86/include/asm/paravirt.h | 2 | ||||
| -rw-r--r-- | arch/x86/include/asm/paravirt_types.h | 2 | ||||
| -rw-r--r-- | arch/x86/kernel/paravirt-spinlocks.c | 2 | ||||
| -rw-r--r-- | arch/x86/xen/spinlock.c | 3 |
4 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 040e72db5ea9..7131e12cefa1 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
| @@ -715,7 +715,7 @@ static inline void __set_fixmap(unsigned /* enum fixed_addresses */ idx, | |||
| 715 | static __always_inline void __ticket_lock_spinning(struct arch_spinlock *lock, | 715 | static __always_inline void __ticket_lock_spinning(struct arch_spinlock *lock, |
| 716 | __ticket_t ticket) | 716 | __ticket_t ticket) |
| 717 | { | 717 | { |
| 718 | PVOP_VCALL2(pv_lock_ops.lock_spinning, lock, ticket); | 718 | PVOP_VCALLEE2(pv_lock_ops.lock_spinning, lock, ticket); |
| 719 | } | 719 | } |
| 720 | 720 | ||
| 721 | static __always_inline void ____ticket_unlock_kick(struct arch_spinlock *lock, | 721 | static __always_inline void ____ticket_unlock_kick(struct arch_spinlock *lock, |
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h index 346a07c1e71d..04ac40e192eb 100644 --- a/arch/x86/include/asm/paravirt_types.h +++ b/arch/x86/include/asm/paravirt_types.h | |||
| @@ -334,7 +334,7 @@ typedef u16 __ticket_t; | |||
| 334 | #endif | 334 | #endif |
| 335 | 335 | ||
| 336 | struct pv_lock_ops { | 336 | struct pv_lock_ops { |
| 337 | void (*lock_spinning)(struct arch_spinlock *lock, __ticket_t ticket); | 337 | struct paravirt_callee_save lock_spinning; |
| 338 | void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket); | 338 | void (*unlock_kick)(struct arch_spinlock *lock, __ticket_t ticket); |
| 339 | }; | 339 | }; |
| 340 | 340 | ||
diff --git a/arch/x86/kernel/paravirt-spinlocks.c b/arch/x86/kernel/paravirt-spinlocks.c index c2e010e5fbce..4251c1d4c0be 100644 --- a/arch/x86/kernel/paravirt-spinlocks.c +++ b/arch/x86/kernel/paravirt-spinlocks.c | |||
| @@ -9,7 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | struct pv_lock_ops pv_lock_ops = { | 10 | struct pv_lock_ops pv_lock_ops = { |
| 11 | #ifdef CONFIG_SMP | 11 | #ifdef CONFIG_SMP |
| 12 | .lock_spinning = paravirt_nop, | 12 | .lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop), |
| 13 | .unlock_kick = paravirt_nop, | 13 | .unlock_kick = paravirt_nop, |
| 14 | #endif | 14 | #endif |
| 15 | }; | 15 | }; |
diff --git a/arch/x86/xen/spinlock.c b/arch/x86/xen/spinlock.c index 669a971c78fd..6c8792b298ed 100644 --- a/arch/x86/xen/spinlock.c +++ b/arch/x86/xen/spinlock.c | |||
| @@ -173,6 +173,7 @@ out: | |||
| 173 | local_irq_restore(flags); | 173 | local_irq_restore(flags); |
| 174 | spin_time_accum_blocked(start); | 174 | spin_time_accum_blocked(start); |
| 175 | } | 175 | } |
| 176 | PV_CALLEE_SAVE_REGS_THUNK(xen_lock_spinning); | ||
| 176 | 177 | ||
| 177 | static void xen_unlock_kick(struct arch_spinlock *lock, __ticket_t next) | 178 | static void xen_unlock_kick(struct arch_spinlock *lock, __ticket_t next) |
| 178 | { | 179 | { |
| @@ -260,7 +261,7 @@ void __init xen_init_spinlocks(void) | |||
| 260 | return; | 261 | return; |
| 261 | } | 262 | } |
| 262 | 263 | ||
| 263 | pv_lock_ops.lock_spinning = xen_lock_spinning; | 264 | pv_lock_ops.lock_spinning = PV_CALLEE_SAVE(xen_lock_spinning); |
| 264 | pv_lock_ops.unlock_kick = xen_unlock_kick; | 265 | pv_lock_ops.unlock_kick = xen_unlock_kick; |
| 265 | } | 266 | } |
| 266 | 267 | ||
