Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 
0003 #ifndef __KVM_MM_H__
0004 #define __KVM_MM_H__ 1
0005 
0006 /*
0007  * Architectures can choose whether to use an rwlock or spinlock
0008  * for the mmu_lock.  These macros, for use in common code
0009  * only, avoids using #ifdefs in places that must deal with
0010  * multiple architectures.
0011  */
0012 
0013 #ifdef KVM_HAVE_MMU_RWLOCK
0014 #define KVM_MMU_LOCK_INIT(kvm)      rwlock_init(&(kvm)->mmu_lock)
0015 #define KVM_MMU_LOCK(kvm)       write_lock(&(kvm)->mmu_lock)
0016 #define KVM_MMU_UNLOCK(kvm)     write_unlock(&(kvm)->mmu_lock)
0017 #define KVM_MMU_READ_LOCK(kvm)      read_lock(&(kvm)->mmu_lock)
0018 #define KVM_MMU_READ_UNLOCK(kvm)    read_unlock(&(kvm)->mmu_lock)
0019 #else
0020 #define KVM_MMU_LOCK_INIT(kvm)      spin_lock_init(&(kvm)->mmu_lock)
0021 #define KVM_MMU_LOCK(kvm)       spin_lock(&(kvm)->mmu_lock)
0022 #define KVM_MMU_UNLOCK(kvm)     spin_unlock(&(kvm)->mmu_lock)
0023 #define KVM_MMU_READ_LOCK(kvm)      spin_lock(&(kvm)->mmu_lock)
0024 #define KVM_MMU_READ_UNLOCK(kvm)    spin_unlock(&(kvm)->mmu_lock)
0025 #endif /* KVM_HAVE_MMU_RWLOCK */
0026 
0027 kvm_pfn_t hva_to_pfn(unsigned long addr, bool atomic, bool *async,
0028              bool write_fault, bool *writable);
0029 
0030 #ifdef CONFIG_HAVE_KVM_PFNCACHE
0031 void gfn_to_pfn_cache_invalidate_start(struct kvm *kvm,
0032                        unsigned long start,
0033                        unsigned long end,
0034                        bool may_block);
0035 #else
0036 static inline void gfn_to_pfn_cache_invalidate_start(struct kvm *kvm,
0037                              unsigned long start,
0038                              unsigned long end,
0039                              bool may_block)
0040 {
0041 }
0042 #endif /* HAVE_KVM_PFNCACHE */
0043 
0044 #endif /* __KVM_MM_H__ */