1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2020-2022 Loongson Technology Corporation Limited 4 */ 5 6#include <linux/kernel.h> 7#include <linux/kvm_host.h> 8#include <linux/kvm_para.h> 9#include <asm/fpu.h> 10#include <asm/lbt.h> 11 12/* FPU/LSX context management */ 13void __kvm_save_fpu(struct loongarch_fpu *fpu); 14void __kvm_restore_fpu(struct loongarch_fpu *fpu); 15 16void kvm_save_fpu(struct kvm_vcpu *cpu) 17{ 18 return __kvm_save_fpu(&cpu->arch.fpu); 19} 20EXPORT_SYMBOL_GPL(kvm_save_fpu); 21 22void kvm_restore_fpu(struct kvm_vcpu *cpu) 23{ 24 return __kvm_restore_fpu(&cpu->arch.fpu); 25} 26EXPORT_SYMBOL_GPL(kvm_restore_fpu); 27 28#ifdef CONFIG_CPU_HAS_LSX 29void __kvm_save_lsx(struct loongarch_fpu *fpu); 30void __kvm_restore_lsx(struct loongarch_fpu *fpu); 31void __kvm_restore_lsx_upper(struct loongarch_fpu *fpu); 32 33void kvm_save_lsx(struct kvm_vcpu *cpu) 34{ 35 return __kvm_save_lsx(&cpu->arch.fpu); 36} 37EXPORT_SYMBOL_GPL(kvm_save_lsx); 38 39void kvm_restore_lsx(struct kvm_vcpu *cpu) 40{ 41 return __kvm_restore_lsx(&cpu->arch.fpu); 42} 43EXPORT_SYMBOL_GPL(kvm_restore_lsx); 44 45void kvm_restore_lsx_upper(struct kvm_vcpu *cpu) 46{ 47 return __kvm_restore_lsx_upper(&cpu->arch.fpu); 48} 49EXPORT_SYMBOL_GPL(kvm_restore_lsx_upper); 50 51#endif 52 53#ifdef CONFIG_CPU_HAS_LSX 54void __kvm_save_lasx(struct loongarch_fpu *fpu); 55void __kvm_restore_lasx(struct loongarch_fpu *fpu); 56void __kvm_restore_lasx_upper(struct loongarch_fpu *fpu); 57 58void kvm_save_lasx(struct kvm_vcpu *cpu) 59{ 60 return __kvm_save_lasx(&cpu->arch.fpu); 61} 62EXPORT_SYMBOL_GPL(kvm_save_lasx); 63 64void kvm_restore_lasx(struct kvm_vcpu *cpu) 65{ 66 return __kvm_restore_lasx(&cpu->arch.fpu); 67} 68EXPORT_SYMBOL_GPL(kvm_restore_lasx); 69 70void kvm_restore_lasx_upper(struct kvm_vcpu *cpu) 71{ 72 return _restore_lasx_upper(&cpu->arch.fpu); 73} 74EXPORT_SYMBOL_GPL(kvm_restore_lasx_upper); 75#endif 76 77#ifdef CONFIG_CPU_HAS_LBT 78void kvm_restore_lbt(struct kvm_vcpu *cpu) 79{ 80 restore_lbt_registers(&cpu->arch.lbt); 81} 82EXPORT_SYMBOL_GPL(kvm_restore_lbt); 83 84void kvm_save_lbt(struct kvm_vcpu *cpu) 85{ 86 save_lbt_registers(&cpu->arch.lbt); 87} 88EXPORT_SYMBOL_GPL(kvm_save_lbt); 89#endif 90 91 92EXPORT_SYMBOL_GPL(kvm_enter_guest); 93EXPORT_SYMBOL_GPL(kvm_exception_entry); 94 95