Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 
0003 /*
0004  * Privileged (non-hypervisor) host registers to save.
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