0001
0002
0003
0004
0005
0006 struct p9_host_os_sprs {
0007 unsigned long iamr;
0008 unsigned long amr;
0009
0010 unsigned int pmc1;
0011 unsigned int pmc2;
0012 unsigned int pmc3;
0013 unsigned int pmc4;
0014 unsigned int pmc5;
0015 unsigned int pmc6;
0016 unsigned long mmcr0;
0017 unsigned long mmcr1;
0018 unsigned long mmcr2;
0019 unsigned long mmcr3;
0020 unsigned long mmcra;
0021 unsigned long siar;
0022 unsigned long sier1;
0023 unsigned long sier2;
0024 unsigned long sier3;
0025 unsigned long sdar;
0026 };
0027
0028 static inline bool nesting_enabled(struct kvm *kvm)
0029 {
0030 return kvm->arch.nested_enable && kvm_is_radix(kvm);
0031 }
0032
0033 bool load_vcpu_state(struct kvm_vcpu *vcpu,
0034 struct p9_host_os_sprs *host_os_sprs);
0035 void store_vcpu_state(struct kvm_vcpu *vcpu);
0036 void save_p9_host_os_sprs(struct p9_host_os_sprs *host_os_sprs);
0037 void restore_p9_host_os_sprs(struct kvm_vcpu *vcpu,
0038 struct p9_host_os_sprs *host_os_sprs);
0039 void switch_pmu_to_guest(struct kvm_vcpu *vcpu,
0040 struct p9_host_os_sprs *host_os_sprs);
0041 void switch_pmu_to_host(struct kvm_vcpu *vcpu,
0042 struct p9_host_os_sprs *host_os_sprs);
0043
0044 #ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING
0045 void accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next);
0046 #define start_timing(vcpu, next) accumulate_time(vcpu, next)
0047 #define end_timing(vcpu) accumulate_time(vcpu, NULL)
0048 #else
0049 #define accumulate_time(vcpu, next) do {} while (0)
0050 #define start_timing(vcpu, next) do {} while (0)
0051 #define end_timing(vcpu) do {} while (0)
0052 #endif