Message ID | 20170217170849.30b95ddc@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 17/02/2017 23:08, Luiz Capitulino wrote: > > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> > --- > Documentation/virtual/kvm/api.txt | 60 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 60 insertions(+) Thanks Luiz---just a couple nits. > diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt > index 03145b7..1620a2d 100644 > --- a/Documentation/virtual/kvm/api.txt > +++ b/Documentation/virtual/kvm/api.txt > @@ -3201,6 +3201,66 @@ struct kvm_reinject_control { > pit_reinject = 0 (!reinject mode) is recommended, unless running an old > operating system that uses the PIT for timing (e.g. Linux 2.4.x). > > +4.99 KVM_X86_GET_MCE_CAP_SUPPORTED > + > +Capability: KVM_CAP_MCE > +Architectures: x86 > +Type: system ioctl > +Parameters: u64 mce_cap (in/out) > +Returns: 0 on success, -1 on error > + > +Returns supported MCE capabilities. The u64 mce_cap parameter > +has the same format as the MSR_IA32_MCG_CAP register. Supported > +capabilities will have the corresponding bits set. > + > +4.100 KVM_X86_SETUP_MCE > + > +Capability: KVM_CAP_MCE > +Architectures: x86 > +Type: vcpu ioctl > +Parameters: u64 mcg_cap (in) > +Returns: 0 on success, > + -EFAULT if u64 mcg_cap cannot be read, > + -EINVAL if the requested number of banks is invalid, > + -EINVAL if requested MCE capability is not supported. > + > +Initializes MCE support for use. The u64 mcg_cap parameter > +has the same format as the MSR_IA32_MCG_CAP register and > +specifies which capabilities should be enabled. The maximum > +supported number of error-reporting banks can be retreive when retrieved > +checking for KVM_CAP_MCE. The supported capabilities can be > +retrieved with KVM_X86_GET_MCE_CAP_SUPPORTED. > + > +4.101 KVM_X86_SET_MCE > + > +Capability: KVM_CAP_MCE > +Architectures: x86 > +Type: vcpu ioctl > +Parameters: struct kvm_x86_mce (in) > +Returns: 0 on success, > + -EFAULT if struct kvm_x86_mce cannot be read, > + -EINVAL if the bank number is invalid, > + -EINVAL if VAL bit is not set in status field. > + > +Inject an MCE into the guest. The input parameter is: Inject a machine check error (MCE) into the guest. The input parameter is: > +struct kvm_x86_mce { > + __u64 status; > + __u64 addr; > + __u64 misc; > + __u64 mcg_status; > + __u8 bank; > + __u8 pad1[7]; > + __u64 pad2[3]; > +}; > + > +If the MCE being reported is an uncorrected error, KVM will > +inject it as a MCE exception into the guest (if an MCE > +is still in progress, a triple fault is be injected). If the guest MCG_STATUS register reports that an MCE is in progress, KVM causes an KVM_EXIT_SHUTDOWN vmexit. If the MCE being reported is an uncorrected error, KVM will inject it as a MCE exception into the guest. That's it, Paolo > +Otherwise, if the MCE is a corrected error, KVM will just > +store it in the corresponding bank (provided this bank is > +not holding a previously reported uncorrected error). > + > 5. The kvm_run structure > ------------------------ > >
On Thu, 9 Mar 2017 13:49:06 +0100 Paolo Bonzini <pbonzini@redhat.com> wrote: > > +struct kvm_x86_mce { > > + __u64 status; > > + __u64 addr; > > + __u64 misc; > > + __u64 mcg_status; > > + __u8 bank; > > + __u8 pad1[7]; > > + __u64 pad2[3]; > > +}; > > + > > +If the MCE being reported is an uncorrected error, KVM will > > +inject it as a MCE exception into the guest (if an MCE > > +is still in progress, a triple fault is be injected). > > If the guest MCG_STATUS register reports that an MCE is in progress, KVM > causes an KVM_EXIT_SHUTDOWN vmexit. Oh, that's correct. But it only happens for uncorrected errors. So, My new paragraph would be: If the MCE being reported is an uncorrected error, KVM will inject it as an MCE exception into the guest. If the guest MCG_STATUS register reports taht an MCE is in progress, KVM causes an KVM_EXIT_SHUTDOWN vmexit. Otherwise, if the MCE is an corrected error, KVM will just store it in the corresponding bank (provided this bank is not holding a previously reported uncorrected error).
On 09/03/2017 20:03, Luiz Capitulino wrote: > On Thu, 9 Mar 2017 13:49:06 +0100 > Paolo Bonzini <pbonzini@redhat.com> wrote: > >>> +struct kvm_x86_mce { >>> + __u64 status; >>> + __u64 addr; >>> + __u64 misc; >>> + __u64 mcg_status; >>> + __u8 bank; >>> + __u8 pad1[7]; >>> + __u64 pad2[3]; >>> +}; >>> + >>> +If the MCE being reported is an uncorrected error, KVM will >>> +inject it as a MCE exception into the guest (if an MCE >>> +is still in progress, a triple fault is be injected). >> >> If the guest MCG_STATUS register reports that an MCE is in progress, KVM >> causes an KVM_EXIT_SHUTDOWN vmexit. > > Oh, that's correct. But it only happens for uncorrected errors. > So, My new paragraph would be: > > If the MCE being reported is an uncorrected error, KVM will > inject it as an MCE exception into the guest. If the guest MCG_STATUS > register reports taht an MCE is in progress, KVM causes an > KVM_EXIT_SHUTDOWN vmexit. > > Otherwise, if the MCE is an corrected error, KVM will just > store it in the corresponding bank (provided this bank is > not holding a previously reported uncorrected error). This is better, thanks! Paolo
diff --git a/Documentation/virtual/kvm/api.txt b/Documentation/virtual/kvm/api.txt index 03145b7..1620a2d 100644 --- a/Documentation/virtual/kvm/api.txt +++ b/Documentation/virtual/kvm/api.txt @@ -3201,6 +3201,66 @@ struct kvm_reinject_control { pit_reinject = 0 (!reinject mode) is recommended, unless running an old operating system that uses the PIT for timing (e.g. Linux 2.4.x). +4.99 KVM_X86_GET_MCE_CAP_SUPPORTED + +Capability: KVM_CAP_MCE +Architectures: x86 +Type: system ioctl +Parameters: u64 mce_cap (in/out) +Returns: 0 on success, -1 on error + +Returns supported MCE capabilities. The u64 mce_cap parameter +has the same format as the MSR_IA32_MCG_CAP register. Supported +capabilities will have the corresponding bits set. + +4.100 KVM_X86_SETUP_MCE + +Capability: KVM_CAP_MCE +Architectures: x86 +Type: vcpu ioctl +Parameters: u64 mcg_cap (in) +Returns: 0 on success, + -EFAULT if u64 mcg_cap cannot be read, + -EINVAL if the requested number of banks is invalid, + -EINVAL if requested MCE capability is not supported. + +Initializes MCE support for use. The u64 mcg_cap parameter +has the same format as the MSR_IA32_MCG_CAP register and +specifies which capabilities should be enabled. The maximum +supported number of error-reporting banks can be retreive when +checking for KVM_CAP_MCE. The supported capabilities can be +retrieved with KVM_X86_GET_MCE_CAP_SUPPORTED. + +4.101 KVM_X86_SET_MCE + +Capability: KVM_CAP_MCE +Architectures: x86 +Type: vcpu ioctl +Parameters: struct kvm_x86_mce (in) +Returns: 0 on success, + -EFAULT if struct kvm_x86_mce cannot be read, + -EINVAL if the bank number is invalid, + -EINVAL if VAL bit is not set in status field. + +Inject an MCE into the guest. The input parameter is: + +struct kvm_x86_mce { + __u64 status; + __u64 addr; + __u64 misc; + __u64 mcg_status; + __u8 bank; + __u8 pad1[7]; + __u64 pad2[3]; +}; + +If the MCE being reported is an uncorrected error, KVM will +inject it as a MCE exception into the guest (if an MCE +is still in progress, a triple fault is be injected). +Otherwise, if the MCE is a corrected error, KVM will just +store it in the corresponding bank (provided this bank is +not holding a previously reported uncorrected error). + 5. The kvm_run structure ------------------------
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com> --- Documentation/virtual/kvm/api.txt | 60 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+)