Skip to content

Commit

Permalink
KVM: x86: Add vendor name to kvm_x86_ops, use it for error messages
Browse files Browse the repository at this point in the history
Paul pointed out the error messages when KVM fails to load are unhelpful
in understanding exactly what went wrong if userspace probes the "wrong"
module.

Add a mandatory kvm_x86_ops field to track vendor module names, kvm_intel
and kvm_amd, and use the name for relevant error message when KVM fails
to load so that the user knows which module failed to load.

Opportunistically tweak the "disabled by bios" error message to clarify
that _support_ was disabled, not that the module itself was magically
disabled by BIOS.

Suggested-by: Paul Menzel <pmenzel@molgen.mpg.de>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20211018183929.897461-2-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
  • Loading branch information
Sean Christopherson authored and Paolo Bonzini committed Oct 22, 2021
1 parent 4dfe4f4 commit 9dadfc4
Show file tree
Hide file tree
Showing 4 changed files with 11 additions and 3 deletions.
2 changes: 2 additions & 0 deletions arch/x86/include/asm/kvm_host.h
Original file line number Diff line number Diff line change
Expand Up @@ -1301,6 +1301,8 @@ static inline u16 kvm_lapic_irq_dest_mode(bool dest_mode_logical)
}

struct kvm_x86_ops {
const char *name;

int (*hardware_enable)(void);
void (*hardware_disable)(void);
void (*hardware_unsetup)(void);
Expand Down
2 changes: 2 additions & 0 deletions arch/x86/kvm/svm/svm.c
Original file line number Diff line number Diff line change
Expand Up @@ -4580,6 +4580,8 @@ static int svm_vm_init(struct kvm *kvm)
}

static struct kvm_x86_ops svm_x86_ops __initdata = {
.name = "kvm_amd",

.hardware_unsetup = svm_hardware_teardown,
.hardware_enable = svm_hardware_enable,
.hardware_disable = svm_hardware_disable,
Expand Down
2 changes: 2 additions & 0 deletions arch/x86/kvm/vmx/vmx.c
Original file line number Diff line number Diff line change
Expand Up @@ -7570,6 +7570,8 @@ static bool vmx_check_apicv_inhibit_reasons(ulong bit)
}

static struct kvm_x86_ops vmx_x86_ops __initdata = {
.name = "kvm_intel",

.hardware_unsetup = hardware_unsetup,

.hardware_enable = hardware_enable,
Expand Down
8 changes: 5 additions & 3 deletions arch/x86/kvm/x86.c
Original file line number Diff line number Diff line change
Expand Up @@ -8532,18 +8532,20 @@ int kvm_arch_init(void *opaque)
int r;

if (kvm_x86_ops.hardware_enable) {
printk(KERN_ERR "kvm: already loaded the other module\n");
pr_err("kvm: already loaded vendor module '%s'\n", kvm_x86_ops.name);
r = -EEXIST;
goto out;
}

if (!ops->cpu_has_kvm_support()) {
pr_err_ratelimited("kvm: no hardware support\n");
pr_err_ratelimited("kvm: no hardware support for '%s'\n",
ops->runtime_ops->name);
r = -EOPNOTSUPP;
goto out;
}
if (ops->disabled_by_bios()) {
pr_err_ratelimited("kvm: disabled by bios\n");
pr_err_ratelimited("kvm: support for '%s' disabled by bios\n",
ops->runtime_ops->name);
r = -EOPNOTSUPP;
goto out;
}
Expand Down

0 comments on commit 9dadfc4

Please sign in to comment.