Re: [PATCH v3 2/9] KVM: x86: Move init-only kvm_x86_ops to separate struct
From: Vitaly Kuznetsov <vkuznets@redhat.com>
Date: 2020-03-23 16:25:04
Also in:
kvm, kvmarm, linux-mips, lkml
Sean Christopherson [off-list ref] writes:
On Mon, Mar 23, 2020 at 01:10:40PM +0100, Vitaly Kuznetsov wrote:quoted
Sean Christopherson [off-list ref] writes:quoted
+ + .runtime_ops = &svm_x86_ops, +};Unrelated to your patch but I think we can make the naming of some of these functions more consistend on SVM/VMX, in particular I'd suggest has_svm() -> cpu_has_svm_support() is_disabled -> svm_disabled_by_bios() ... (see below for VMX)quoted
+ static int __init svm_init(void) { - return kvm_init(&svm_x86_ops, sizeof(struct vcpu_svm), + return kvm_init(&svm_init_ops, sizeof(struct vcpu_svm), __alignof__(struct vcpu_svm), THIS_MODULE); }diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 07299a957d4a..ffcdcc86f5b7 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c@@ -7842,11 +7842,8 @@ static bool vmx_check_apicv_inhibit_reasons(ulong bit) } static struct kvm_x86_ops vmx_x86_ops __ro_after_init = { - .cpu_has_kvm_support = cpu_has_kvm_support, - .disabled_by_bios = vmx_disabled_by_bios, - .hardware_setup = hardware_setup, .hardware_unsetup = hardware_unsetup, - .check_processor_compatibility = vmx_check_processor_compat, + .hardware_enable = hardware_enable, .hardware_disable = hardware_disable, .cpu_has_accelerated_tpr = report_flexpriority,@@ -7981,6 +7978,15 @@ static struct kvm_x86_ops vmx_x86_ops __ro_after_init = { .apic_init_signal_blocked = vmx_apic_init_signal_blocked, }; +static struct kvm_x86_init_ops vmx_init_ops __initdata = { + .cpu_has_kvm_support = cpu_has_kvm_support, + .disabled_by_bios = vmx_disabled_by_bios, + .check_processor_compatibility = vmx_check_processor_compat, + .hardware_setup = hardware_setup,cpu_has_kvm_support() -> cpu_has_vmx_support() hardware_setup() -> vmx_hardware_setup()Preaching to the choir on this one. The VMX functions without prefixes in in particular annoy me to no end, e.g. hardware_setup(). Though the worst is probably ".vcpu_create = vmx_create_vcpu", if I had a nickel for every time I've tried to find vmx_vcpu_create()... What if we added a macro to auto-generate the common/required hooks? E.g.: static struct kvm_x86_ops vmx_x86_ops __ro_after_init = { MANDATORY_KVM_X86_OPS(vmx), .pmu_ops = &intel_pmu_ops, ... }; That'd enforce consistent naming, and would provide a bit of documentation as to which hooks are optional, e.g. many of the nested hooks, and which must be defined for KVM to function.
Sounds cool! (not sure that with only two implementations people won't call it 'over-engineered' but cool). My personal wish would just be that function names in function implementations are not auto-generated so e.g. a simple 'git grep vmx_hardware_setup' works but the way how we fill vmx_x86_ops in can be macroed I guess. -- Vitaly _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel