Message ID | 148396203530.1471.16105350692124392705.stgit@aravinda (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jan 09, 2017 at 05:10:35PM +0530, Aravinda Prasad wrote: > This patch introduces a new KVM capability to control > how KVM behaves on machine check exception (MCE). > Without this capability, KVM redirects machine check > exceptions to guest's 0x200 vector, if the address in > error belongs to the guest. With this capability KVM > causes a guest exit with NMI exit reason. > > The new capability is required to avoid problems if > a new kernel/KVM is used with an old QEMU for guests > that don't issue "ibm,nmi-register". As old QEMU does > not understand the NMI exit type, it treats it as a > fatal error. However, the guest could have handled > the machine check error if the exception was delivered > to guest's 0x200 interrupt vector instead of NMI exit > in case of old QEMU. > Can you move these to a cover letter, the description here does not match the changes > QEMU part can be found at: > http://lists.nongnu.org/archive/html/qemu-ppc/2015-12/msg00199.html > Balbir Singh. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Mon, Jan 09, 2017 at 05:10:35PM +0530, Aravinda Prasad wrote: > This patch introduces a new KVM capability to control > how KVM behaves on machine check exception (MCE). > Without this capability, KVM redirects machine check > exceptions to guest's 0x200 vector, if the address in > error belongs to the guest. With this capability KVM > causes a guest exit with NMI exit reason. > > The new capability is required to avoid problems if > a new kernel/KVM is used with an old QEMU for guests > that don't issue "ibm,nmi-register". As old QEMU does > not understand the NMI exit type, it treats it as a > fatal error. However, the guest could have handled > the machine check error if the exception was delivered > to guest's 0x200 interrupt vector instead of NMI exit > in case of old QEMU. You need to add a description of the new capability to Documentation/virtual/kvm/api.txt. Paul. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Thursday 12 January 2017 03:26 PM, Paul Mackerras wrote: > On Mon, Jan 09, 2017 at 05:10:35PM +0530, Aravinda Prasad wrote: >> This patch introduces a new KVM capability to control >> how KVM behaves on machine check exception (MCE). >> Without this capability, KVM redirects machine check >> exceptions to guest's 0x200 vector, if the address in >> error belongs to the guest. With this capability KVM >> causes a guest exit with NMI exit reason. >> >> The new capability is required to avoid problems if >> a new kernel/KVM is used with an old QEMU for guests >> that don't issue "ibm,nmi-register". As old QEMU does >> not understand the NMI exit type, it treats it as a >> fatal error. However, the guest could have handled >> the machine check error if the exception was delivered >> to guest's 0x200 interrupt vector instead of NMI exit >> in case of old QEMU. > > You need to add a description of the new capability to > Documentation/virtual/kvm/api.txt. sure. > > Paul. >
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 28350a2..018c684 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h @@ -264,6 +264,7 @@ struct kvm_arch { int hpt_cma_alloc; struct dentry *debugfs_dir; struct dentry *htab_dentry; + u8 fwnmi_enabled; #endif /* CONFIG_KVM_BOOK3S_HV_POSSIBLE */ #ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE struct mutex hpt_mutex; diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index caec7bf..3acd503 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c @@ -494,6 +494,7 @@ int main(void) DEFINE(KVM_NEED_FLUSH, offsetof(struct kvm, arch.need_tlb_flush.bits)); DEFINE(KVM_ENABLED_HCALLS, offsetof(struct kvm, arch.enabled_hcalls)); DEFINE(KVM_VRMA_SLB_V, offsetof(struct kvm, arch.vrma_slb_v)); + DEFINE(KVM_FWNMI, offsetof(struct kvm, arch.fwnmi_enabled)); DEFINE(VCPU_DSISR, offsetof(struct kvm_vcpu, arch.shregs.dsisr)); DEFINE(VCPU_DAR, offsetof(struct kvm_vcpu, arch.shregs.dar)); DEFINE(VCPU_VPA, offsetof(struct kvm_vcpu, arch.vpa.pinned_addr)); diff --git a/arch/powerpc/kvm/powerpc.c b/arch/powerpc/kvm/powerpc.c index 70963c8..a4405a8 100644 --- a/arch/powerpc/kvm/powerpc.c +++ b/arch/powerpc/kvm/powerpc.c @@ -604,6 +604,9 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext) r = cpu_has_feature(CPU_FTR_TM_COMP) && is_kvmppc_hv_enabled(kvm); break; + case KVM_CAP_PPC_FWNMI: + r = 1; + break; default: r = 0; break; @@ -1204,6 +1207,10 @@ static int kvm_vcpu_ioctl_enable_cap(struct kvm_vcpu *vcpu, break; } #endif /* CONFIG_KVM_XICS */ + case KVM_CAP_PPC_FWNMI: + r = 0; + vcpu->kvm->arch.fwnmi_enabled = true; + break; default: r = -EINVAL; break; diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h index 4ee67cb..3e41c42 100644 --- a/include/uapi/linux/kvm.h +++ b/include/uapi/linux/kvm.h @@ -870,6 +870,7 @@ struct kvm_ppc_smmu_info { #define KVM_CAP_S390_USER_INSTR0 130 #define KVM_CAP_MSI_DEVID 131 #define KVM_CAP_PPC_HTM 132 +#define KVM_CAP_PPC_FWNMI 133 #ifdef KVM_CAP_IRQ_ROUTING