book3s_hv.h 1.5 KB

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