diff options
| author | Marc Zyngier <[email protected]> | 2022-06-29 10:30:10 +0100 | 
|---|---|---|
| committer | Marc Zyngier <[email protected]> | 2022-06-29 10:30:10 +0100 | 
| commit | dc94f89ae68fba71f0423dde3c9956f4d9c47e5d (patch) | |
| tree | 35fb07c3f37e9c1356274ba97bf8a317c9790e46 /arch/arm64/kvm/arm.c | |
| parent | a111daf0c53ae91e71fd2bfe7497862d14132e3e (diff) | |
| parent | b4da91879e98bdd5998ee84f47f02426ac50a729 (diff) | |
Merge branch kvm-arm64/burn-the-flags into kvmarm-master/next
* kvm-arm64/burn-the-flags:
  : .
  : Rework the per-vcpu flags to make them more manageable,
  : splitting them in different sets that have specific
  : uses:
  :
  : - configuration flags
  : - input to the world-switch
  : - state bookkeeping for the kernel itself
  :
  : The FP tracking is also simplified and tracked outside
  : of the flags as a separate state.
  : .
  KVM: arm64: Move the handling of !FP outside of the fast path
  KVM: arm64: Document why pause cannot be turned into a flag
  KVM: arm64: Reduce the size of the vcpu flag members
  KVM: arm64: Add build-time sanity checks for flags
  KVM: arm64: Warn when PENDING_EXCEPTION and INCREMENT_PC are set together
  KVM: arm64: Convert vcpu sysregs_loaded_on_cpu to a state flag
  KVM: arm64: Kill unused vcpu flags field
  KVM: arm64: Move vcpu WFIT flag to the state flag set
  KVM: arm64: Move vcpu ON_UNSUPPORTED_CPU flag to the state flag set
  KVM: arm64: Move vcpu SVE/SME flags to the state flag set
  KVM: arm64: Move vcpu debug/SPE/TRBE flags to the input flag set
  KVM: arm64: Move vcpu PC/Exception flags to the input flag set
  KVM: arm64: Move vcpu configuration flags into their own set
  KVM: arm64: Add three sets of flags to the vcpu state
  KVM: arm64: Add helpers to manipulate vcpu flags among a set
  KVM: arm64: Move FP state ownership from flag to a tristate
  KVM: arm64: Drop FP_FOREIGN_STATE from the hypervisor code
Signed-off-by: Marc Zyngier <[email protected]>
Diffstat (limited to 'arch/arm64/kvm/arm.c')
| -rw-r--r-- | arch/arm64/kvm/arm.c | 12 | 
1 files changed, 9 insertions, 3 deletions
| diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c index a0188144a122..8522eb7f5bc8 100644 --- a/arch/arm64/kvm/arm.c +++ b/arch/arm64/kvm/arm.c @@ -330,6 +330,12 @@ int kvm_arch_vcpu_create(struct kvm_vcpu *vcpu)  	vcpu->arch.mmu_page_cache.gfp_zero = __GFP_ZERO; +	/* +	 * Default value for the FP state, will be overloaded at load +	 * time if we support FP (pretty likely) +	 */ +	vcpu->arch.fp_state = FP_STATE_FREE; +  	/* Set up the timer */  	kvm_timer_vcpu_init(vcpu); @@ -659,7 +665,7 @@ void kvm_vcpu_wfi(struct kvm_vcpu *vcpu)  	preempt_enable();  	kvm_vcpu_halt(vcpu); -	vcpu->arch.flags &= ~KVM_ARM64_WFIT; +	vcpu_clear_flag(vcpu, IN_WFIT);  	kvm_clear_request(KVM_REQ_UNHALT, vcpu);  	preempt_disable(); @@ -1015,8 +1021,8 @@ out:  	 * the vcpu state. Note that this relies on __kvm_adjust_pc()  	 * being preempt-safe on VHE.  	 */ -	if (unlikely(vcpu->arch.flags & (KVM_ARM64_PENDING_EXCEPTION | -					 KVM_ARM64_INCREMENT_PC))) +	if (unlikely(vcpu_get_flag(vcpu, PENDING_EXCEPTION) || +		     vcpu_get_flag(vcpu, INCREMENT_PC)))  		kvm_call_hyp(__kvm_adjust_pc, vcpu);  	vcpu_put(vcpu); |