Created
August 25, 2018 02:35
-
-
Save classilla/d27e6088f5c3fcd9195f756b4ea734d9 to your computer and use it in GitHub Desktop.
Base patches for KVMPPC under kernel 4.17.x and earlier to enable OS X on POWER9.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c | |
index 97d4a112..2267e9b4 100644 | |
--- a/arch/powerpc/kvm/book3s.c | |
+++ b/arch/powerpc/kvm/book3s.c | |
@@ -74,18 +74,21 @@ struct kvm_stats_debugfs_item debugfs_entries[] = { | |
{ "pthru_bad_aff", VCPU_STAT(pthru_bad_aff) }, | |
{ NULL } | |
}; | |
void kvmppc_unfixup_split_real(struct kvm_vcpu *vcpu) | |
{ | |
if (vcpu->arch.hflags & BOOK3S_HFLAG_SPLIT_HACK) { | |
ulong pc = kvmppc_get_pc(vcpu); | |
+ ulong lr = kvmppc_get_lr(vcpu); | |
if ((pc & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) | |
kvmppc_set_pc(vcpu, pc & ~SPLIT_HACK_MASK); | |
+ if ((lr & SPLIT_HACK_MASK) == SPLIT_HACK_OFFS) | |
+ kvmppc_set_lr(vcpu, lr & ~SPLIT_HACK_MASK); | |
vcpu->arch.hflags &= ~BOOK3S_HFLAG_SPLIT_HACK; | |
} | |
} | |
EXPORT_SYMBOL_GPL(kvmppc_unfixup_split_real); | |
static inline unsigned long kvmppc_interrupt_offset(struct kvm_vcpu *vcpu) | |
{ | |
if (!is_kvmppc_hv_enabled(vcpu->kvm)) | |
diff --git a/arch/powerpc/kvm/book3s_pr.c b/arch/powerpc/kvm/book3s_pr.c | |
index d3f304d0..ca160395 100644 | |
--- a/arch/powerpc/kvm/book3s_pr.c | |
+++ b/arch/powerpc/kvm/book3s_pr.c | |
@@ -1087,20 +1087,23 @@ int kvmppc_handle_exit_pr(struct kvm_run *run, struct kvm_vcpu *vcpu, | |
case BOOK3S_INTERRUPT_DOORBELL: | |
case BOOK3S_INTERRUPT_H_DOORBELL: | |
vcpu->stat.dec_exits++; | |
r = RESUME_GUEST; | |
break; | |
case BOOK3S_INTERRUPT_EXTERNAL: | |
case BOOK3S_INTERRUPT_EXTERNAL_LEVEL: | |
case BOOK3S_INTERRUPT_EXTERNAL_HV: | |
+ case BOOK3S_INTERRUPT_H_VIRT: | |
vcpu->stat.ext_intr_exits++; | |
r = RESUME_GUEST; | |
break; | |
+ case BOOK3S_INTERRUPT_HMI: | |
case BOOK3S_INTERRUPT_PERFMON: | |
+ case BOOK3S_INTERRUPT_SYSTEM_RESET: | |
r = RESUME_GUEST; | |
break; | |
case BOOK3S_INTERRUPT_PROGRAM: | |
case BOOK3S_INTERRUPT_H_EMUL_ASSIST: | |
r = kvmppc_exit_pr_progint(run, vcpu, exit_nr); | |
break; | |
case BOOK3S_INTERRUPT_SYSCALL: | |
{ | |
@@ -1729,21 +1732,23 @@ static void kvmppc_core_destroy_vm_pr(struct kvm *kvm) | |
if (--kvm_global_user_count == 0) | |
pseries_enable_reloc_on_exc(); | |
spin_unlock(&kvm_global_user_count_lock); | |
} | |
} | |
static int kvmppc_core_check_processor_compat_pr(void) | |
{ | |
+#if(0) | |
/* | |
* Disable KVM for Power9 untill the required bits merged. | |
*/ | |
if (cpu_has_feature(CPU_FTR_ARCH_300)) | |
return -EIO; | |
+#endif | |
return 0; | |
} | |
static long kvm_arch_vm_ioctl_pr(struct file *filp, | |
unsigned int ioctl, unsigned long arg) | |
{ | |
return -ENOTTY; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment