]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
LoongArch: KVM: Fix FPU register width with user access API
authorBibo Mao <maobibo@loongson.cn>
Thu, 11 Jun 2026 12:46:40 +0000 (20:46 +0800)
committerHuacai Chen <chenhuacai@loongson.cn>
Thu, 11 Jun 2026 12:46:40 +0000 (20:46 +0800)
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
register set API. However with LSX and LASX supported in later, there
should be FPU data copied with bigger width. So here fixes this issue,
copy the whole 256 bit FPU data from/to user space.

Cc: stable@vger.kernel.org
Fixes: db1ecca22edf ("LoongArch: KVM: Add LSX (128bit SIMD) support")
Signed-off-by: Bibo Mao <maobibo@loongson.cn>
Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
arch/loongarch/kvm/vcpu.c

index 27a738cb53f2beb195bd1c694bf0d2f4541740a7..ab0b0da270cae8b35d317ad160fc7987e6039f48 100644 (file)
@@ -1303,7 +1303,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;
 }
@@ -1315,7 +1315,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;
 }