linux-headers/arch/e2k/include/asm/kvm/guest/spinlock.h

76 lines
1.9 KiB
C

#ifndef __ASM_KVM_GUEST_SPINLOCK_H
#define __ASM_KVM_GUEST_SPINLOCK_H
/*
* This file implements the arch-dependent parts of kvm guest
* spin_lock()/spin_unlock() fast and slow part
*
* Copyright 2014 Salavat S. Guiliazov (atic@mcst.ru)
*/
#include <linux/types.h>
extern void kvm_arch_spin_lock_slow(void *lock);
extern void kvm_wait_read_lock_slow(arch_rwlock_t *rw);
extern void kvm_wait_write_lock_slow(arch_rwlock_t *rw);
extern void kvm_arch_spin_locked_slow(void *lock);
extern void kvm_arch_read_locked_slow(arch_rwlock_t *rw);
extern void kvm_arch_write_locked_slow(arch_rwlock_t *rw);
extern void kvm_arch_spin_unlock_slow(void *lock);
extern void kvm_arch_read_unlock_slow(arch_rwlock_t *lock);
extern void kvm_arch_write_unlock_slow(arch_rwlock_t *lock);
#ifdef CONFIG_KVM_GUEST_KERNEL
/* native guest kernel */
#define arch_spin_relax(lock) kvm_cpu_relax()
#define arch_read_relax(lock) kvm_cpu_relax()
#define arch_write_relax(lock) kvm_cpu_relax()
static inline void
ord_wait_read_lock_slow(arch_rwlock_t *rw)
{
kvm_wait_read_lock_slow(rw);
}
static inline void
ord_wait_write_lock_slow(arch_rwlock_t *rw)
{
kvm_wait_write_lock_slow(rw);
}
static inline void
ord_arch_read_locked_slow(arch_rwlock_t *rw)
{
kvm_arch_read_locked_slow(rw);
}
static inline void
ord_arch_write_locked_slow(arch_rwlock_t *rw)
{
kvm_arch_write_locked_slow(rw);
}
static inline void
ord_arch_read_unlock_slow(arch_rwlock_t *rw)
{
kvm_arch_read_unlock_slow(rw);
}
static inline void
ord_arch_write_unlock_slow(arch_rwlock_t *rw)
{
kvm_arch_write_unlock_slow(rw);
}
static inline void arch_spin_lock_slow(arch_spinlock_t *lock)
{
kvm_arch_spin_lock_slow(lock);
}
static inline void arch_spin_locked_slow(arch_spinlock_t *lock)
{
kvm_arch_spin_locked_slow(lock);
}
static inline void arch_spin_unlock_slow(arch_spinlock_t *lock)
{
kvm_arch_spin_unlock_slow(lock);
}
#endif /* CONFIG_KVM_GUEST_KERNEL */
#endif /* __ASM_KVM_GUEST_SPINLOCK_H */