Re: [PATCH 6.6 2/8] KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state

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

 



[ Sasha's backport helper bot ]

Hi,

✅ All tests passed successfully. No issues detected.
No action required from the submitter.

The upstream commit SHA1 provided is correct: fbc7e61195e23f744814e78524b73b59faa54ab4

WARNING: Author mismatch between patch and upstream commit:
Backport author: Mark Brown<broonie@xxxxxxxxxx>
Commit author: Mark Rutland<mark.rutland@xxxxxxx>

Status in newer kernel trees:
6.13.y | Present (different SHA1: 8361da508047)
6.12.y | Present (different SHA1: 6942e1f47a00)

Note: The patch differs from the upstream commit:
---
1:  fbc7e61195e23 ! 1:  2d0c224eda446 KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
    @@ Metadata
      ## Commit message ##
         KVM: arm64: Unconditionally save+flush host FPSIMD/SVE/SME state
     
    +    [ Upstream commit fbc7e61195e23f744814e78524b73b59faa54ab4 ]
    +
         There are several problems with the way hyp code lazily saves the host's
         FPSIMD/SVE state, including:
     
    @@ Commit message
         Reviewed-by: Oliver Upton <oliver.upton@xxxxxxxxx>
         Link: https://lore.kernel.org/r/20250210195226.1215254-2-mark.rutland@xxxxxxx
         Signed-off-by: Marc Zyngier <maz@xxxxxxxxxx>
    +    [ Mark: Handle vcpu/host flag conflict ]
    +    Signed-off-by: Mark Rutland <mark.rutland@xxxxxxx>
    +    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
     
      ## arch/arm64/kernel/fpsimd.c ##
     @@ arch/arm64/kernel/fpsimd.c: void fpsimd_signal_preserve_current_state(void)
    @@ arch/arm64/kvm/fpsimd.c: void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
     +	 * When the host may use SME, fpsimd_save_and_flush_cpu_state() ensures
     +	 * that PSTATE.{SM,ZA} == {0,0}.
      	 */
    --	*host_data_ptr(fp_owner) = FP_STATE_HOST_OWNED;
    --	*host_data_ptr(fpsimd_state) = kern_hyp_va(&current->thread.uw.fpsimd_state);
    --	*host_data_ptr(fpmr_ptr) = kern_hyp_va(&current->thread.uw.fpmr);
    +-	vcpu->arch.fp_state = FP_STATE_HOST_OWNED;
     +	fpsimd_save_and_flush_cpu_state();
    -+	*host_data_ptr(fp_owner) = FP_STATE_FREE;
    -+	*host_data_ptr(fpsimd_state) = NULL;
    -+	*host_data_ptr(fpmr_ptr) = NULL;
    ++	vcpu->arch.fp_state = FP_STATE_FREE;
      
    - 	host_data_clear_flag(HOST_SVE_ENABLED);
    + 	vcpu_clear_flag(vcpu, HOST_SVE_ENABLED);
      	if (read_sysreg(cpacr_el1) & CPACR_EL1_ZEN_EL0EN)
     @@ arch/arm64/kvm/fpsimd.c: void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
    - 		host_data_clear_flag(HOST_SME_ENABLED);
    + 		vcpu_clear_flag(vcpu, HOST_SME_ENABLED);
      		if (read_sysreg(cpacr_el1) & CPACR_EL1_SMEN_EL0EN)
    - 			host_data_set_flag(HOST_SME_ENABLED);
    + 			vcpu_set_flag(vcpu, HOST_SME_ENABLED);
     -
     -		/*
     -		 * If PSTATE.SM is enabled then save any pending FP
    @@ arch/arm64/kvm/fpsimd.c: void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu)
     -		 * been saved, this is very unlikely to happen.
     -		 */
     -		if (read_sysreg_s(SYS_SVCR) & (SVCR_SM_MASK | SVCR_ZA_MASK)) {
    --			*host_data_ptr(fp_owner) = FP_STATE_FREE;
    +-			vcpu->arch.fp_state = FP_STATE_FREE;
     -			fpsimd_save_and_flush_cpu_state();
     -		}
      	}
    + }
      
    - 	/*
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.12.y       |  Success    |  Success   |




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux