Commit | Line | Data |
---|---|---|
aabcaf6a NP |
1 | // SPDX-License-Identifier: GPL-2.0-only |
2 | ||
3 | /* | |
4 | * Privileged (non-hypervisor) host registers to save. | |
5 | */ | |
6 | struct p9_host_os_sprs { | |
aabcaf6a NP |
7 | unsigned long iamr; |
8 | unsigned long amr; | |
aabcaf6a NP |
9 | |
10 | unsigned int pmc1; | |
11 | unsigned int pmc2; | |
12 | unsigned int pmc3; | |
13 | unsigned int pmc4; | |
14 | unsigned int pmc5; | |
15 | unsigned int pmc6; | |
16 | unsigned long mmcr0; | |
17 | unsigned long mmcr1; | |
18 | unsigned long mmcr2; | |
19 | unsigned long mmcr3; | |
20 | unsigned long mmcra; | |
21 | unsigned long siar; | |
22 | unsigned long sier1; | |
23 | unsigned long sier2; | |
24 | unsigned long sier3; | |
25 | unsigned long sdar; | |
26 | }; | |
27 | ||
28 | static inline bool nesting_enabled(struct kvm *kvm) | |
29 | { | |
30 | return kvm->arch.nested_enable && kvm_is_radix(kvm); | |
31 | } | |
32 | ||
33 | bool load_vcpu_state(struct kvm_vcpu *vcpu, | |
34 | struct p9_host_os_sprs *host_os_sprs); | |
35 | void store_vcpu_state(struct kvm_vcpu *vcpu); | |
36 | void save_p9_host_os_sprs(struct p9_host_os_sprs *host_os_sprs); | |
37 | void restore_p9_host_os_sprs(struct kvm_vcpu *vcpu, | |
38 | struct p9_host_os_sprs *host_os_sprs); | |
39 | void switch_pmu_to_guest(struct kvm_vcpu *vcpu, | |
40 | struct p9_host_os_sprs *host_os_sprs); | |
41 | void switch_pmu_to_host(struct kvm_vcpu *vcpu, | |
42 | struct p9_host_os_sprs *host_os_sprs); | |
2861c827 FR |
43 | |
44 | #ifdef CONFIG_KVM_BOOK3S_HV_P9_TIMING | |
45 | void accumulate_time(struct kvm_vcpu *vcpu, struct kvmhv_tb_accumulator *next); | |
46 | #define start_timing(vcpu, next) accumulate_time(vcpu, next) | |
47 | #define end_timing(vcpu) accumulate_time(vcpu, NULL) | |
48 | #else | |
49 | #define accumulate_time(vcpu, next) do {} while (0) | |
50 | #define start_timing(vcpu, next) do {} while (0) | |
51 | #define end_timing(vcpu) do {} while (0) | |
52 | #endif |