Skip to contentSkip to conversation

KVM: Documentation: document MCE ioctls

PATCH Superseded Luiz Capitulino 2 participants 4 messages Feb 17, 2017 – Mar 10, 2017

Subsystems (2)

v1 of 3 Superseded Latest is v3 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 KVM: Documentation: document MCE ioctls

---
 Documentation/virtual/kvm/api.txt | 60 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)
Documentation/virtual/kvm/api.txt +60 -0
index 03145b7..1620a2d 100644
@@ -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
 ------------------------
 
Signature · 1 line
2.5.5
maintainer
#1 lore raw
Quoted 5 lines · Luiz Capitulino
---
 Documentation/virtual/kvm/api.txt | 60 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 60 insertions(+)

Thanks Luiz---just a couple nits.

Quoted 25 lines
Documentation/virtual/kvm/api.txt +17 -0
index 03145b7..1620a2d 100644
@@ -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

Documentation/virtual/kvm/api.txt struct kvm_reinject_control { · line 3230

Quoted 10 lines
Documentation/virtual/kvm/api.txt +10 -0
+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

Quoted 5 lines
Documentation/virtual/kvm/api.txt +5 -0
+checking for KVM_CAP_MCE. The supported capabilities can be
+retrieved with KVM_X86_GET_MCE_CAP_SUPPORTED.
+
+4.101 KVM_X86_SET_MCE
+

Documentation/virtual/kvm/api.txt struct kvm_reinject_control { · line 3245

Quoted 10 lines
Documentation/virtual/kvm/api.txt +10 -0
+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:

Documentation/virtual/kvm/api.txt struct kvm_reinject_control { · line 3259

Quoted 13 lines
Documentation/virtual/kvm/api.txt +13 -0
+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

Quoted 8 lines
Documentation/virtual/kvm/api.txt +4 -0
+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
 ------------------------
 
#2 lore raw
Quoted 8 lines · On Thu, 9 Mar 2017 13:49:06 +0100 Paolo Bonzini <[email protected]> wrote:
Quoted 8 lines
Documentation/virtual/kvm/api.txt +8 -0
+struct kvm_x86_mce {
+	__u64 status;
+	__u64 addr;
+	__u64 misc;
+	__u64 mcg_status;
+	__u8 bank;
+	__u8 pad1[7];
+	__u64 pad2[3];
Quoted 8 lines

Documentation/virtual/kvm/api.txt struct kvm_reinject_control { · line 3259

Quoted 5 lines
Documentation/virtual/kvm/api.txt +5 -0
+};
+
+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).

maintainer
#3 lore raw
Quoted 23 lines · Luiz Capitulino
Quoted 8 lines · On Thu, 9 Mar 2017 13:49:06 +0100 Paolo Bonzini <[email protected]> wrote:
Quoted 8 lines
Documentation/virtual/kvm/api.txt +8 -0
+struct kvm_x86_mce {
+	__u64 status;
+	__u64 addr;
+	__u64 misc;
+	__u64 mcg_status;
+	__u8 bank;
+	__u8 pad1[7];
+	__u64 pad2[3];
Quoted 8 lines

Documentation/virtual/kvm/api.txt struct kvm_reinject_control { · line 3259

Quoted 5 lines
Documentation/virtual/kvm/api.txt +5 -0
+};
+
+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:

Quoted 8 lines

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