0001
0002 #ifndef __ASM_KVM_BOOK3S_UVMEM_H__
0003 #define __ASM_KVM_BOOK3S_UVMEM_H__
0004
0005 #ifdef CONFIG_PPC_UV
0006 int kvmppc_uvmem_init(void);
0007 void kvmppc_uvmem_free(void);
0008 bool kvmppc_uvmem_available(void);
0009 int kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot);
0010 void kvmppc_uvmem_slot_free(struct kvm *kvm,
0011 const struct kvm_memory_slot *slot);
0012 unsigned long kvmppc_h_svm_page_in(struct kvm *kvm,
0013 unsigned long gra,
0014 unsigned long flags,
0015 unsigned long page_shift);
0016 unsigned long kvmppc_h_svm_page_out(struct kvm *kvm,
0017 unsigned long gra,
0018 unsigned long flags,
0019 unsigned long page_shift);
0020 unsigned long kvmppc_h_svm_init_start(struct kvm *kvm);
0021 unsigned long kvmppc_h_svm_init_done(struct kvm *kvm);
0022 int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn);
0023 unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm);
0024 void kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
0025 struct kvm *kvm, bool skip_page_out);
0026 int kvmppc_uvmem_memslot_create(struct kvm *kvm,
0027 const struct kvm_memory_slot *new);
0028 void kvmppc_uvmem_memslot_delete(struct kvm *kvm,
0029 const struct kvm_memory_slot *old);
0030 #else
0031 static inline int kvmppc_uvmem_init(void)
0032 {
0033 return 0;
0034 }
0035
0036 static inline void kvmppc_uvmem_free(void) { }
0037
0038 static inline bool kvmppc_uvmem_available(void)
0039 {
0040 return false;
0041 }
0042
0043 static inline int
0044 kvmppc_uvmem_slot_init(struct kvm *kvm, const struct kvm_memory_slot *slot)
0045 {
0046 return 0;
0047 }
0048
0049 static inline void
0050 kvmppc_uvmem_slot_free(struct kvm *kvm, const struct kvm_memory_slot *slot) { }
0051
0052 static inline unsigned long
0053 kvmppc_h_svm_page_in(struct kvm *kvm, unsigned long gra,
0054 unsigned long flags, unsigned long page_shift)
0055 {
0056 return H_UNSUPPORTED;
0057 }
0058
0059 static inline unsigned long
0060 kvmppc_h_svm_page_out(struct kvm *kvm, unsigned long gra,
0061 unsigned long flags, unsigned long page_shift)
0062 {
0063 return H_UNSUPPORTED;
0064 }
0065
0066 static inline unsigned long kvmppc_h_svm_init_start(struct kvm *kvm)
0067 {
0068 return H_UNSUPPORTED;
0069 }
0070
0071 static inline unsigned long kvmppc_h_svm_init_done(struct kvm *kvm)
0072 {
0073 return H_UNSUPPORTED;
0074 }
0075
0076 static inline unsigned long kvmppc_h_svm_init_abort(struct kvm *kvm)
0077 {
0078 return H_UNSUPPORTED;
0079 }
0080
0081 static inline int kvmppc_send_page_to_uv(struct kvm *kvm, unsigned long gfn)
0082 {
0083 return -EFAULT;
0084 }
0085
0086 static inline void
0087 kvmppc_uvmem_drop_pages(const struct kvm_memory_slot *free,
0088 struct kvm *kvm, bool skip_page_out) { }
0089
0090 static inline int kvmppc_uvmem_memslot_create(struct kvm *kvm,
0091 const struct kvm_memory_slot *new)
0092 {
0093 return H_UNSUPPORTED;
0094 }
0095
0096 static inline void kvmppc_uvmem_memslot_delete(struct kvm *kvm,
0097 const struct kvm_memory_slot *old) { }
0098
0099 #endif
0100 #endif