Re: [PATCH] LoongArch: KVM: Fix FPU register width issue with user access API
From: Huacai Chen
Date: Sun Jun 07 2026 - 00:44:11 EST
Applied, thanks.
Huacai
On Wed, Jun 3, 2026 at 10:34 AM Bibo Mao <maobibo@xxxxxxxxxxx> wrote:
>
> At the beginning, only 64 bit FPU is supported. With FPU register
> get interface, 64 bit FPU data is copied to user space, the same with
> FPU set API. However with LSX and LASX supported in later, there should
> be FPU data copied with bigger width. Here fixes this issue, copy the
> whole 256 bit FPU data to user space.
>
> Fixes: db1ecca22edf ("LoongArch: KVM: Add LSX (128bit SIMD) support")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Bibo Mao <maobibo@xxxxxxxxxxx>
> ---
> arch/loongarch/kvm/vcpu.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/loongarch/kvm/vcpu.c b/arch/loongarch/kvm/vcpu.c
> index e28084c49e68..2e40386f8686 100644
> --- a/arch/loongarch/kvm/vcpu.c
> +++ b/arch/loongarch/kvm/vcpu.c
> @@ -1312,7 +1312,7 @@ int kvm_arch_vcpu_ioctl_get_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
> fpu->fcc = vcpu->arch.fpu.fcc;
> fpu->fcsr = vcpu->arch.fpu.fcsr;
> for (i = 0; i < NUM_FPU_REGS; i++)
> - memcpy(&fpu->fpr[i], &vcpu->arch.fpu.fpr[i], FPU_REG_WIDTH / 64);
> + memcpy(&fpu->fpr[i], &vcpu->arch.fpu.fpr[i], sizeof(union fpureg));
>
> return 0;
> }
> @@ -1324,7 +1324,7 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
> vcpu->arch.fpu.fcc = fpu->fcc;
> vcpu->arch.fpu.fcsr = fpu->fcsr;
> for (i = 0; i < NUM_FPU_REGS; i++)
> - memcpy(&vcpu->arch.fpu.fpr[i], &fpu->fpr[i], FPU_REG_WIDTH / 64);
> + memcpy(&vcpu->arch.fpu.fpr[i], &fpu->fpr[i], sizeof(union fpureg));
>
> return 0;
> }
>
> base-commit: e43ffb69e0438cddd72aaa30898b4dc446f664f8
> --
> 2.39.3
>
>