Commit | Line | Data |
---|---|---|
d5de8841 JF |
1 | /* |
2 | * Split spinlock implementation out into its own file, so it can be | |
3 | * compiled in a FTRACE-compatible way. | |
4 | */ | |
5 | #include <linux/spinlock.h> | |
6 | #include <linux/module.h> | |
96f853ea | 7 | #include <linux/jump_label.h> |
d5de8841 JF |
8 | |
9 | #include <asm/paravirt.h> | |
10 | ||
62c7a1e9 | 11 | #ifdef CONFIG_QUEUED_SPINLOCKS |
f233f7f1 PZI |
12 | __visible void __native_queued_spin_unlock(struct qspinlock *lock) |
13 | { | |
14 | native_queued_spin_unlock(lock); | |
15 | } | |
16 | ||
17 | PV_CALLEE_SAVE_REGS_THUNK(__native_queued_spin_unlock); | |
18 | ||
19 | bool pv_is_native_spin_unlock(void) | |
20 | { | |
21 | return pv_lock_ops.queued_spin_unlock.func == | |
22 | __raw_callee_save___native_queued_spin_unlock; | |
23 | } | |
24 | #endif | |
25 | ||
d5de8841 JF |
26 | struct pv_lock_ops pv_lock_ops = { |
27 | #ifdef CONFIG_SMP | |
62c7a1e9 | 28 | #ifdef CONFIG_QUEUED_SPINLOCKS |
f233f7f1 PZI |
29 | .queued_spin_lock_slowpath = native_queued_spin_lock_slowpath, |
30 | .queued_spin_unlock = PV_CALLEE_SAVE(__native_queued_spin_unlock), | |
31 | .wait = paravirt_nop, | |
32 | .kick = paravirt_nop, | |
62c7a1e9 | 33 | #else /* !CONFIG_QUEUED_SPINLOCKS */ |
354714dd | 34 | .lock_spinning = __PV_IS_CALLEE_SAVE(paravirt_nop), |
545ac138 | 35 | .unlock_kick = paravirt_nop, |
62c7a1e9 | 36 | #endif /* !CONFIG_QUEUED_SPINLOCKS */ |
f233f7f1 | 37 | #endif /* SMP */ |
d5de8841 | 38 | }; |
25258ef7 | 39 | EXPORT_SYMBOL(pv_lock_ops); |
d5de8841 | 40 | |
96f853ea JF |
41 | struct static_key paravirt_ticketlocks_enabled = STATIC_KEY_INIT_FALSE; |
42 | EXPORT_SYMBOL(paravirt_ticketlocks_enabled); |