]>
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> | |
186f4360 | 6 | #include <linux/export.h> |
96f853ea | 7 | #include <linux/jump_label.h> |
d5de8841 JF |
8 | |
9 | #include <asm/paravirt.h> | |
10 | ||
f233f7f1 PZI |
11 | __visible void __native_queued_spin_unlock(struct qspinlock *lock) |
12 | { | |
13 | native_queued_spin_unlock(lock); | |
14 | } | |
15 | ||
16 | PV_CALLEE_SAVE_REGS_THUNK(__native_queued_spin_unlock); | |
17 | ||
18 | bool pv_is_native_spin_unlock(void) | |
19 | { | |
20 | return pv_lock_ops.queued_spin_unlock.func == | |
21 | __raw_callee_save___native_queued_spin_unlock; | |
22 | } | |
f233f7f1 | 23 | |
d5de8841 JF |
24 | struct pv_lock_ops pv_lock_ops = { |
25 | #ifdef CONFIG_SMP | |
f233f7f1 PZI |
26 | .queued_spin_lock_slowpath = native_queued_spin_lock_slowpath, |
27 | .queued_spin_unlock = PV_CALLEE_SAVE(__native_queued_spin_unlock), | |
28 | .wait = paravirt_nop, | |
29 | .kick = paravirt_nop, | |
f233f7f1 | 30 | #endif /* SMP */ |
d5de8841 | 31 | }; |
25258ef7 | 32 | EXPORT_SYMBOL(pv_lock_ops); |
d5de8841 | 33 | |
96f853ea JF |
34 | struct static_key paravirt_ticketlocks_enabled = STATIC_KEY_INIT_FALSE; |
35 | EXPORT_SYMBOL(paravirt_ticketlocks_enabled); |