Re: [PATCH v5 07/69] KVM: arm64: nv: Introduce nested virtualization VCPU feature

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 13 Jan 2022 14:10:39 +0000,
Alexandru Elisei <alexandru.elisei@xxxxxxx> wrote:
> 
> Hi Marc,
> 
> On Mon, Nov 29, 2021 at 08:00:48PM +0000, Marc Zyngier wrote:
> > From: Christoffer Dall <christoffer.dall@xxxxxxx>
> > 
> > Introduce the feature bit and a primitive that checks if the feature is
> > set behind a static key check based on the cpus_have_const_cap check.
> > 
> > Checking nested_virt_in_use() on systems without nested virt enabled
> > should have neglgible overhead.
> > 
> > We don't yet allow userspace to actually set this feature.
> > 
> > Signed-off-by: Christoffer Dall <christoffer.dall@xxxxxxx>
> > Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
> > ---
> >  arch/arm64/include/asm/kvm_nested.h | 14 ++++++++++++++
> >  arch/arm64/include/uapi/asm/kvm.h   |  1 +
> >  2 files changed, 15 insertions(+)
> >  create mode 100644 arch/arm64/include/asm/kvm_nested.h
> > 
> > diff --git a/arch/arm64/include/asm/kvm_nested.h b/arch/arm64/include/asm/kvm_nested.h
> > new file mode 100644
> > index 000000000000..1028ac65a897
> > --- /dev/null
> > +++ b/arch/arm64/include/asm/kvm_nested.h
> > @@ -0,0 +1,14 @@
> > +/* SPDX-License-Identifier: GPL-2.0 */
> > +#ifndef __ARM64_KVM_NESTED_H
> > +#define __ARM64_KVM_NESTED_H
> > +
> > +#include <linux/kvm_host.h>
> > +
> > +static inline bool nested_virt_in_use(const struct kvm_vcpu *vcpu)
> > +{
> > +	return (!__is_defined(__KVM_NVHE_HYPERVISOR__) &&
> > +		cpus_have_final_cap(ARM64_HAS_NESTED_VIRT) &&
> > +		test_bit(KVM_ARM_VCPU_HAS_EL2, vcpu->arch.features));
> 
> kvm_vcpu_init_nested() checks the ARM64_HAS_NESTED_VIRT cap before setting
> the features bit, so I guess you can drop this check here if you're
> interested in correctness.
> 
> But the reason the cap check done is performance, right? Same with the NVHE
> define.

Exactly. The capability check allows us to use a static key to bypass
the test_bit() when NV isn't enable, which is 100% of our use cases.
Given that this checked fairly often on some of the fast paths, it is
worth doing it.

The NVHE check goes even further by allowing some dead code removal in
the nVHE-specific code, which cannot use NV by construction.

Thanks,

	M.

-- 
Without deviation from the norm, progress is not possible.



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux