Re: [PATCH v2 01/25] KVM: x86/mmu: avoid indirect call for get_cr3

Paolo Bonzini
2022-03-08T16:21:19Z

On 3/8/22 17:16, Sean Christopherson wrote:
>
>> +static inline unsigned long kvm_mmu_get_guest_pgd(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu)
> Wrap the params, no reason to make this line so long.
>
>> +{
>> +#ifdef CONFIG_RETPOLINE
>> + if (mmu->get_guest_pgd == kvm_get_guest_cr3)
>> + return kvm_read_cr3(vcpu);
> This is unnecessarily fragile and confusing at first glance. Compilers are smart
> enough to generate a non-inline version of functions if they're used for function
> pointers, while still inlining where appropriate. In other words, just drop
> kvm_get_guest_cr3() entirely, a al get_pdptr => kvm_pdptr_read().

Unfortunately this isn't entirely true. The function pointer will not
match between compilation units, in this case between the one that calls
kvm_mmu_get_guest_pgd and the one that assigned kvm_read_cr3 to the
function pointer.

Paolo